Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Kees Cook and committed by
Jacek Anaszewski
26c7d6a3 55edd1da

+10 -6
+10 -6
drivers/leds/trigger/ledtrig-heartbeat.c
··· 25 25 static int panic_heartbeats; 26 26 27 27 struct heartbeat_trig_data { 28 + struct led_classdev *led_cdev; 28 29 unsigned int phase; 29 30 unsigned int period; 30 31 struct timer_list timer; 31 32 unsigned int invert; 32 33 }; 33 34 34 - static void led_heartbeat_function(unsigned long data) 35 + static void led_heartbeat_function(struct timer_list *t) 35 36 { 36 - struct led_classdev *led_cdev = (struct led_classdev *) data; 37 - struct heartbeat_trig_data *heartbeat_data = led_cdev->trigger_data; 37 + struct heartbeat_trig_data *heartbeat_data = 38 + from_timer(heartbeat_data, t, timer); 39 + struct led_classdev *led_cdev; 38 40 unsigned long brightness = LED_OFF; 39 41 unsigned long delay = 0; 42 + 43 + led_cdev = heartbeat_data->led_cdev; 40 44 41 45 if (unlikely(panic_heartbeats)) { 42 46 led_set_brightness_nosleep(led_cdev, LED_OFF); ··· 131 127 return; 132 128 133 129 led_cdev->trigger_data = heartbeat_data; 130 + heartbeat_data->led_cdev = led_cdev; 134 131 rc = device_create_file(led_cdev->dev, &dev_attr_invert); 135 132 if (rc) { 136 133 kfree(led_cdev->trigger_data); 137 134 return; 138 135 } 139 136 140 - setup_timer(&heartbeat_data->timer, 141 - led_heartbeat_function, (unsigned long) led_cdev); 137 + timer_setup(&heartbeat_data->timer, led_heartbeat_function, 0); 142 138 heartbeat_data->phase = 0; 143 139 if (!led_cdev->blink_brightness) 144 140 led_cdev->blink_brightness = led_cdev->max_brightness; 145 - led_heartbeat_function(heartbeat_data->timer.data); 141 + led_heartbeat_function(&heartbeat_data->timer); 146 142 set_bit(LED_BLINK_SW, &led_cdev->work_flags); 147 143 led_cdev->activated = true; 148 144 }