leds: Convert timers to use timer_setup()
authorKees Cook <keescook@chromium.org>
Wed, 25 Oct 2017 10:30:01 +0000 (03:30 -0700)
committerJacek Anaszewski <jacek.anaszewski@gmail.com>
Wed, 25 Oct 2017 19:52:22 +0000 (21:52 +0200)
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>
drivers/leds/led-core.c
drivers/leds/trigger/ledtrig-activity.c
drivers/leds/trigger/ledtrig-transient.c

index ef13604..fd83c7f 100644 (file)
@@ -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);
 
index c6635c5..5081894 100644 (file)
@@ -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;
 }
index 7e6011b..7acce64 100644 (file)
@@ -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;