leds: ledtrig-heartbeat: Convert timers to use timer_setup()
Instead of using .data directly, convert to from_timer. Since the trigger_data is allocated separately, the led_cdev must be explicitly tracked for the callback. Cc: Richard Purdie <rpurdie@rpsys.net> Cc: Pavel Machek <pavel@ucw.cz> Cc: Zhang Bo <bo.zhang@nxp.com> Cc: Linus Walleij <linus.walleij@linaro.org> Cc: Ingo Molnar <mingo@kernel.org> Cc: linux-leds@vger.kernel.org Cc: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Kees Cook <keescook@chromium.org> Signed-off-by: Jacek Anaszewski <jacek.anaszewski@gmail.com>
This commit is contained in:
Родитель
55edd1dad9
Коммит
26c7d6a321
|
@ -25,19 +25,23 @@
|
|||
static int panic_heartbeats;
|
||||
|
||||
struct heartbeat_trig_data {
|
||||
struct led_classdev *led_cdev;
|
||||
unsigned int phase;
|
||||
unsigned int period;
|
||||
struct timer_list timer;
|
||||
unsigned int invert;
|
||||
};
|
||||
|
||||
static void led_heartbeat_function(unsigned long data)
|
||||
static void led_heartbeat_function(struct timer_list *t)
|
||||
{
|
||||
struct led_classdev *led_cdev = (struct led_classdev *) data;
|
||||
struct heartbeat_trig_data *heartbeat_data = led_cdev->trigger_data;
|
||||
struct heartbeat_trig_data *heartbeat_data =
|
||||
from_timer(heartbeat_data, t, timer);
|
||||
struct led_classdev *led_cdev;
|
||||
unsigned long brightness = LED_OFF;
|
||||
unsigned long delay = 0;
|
||||
|
||||
led_cdev = heartbeat_data->led_cdev;
|
||||
|
||||
if (unlikely(panic_heartbeats)) {
|
||||
led_set_brightness_nosleep(led_cdev, LED_OFF);
|
||||
return;
|
||||
|
@ -127,18 +131,18 @@ static void heartbeat_trig_activate(struct led_classdev *led_cdev)
|
|||
return;
|
||||
|
||||
led_cdev->trigger_data = heartbeat_data;
|
||||
heartbeat_data->led_cdev = led_cdev;
|
||||
rc = device_create_file(led_cdev->dev, &dev_attr_invert);
|
||||
if (rc) {
|
||||
kfree(led_cdev->trigger_data);
|
||||
return;
|
||||
}
|
||||
|
||||
setup_timer(&heartbeat_data->timer,
|
||||
led_heartbeat_function, (unsigned long) led_cdev);
|
||||
timer_setup(&heartbeat_data->timer, led_heartbeat_function, 0);
|
||||
heartbeat_data->phase = 0;
|
||||
if (!led_cdev->blink_brightness)
|
||||
led_cdev->blink_brightness = led_cdev->max_brightness;
|
||||
led_heartbeat_function(heartbeat_data->timer.data);
|
||||
led_heartbeat_function(&heartbeat_data->timer);
|
||||
set_bit(LED_BLINK_SW, &led_cdev->work_flags);
|
||||
led_cdev->activated = true;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче