Commit 49404665 authored by Kees Cook's avatar Kees Cook Committed by Jacek Anaszewski

leds: Convert timers to use timer_setup()

In preparation for unconditionally passing the struct timer_list pointer to
all timer callbacks, switch to using the new timer_setup() and from_timer()
to pass the timer pointer explicitly.

Cc: Richard Purdie <rpurdie@rpsys.net>
Cc: Pavel Machek <pavel@ucw.cz>
Cc: Willy Tarreau <w@1wt.eu>
Cc: linux-leds@vger.kernel.org
Signed-off-by: default avatarKees Cook <keescook@chromium.org>
Signed-off-by: default avatarJacek Anaszewski <jacek.anaszewski@gmail.com>
parent 3f3d60d6
...@@ -45,9 +45,9 @@ static int __led_set_brightness_blocking(struct led_classdev *led_cdev, ...@@ -45,9 +45,9 @@ static int __led_set_brightness_blocking(struct led_classdev *led_cdev,
return led_cdev->brightness_set_blocking(led_cdev, value); return led_cdev->brightness_set_blocking(led_cdev, value);
} }
static void led_timer_function(unsigned long data) static void led_timer_function(struct timer_list *t)
{ {
struct led_classdev *led_cdev = (void *)data; struct led_classdev *led_cdev = from_timer(led_cdev, t, blink_timer);
unsigned long brightness; unsigned long brightness;
unsigned long delay; unsigned long delay;
...@@ -178,8 +178,7 @@ void led_init_core(struct led_classdev *led_cdev) ...@@ -178,8 +178,7 @@ void led_init_core(struct led_classdev *led_cdev)
{ {
INIT_WORK(&led_cdev->set_brightness_work, set_brightness_delayed); INIT_WORK(&led_cdev->set_brightness_work, set_brightness_delayed);
setup_timer(&led_cdev->blink_timer, led_timer_function, timer_setup(&led_cdev->blink_timer, led_timer_function, 0);
(unsigned long)led_cdev);
} }
EXPORT_SYMBOL_GPL(led_init_core); EXPORT_SYMBOL_GPL(led_init_core);
......
...@@ -24,6 +24,7 @@ static int panic_detected; ...@@ -24,6 +24,7 @@ static int panic_detected;
struct activity_data { struct activity_data {
struct timer_list timer; struct timer_list timer;
struct led_classdev *led_cdev;
u64 last_used; u64 last_used;
u64 last_boot; u64 last_boot;
int time_left; int time_left;
...@@ -31,10 +32,11 @@ struct activity_data { ...@@ -31,10 +32,11 @@ struct activity_data {
int invert; int invert;
}; };
static void led_activity_function(unsigned long data) static void led_activity_function(struct timer_list *t)
{ {
struct led_classdev *led_cdev = (struct led_classdev *)data; struct activity_data *activity_data = from_timer(activity_data, t,
struct activity_data *activity_data = led_cdev->trigger_data; timer);
struct led_classdev *led_cdev = activity_data->led_cdev;
struct timespec boot_time; struct timespec boot_time;
unsigned int target; unsigned int target;
unsigned int usage; unsigned int usage;
...@@ -195,11 +197,11 @@ static void activity_activate(struct led_classdev *led_cdev) ...@@ -195,11 +197,11 @@ static void activity_activate(struct led_classdev *led_cdev)
return; return;
} }
setup_timer(&activity_data->timer, activity_data->led_cdev = led_cdev;
led_activity_function, (unsigned long)led_cdev); timer_setup(&activity_data->timer, led_activity_function, 0);
if (!led_cdev->blink_brightness) if (!led_cdev->blink_brightness)
led_cdev->blink_brightness = led_cdev->max_brightness; led_cdev->blink_brightness = led_cdev->max_brightness;
led_activity_function(activity_data->timer.data); led_activity_function(&activity_data->timer);
set_bit(LED_BLINK_SW, &led_cdev->work_flags); set_bit(LED_BLINK_SW, &led_cdev->work_flags);
led_cdev->activated = true; led_cdev->activated = true;
} }
......
...@@ -33,12 +33,14 @@ struct transient_trig_data { ...@@ -33,12 +33,14 @@ struct transient_trig_data {
int restore_state; int restore_state;
unsigned long duration; unsigned long duration;
struct timer_list timer; struct timer_list timer;
struct led_classdev *led_cdev;
}; };
static void transient_timer_function(unsigned long data) static void transient_timer_function(struct timer_list *t)
{ {
struct led_classdev *led_cdev = (struct led_classdev *) data; struct transient_trig_data *transient_data =
struct transient_trig_data *transient_data = led_cdev->trigger_data; from_timer(transient_data, t, timer);
struct led_classdev *led_cdev = transient_data->led_cdev;
transient_data->activate = 0; transient_data->activate = 0;
led_set_brightness_nosleep(led_cdev, transient_data->restore_state); led_set_brightness_nosleep(led_cdev, transient_data->restore_state);
...@@ -169,6 +171,7 @@ static void transient_trig_activate(struct led_classdev *led_cdev) ...@@ -169,6 +171,7 @@ static void transient_trig_activate(struct led_classdev *led_cdev)
return; return;
} }
led_cdev->trigger_data = tdata; led_cdev->trigger_data = tdata;
tdata->led_cdev = led_cdev;
rc = device_create_file(led_cdev->dev, &dev_attr_activate); rc = device_create_file(led_cdev->dev, &dev_attr_activate);
if (rc) if (rc)
...@@ -182,8 +185,7 @@ static void transient_trig_activate(struct led_classdev *led_cdev) ...@@ -182,8 +185,7 @@ static void transient_trig_activate(struct led_classdev *led_cdev)
if (rc) if (rc)
goto err_out_state; goto err_out_state;
setup_timer(&tdata->timer, transient_timer_function, timer_setup(&tdata->timer, transient_timer_function, 0);
(unsigned long) led_cdev);
led_cdev->activated = true; led_cdev->activated = true;
return; return;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment