diff options
author | Kees Cook <keescook@chromium.org> | 2017-10-25 03:30:01 -0700 |
---|---|---|
committer | Jacek Anaszewski <jacek.anaszewski@gmail.com> | 2017-10-25 21:52:22 +0200 |
commit | 49404665b935447d4f2d5509fbff569b7bf8c495 (patch) | |
tree | ffd76d54cf5547b6a29d5f401c29803dd1cf2add | |
parent | 3f3d60d6254cfe0b1a2ab675ec1f72f232314eff (diff) | |
download | op-kernel-dev-49404665b935447d4f2d5509fbff569b7bf8c495.zip op-kernel-dev-49404665b935447d4f2d5509fbff569b7bf8c495.tar.gz |
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: Kees Cook <keescook@chromium.org>
Signed-off-by: Jacek Anaszewski <jacek.anaszewski@gmail.com>
-rw-r--r-- | drivers/leds/led-core.c | 7 | ||||
-rw-r--r-- | drivers/leds/trigger/ledtrig-activity.c | 14 | ||||
-rw-r--r-- | drivers/leds/trigger/ledtrig-transient.c | 12 |
3 files changed, 18 insertions, 15 deletions
diff --git a/drivers/leds/led-core.c b/drivers/leds/led-core.c index ef13604..fd83c7f 100644 --- a/drivers/leds/led-core.c +++ b/drivers/leds/led-core.c @@ -45,9 +45,9 @@ static int __led_set_brightness_blocking(struct led_classdev *led_cdev, 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 delay; @@ -178,8 +178,7 @@ void led_init_core(struct led_classdev *led_cdev) { INIT_WORK(&led_cdev->set_brightness_work, set_brightness_delayed); - setup_timer(&led_cdev->blink_timer, led_timer_function, - (unsigned long)led_cdev); + timer_setup(&led_cdev->blink_timer, led_timer_function, 0); } EXPORT_SYMBOL_GPL(led_init_core); diff --git a/drivers/leds/trigger/ledtrig-activity.c b/drivers/leds/trigger/ledtrig-activity.c index c6635c5..5081894 100644 --- a/drivers/leds/trigger/ledtrig-activity.c +++ b/drivers/leds/trigger/ledtrig-activity.c @@ -24,6 +24,7 @@ static int panic_detected; struct activity_data { struct timer_list timer; + struct led_classdev *led_cdev; u64 last_used; u64 last_boot; int time_left; @@ -31,10 +32,11 @@ struct activity_data { 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 = led_cdev->trigger_data; + struct activity_data *activity_data = from_timer(activity_data, t, + timer); + struct led_classdev *led_cdev = activity_data->led_cdev; struct timespec boot_time; unsigned int target; unsigned int usage; @@ -195,11 +197,11 @@ static void activity_activate(struct led_classdev *led_cdev) return; } - setup_timer(&activity_data->timer, - led_activity_function, (unsigned long)led_cdev); + activity_data->led_cdev = led_cdev; + timer_setup(&activity_data->timer, led_activity_function, 0); if (!led_cdev->blink_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); led_cdev->activated = true; } diff --git a/drivers/leds/trigger/ledtrig-transient.c b/drivers/leds/trigger/ledtrig-transient.c index 7e6011b..7acce64 100644 --- a/drivers/leds/trigger/ledtrig-transient.c +++ b/drivers/leds/trigger/ledtrig-transient.c @@ -33,12 +33,14 @@ struct transient_trig_data { int restore_state; unsigned long duration; 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 = led_cdev->trigger_data; + struct transient_trig_data *transient_data = + from_timer(transient_data, t, timer); + struct led_classdev *led_cdev = transient_data->led_cdev; transient_data->activate = 0; led_set_brightness_nosleep(led_cdev, transient_data->restore_state); @@ -169,6 +171,7 @@ static void transient_trig_activate(struct led_classdev *led_cdev) return; } led_cdev->trigger_data = tdata; + tdata->led_cdev = led_cdev; rc = device_create_file(led_cdev->dev, &dev_attr_activate); if (rc) @@ -182,8 +185,7 @@ static void transient_trig_activate(struct led_classdev *led_cdev) if (rc) goto err_out_state; - setup_timer(&tdata->timer, transient_timer_function, - (unsigned long) led_cdev); + timer_setup(&tdata->timer, transient_timer_function, 0); led_cdev->activated = true; return; |