diff options
author | Jacek Anaszewski <j.anaszewski@samsung.com> | 2015-09-28 08:38:04 -0400 |
---|---|---|
committer | Jacek Anaszewski <j.anaszewski@samsung.com> | 2015-11-03 02:59:22 -0500 |
commit | 757b06ae04b3b6c8958ab067e879a8865d076d2a (patch) | |
tree | c210be20cf1c644e2c156acf216f2734526c8cfa /drivers/leds/led-class.c | |
parent | 22a16873d38829570677871a22cf77f00445206f (diff) |
leds: core: Move LED core callbacks out of led-class.c
Since the API for controlling LED brightness and blinking is defined in
the LED core, move the related timer and work callbacks to the led-core.c,
and initialize them through a new led_core_init API.
Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
Acked-by: Andrew Lunn <andrew@lunn.ch>
Acked-by: Pavel Machek <pavel@ucw.cz>
Diffstat (limited to 'drivers/leds/led-class.c')
-rw-r--r-- | drivers/leds/led-class.c | 69 |
1 files changed, 1 insertions, 68 deletions
diff --git a/drivers/leds/led-class.c b/drivers/leds/led-class.c index ca51d58bed24..7385f98dd54b 100644 --- a/drivers/leds/led-class.c +++ b/drivers/leds/led-class.c | |||
@@ -102,70 +102,6 @@ static const struct attribute_group *led_groups[] = { | |||
102 | NULL, | 102 | NULL, |
103 | }; | 103 | }; |
104 | 104 | ||
105 | static void led_timer_function(unsigned long data) | ||
106 | { | ||
107 | struct led_classdev *led_cdev = (void *)data; | ||
108 | unsigned long brightness; | ||
109 | unsigned long delay; | ||
110 | |||
111 | if (!led_cdev->blink_delay_on || !led_cdev->blink_delay_off) { | ||
112 | led_set_brightness_async(led_cdev, LED_OFF); | ||
113 | return; | ||
114 | } | ||
115 | |||
116 | if (led_cdev->flags & LED_BLINK_ONESHOT_STOP) { | ||
117 | led_cdev->flags &= ~LED_BLINK_ONESHOT_STOP; | ||
118 | return; | ||
119 | } | ||
120 | |||
121 | brightness = led_get_brightness(led_cdev); | ||
122 | if (!brightness) { | ||
123 | /* Time to switch the LED on. */ | ||
124 | if (led_cdev->delayed_set_value) { | ||
125 | led_cdev->blink_brightness = | ||
126 | led_cdev->delayed_set_value; | ||
127 | led_cdev->delayed_set_value = 0; | ||
128 | } | ||
129 | brightness = led_cdev->blink_brightness; | ||
130 | delay = led_cdev->blink_delay_on; | ||
131 | } else { | ||
132 | /* Store the current brightness value to be able | ||
133 | * to restore it when the delay_off period is over. | ||
134 | */ | ||
135 | led_cdev->blink_brightness = brightness; | ||
136 | brightness = LED_OFF; | ||
137 | delay = led_cdev->blink_delay_off; | ||
138 | } | ||
139 | |||
140 | led_set_brightness_async(led_cdev, brightness); | ||
141 | |||
142 | /* Return in next iteration if led is in one-shot mode and we are in | ||
143 | * the final blink state so that the led is toggled each delay_on + | ||
144 | * delay_off milliseconds in worst case. | ||
145 | */ | ||
146 | if (led_cdev->flags & LED_BLINK_ONESHOT) { | ||
147 | if (led_cdev->flags & LED_BLINK_INVERT) { | ||
148 | if (brightness) | ||
149 | led_cdev->flags |= LED_BLINK_ONESHOT_STOP; | ||
150 | } else { | ||
151 | if (!brightness) | ||
152 | led_cdev->flags |= LED_BLINK_ONESHOT_STOP; | ||
153 | } | ||
154 | } | ||
155 | |||
156 | mod_timer(&led_cdev->blink_timer, jiffies + msecs_to_jiffies(delay)); | ||
157 | } | ||
158 | |||
159 | static void set_brightness_delayed(struct work_struct *ws) | ||
160 | { | ||
161 | struct led_classdev *led_cdev = | ||
162 | container_of(ws, struct led_classdev, set_brightness_work); | ||
163 | |||
164 | led_stop_software_blink(led_cdev); | ||
165 | |||
166 | led_set_brightness_async(led_cdev, led_cdev->delayed_set_value); | ||
167 | } | ||
168 | |||
169 | /** | 105 | /** |
170 | * led_classdev_suspend - suspend an led_classdev. | 106 | * led_classdev_suspend - suspend an led_classdev. |
171 | * @led_cdev: the led_classdev to suspend. | 107 | * @led_cdev: the led_classdev to suspend. |
@@ -283,10 +219,7 @@ int led_classdev_register(struct device *parent, struct led_classdev *led_cdev) | |||
283 | 219 | ||
284 | led_update_brightness(led_cdev); | 220 | led_update_brightness(led_cdev); |
285 | 221 | ||
286 | INIT_WORK(&led_cdev->set_brightness_work, set_brightness_delayed); | 222 | led_init_core(led_cdev); |
287 | |||
288 | setup_timer(&led_cdev->blink_timer, led_timer_function, | ||
289 | (unsigned long)led_cdev); | ||
290 | 223 | ||
291 | #ifdef CONFIG_LEDS_TRIGGERS | 224 | #ifdef CONFIG_LEDS_TRIGGERS |
292 | led_trigger_set_default(led_cdev); | 225 | led_trigger_set_default(led_cdev); |