Lines Matching refs:led_cdev

42 static int __led_set_brightness(struct led_classdev *led_cdev, unsigned int value)  in __led_set_brightness()  argument
44 if (!led_cdev->brightness_set) in __led_set_brightness()
47 led_cdev->brightness_set(led_cdev, value); in __led_set_brightness()
52 static int __led_set_brightness_blocking(struct led_classdev *led_cdev, unsigned int value) in __led_set_brightness_blocking() argument
54 if (!led_cdev->brightness_set_blocking) in __led_set_brightness_blocking()
57 return led_cdev->brightness_set_blocking(led_cdev, value); in __led_set_brightness_blocking()
62 struct led_classdev *led_cdev = from_timer(led_cdev, t, blink_timer); in led_timer_function() local
66 if (!led_cdev->blink_delay_on || !led_cdev->blink_delay_off) { in led_timer_function()
67 led_set_brightness_nosleep(led_cdev, LED_OFF); in led_timer_function()
68 clear_bit(LED_BLINK_SW, &led_cdev->work_flags); in led_timer_function()
73 &led_cdev->work_flags)) { in led_timer_function()
74 clear_bit(LED_BLINK_SW, &led_cdev->work_flags); in led_timer_function()
78 brightness = led_get_brightness(led_cdev); in led_timer_function()
82 &led_cdev->work_flags)) in led_timer_function()
83 brightness = led_cdev->new_blink_brightness; in led_timer_function()
85 brightness = led_cdev->blink_brightness; in led_timer_function()
86 delay = led_cdev->blink_delay_on; in led_timer_function()
91 led_cdev->blink_brightness = brightness; in led_timer_function()
93 delay = led_cdev->blink_delay_off; in led_timer_function()
96 led_set_brightness_nosleep(led_cdev, brightness); in led_timer_function()
102 if (test_bit(LED_BLINK_ONESHOT, &led_cdev->work_flags)) { in led_timer_function()
103 if (test_bit(LED_BLINK_INVERT, &led_cdev->work_flags)) { in led_timer_function()
106 &led_cdev->work_flags); in led_timer_function()
110 &led_cdev->work_flags); in led_timer_function()
114 mod_timer(&led_cdev->blink_timer, jiffies + msecs_to_jiffies(delay)); in led_timer_function()
117 static void set_brightness_delayed_set_brightness(struct led_classdev *led_cdev, in set_brightness_delayed_set_brightness() argument
122 ret = __led_set_brightness(led_cdev, value); in set_brightness_delayed_set_brightness()
124 ret = __led_set_brightness_blocking(led_cdev, value); in set_brightness_delayed_set_brightness()
127 !(ret == -ENODEV && (led_cdev->flags & LED_UNREGISTERING) && in set_brightness_delayed_set_brightness()
128 (led_cdev->flags & LED_HW_PLUGGABLE))) in set_brightness_delayed_set_brightness()
129 dev_err(led_cdev->dev, in set_brightness_delayed_set_brightness()
135 struct led_classdev *led_cdev = in set_brightness_delayed() local
138 if (test_and_clear_bit(LED_BLINK_DISABLE, &led_cdev->work_flags)) { in set_brightness_delayed()
139 led_stop_software_blink(led_cdev); in set_brightness_delayed()
140 set_bit(LED_SET_BRIGHTNESS_OFF, &led_cdev->work_flags); in set_brightness_delayed()
150 if (test_and_clear_bit(LED_SET_BRIGHTNESS_OFF, &led_cdev->work_flags)) in set_brightness_delayed()
151 set_brightness_delayed_set_brightness(led_cdev, LED_OFF); in set_brightness_delayed()
153 if (test_and_clear_bit(LED_SET_BRIGHTNESS, &led_cdev->work_flags)) in set_brightness_delayed()
154 set_brightness_delayed_set_brightness(led_cdev, led_cdev->delayed_set_value); in set_brightness_delayed()
156 if (test_and_clear_bit(LED_SET_BLINK, &led_cdev->work_flags)) { in set_brightness_delayed()
157 unsigned long delay_on = led_cdev->delayed_delay_on; in set_brightness_delayed()
158 unsigned long delay_off = led_cdev->delayed_delay_off; in set_brightness_delayed()
160 led_blink_set(led_cdev, &delay_on, &delay_off); in set_brightness_delayed()
164 static void led_set_software_blink(struct led_classdev *led_cdev, in led_set_software_blink() argument
170 current_brightness = led_get_brightness(led_cdev); in led_set_software_blink()
172 led_cdev->blink_brightness = current_brightness; in led_set_software_blink()
173 if (!led_cdev->blink_brightness) in led_set_software_blink()
174 led_cdev->blink_brightness = led_cdev->max_brightness; in led_set_software_blink()
176 led_cdev->blink_delay_on = delay_on; in led_set_software_blink()
177 led_cdev->blink_delay_off = delay_off; in led_set_software_blink()
181 led_set_brightness_nosleep(led_cdev, LED_OFF); in led_set_software_blink()
187 led_set_brightness_nosleep(led_cdev, in led_set_software_blink()
188 led_cdev->blink_brightness); in led_set_software_blink()
192 set_bit(LED_BLINK_SW, &led_cdev->work_flags); in led_set_software_blink()
193 mod_timer(&led_cdev->blink_timer, jiffies + 1); in led_set_software_blink()
197 static void led_blink_setup(struct led_classdev *led_cdev, in led_blink_setup() argument
201 if (!test_bit(LED_BLINK_ONESHOT, &led_cdev->work_flags) && in led_blink_setup()
202 led_cdev->blink_set && in led_blink_setup()
203 !led_cdev->blink_set(led_cdev, delay_on, delay_off)) in led_blink_setup()
210 led_set_software_blink(led_cdev, *delay_on, *delay_off); in led_blink_setup()
213 void led_init_core(struct led_classdev *led_cdev) in led_init_core() argument
215 INIT_WORK(&led_cdev->set_brightness_work, set_brightness_delayed); in led_init_core()
217 timer_setup(&led_cdev->blink_timer, led_timer_function, 0); in led_init_core()
221 void led_blink_set(struct led_classdev *led_cdev, in led_blink_set() argument
225 del_timer_sync(&led_cdev->blink_timer); in led_blink_set()
227 clear_bit(LED_BLINK_SW, &led_cdev->work_flags); in led_blink_set()
228 clear_bit(LED_BLINK_ONESHOT, &led_cdev->work_flags); in led_blink_set()
229 clear_bit(LED_BLINK_ONESHOT_STOP, &led_cdev->work_flags); in led_blink_set()
231 led_blink_setup(led_cdev, delay_on, delay_off); in led_blink_set()
235 void led_blink_set_oneshot(struct led_classdev *led_cdev, in led_blink_set_oneshot() argument
240 if (test_bit(LED_BLINK_ONESHOT, &led_cdev->work_flags) && in led_blink_set_oneshot()
241 timer_pending(&led_cdev->blink_timer)) in led_blink_set_oneshot()
244 set_bit(LED_BLINK_ONESHOT, &led_cdev->work_flags); in led_blink_set_oneshot()
245 clear_bit(LED_BLINK_ONESHOT_STOP, &led_cdev->work_flags); in led_blink_set_oneshot()
248 set_bit(LED_BLINK_INVERT, &led_cdev->work_flags); in led_blink_set_oneshot()
250 clear_bit(LED_BLINK_INVERT, &led_cdev->work_flags); in led_blink_set_oneshot()
252 led_blink_setup(led_cdev, delay_on, delay_off); in led_blink_set_oneshot()
256 void led_blink_set_nosleep(struct led_classdev *led_cdev, unsigned long delay_on, in led_blink_set_nosleep() argument
260 if (led_cdev->blink_set && led_cdev->brightness_set_blocking) { in led_blink_set_nosleep()
261 led_cdev->delayed_delay_on = delay_on; in led_blink_set_nosleep()
262 led_cdev->delayed_delay_off = delay_off; in led_blink_set_nosleep()
263 set_bit(LED_SET_BLINK, &led_cdev->work_flags); in led_blink_set_nosleep()
264 schedule_work(&led_cdev->set_brightness_work); in led_blink_set_nosleep()
268 led_blink_set(led_cdev, &delay_on, &delay_off); in led_blink_set_nosleep()
272 void led_stop_software_blink(struct led_classdev *led_cdev) in led_stop_software_blink() argument
274 del_timer_sync(&led_cdev->blink_timer); in led_stop_software_blink()
275 led_cdev->blink_delay_on = 0; in led_stop_software_blink()
276 led_cdev->blink_delay_off = 0; in led_stop_software_blink()
277 clear_bit(LED_BLINK_SW, &led_cdev->work_flags); in led_stop_software_blink()
281 void led_set_brightness(struct led_classdev *led_cdev, unsigned int brightness) in led_set_brightness() argument
287 if (test_bit(LED_BLINK_SW, &led_cdev->work_flags)) { in led_set_brightness()
294 set_bit(LED_BLINK_DISABLE, &led_cdev->work_flags); in led_set_brightness()
295 schedule_work(&led_cdev->set_brightness_work); in led_set_brightness()
298 &led_cdev->work_flags); in led_set_brightness()
299 led_cdev->new_blink_brightness = brightness; in led_set_brightness()
304 led_set_brightness_nosleep(led_cdev, brightness); in led_set_brightness()
308 void led_set_brightness_nopm(struct led_classdev *led_cdev, unsigned int value) in led_set_brightness_nopm() argument
311 if (!__led_set_brightness(led_cdev, value)) in led_set_brightness_nopm()
323 led_cdev->delayed_set_value = value; in led_set_brightness_nopm()
324 set_bit(LED_SET_BRIGHTNESS, &led_cdev->work_flags); in led_set_brightness_nopm()
326 clear_bit(LED_SET_BRIGHTNESS, &led_cdev->work_flags); in led_set_brightness_nopm()
327 clear_bit(LED_SET_BLINK, &led_cdev->work_flags); in led_set_brightness_nopm()
328 set_bit(LED_SET_BRIGHTNESS_OFF, &led_cdev->work_flags); in led_set_brightness_nopm()
331 schedule_work(&led_cdev->set_brightness_work); in led_set_brightness_nopm()
335 void led_set_brightness_nosleep(struct led_classdev *led_cdev, unsigned int value) in led_set_brightness_nosleep() argument
337 led_cdev->brightness = min(value, led_cdev->max_brightness); in led_set_brightness_nosleep()
339 if (led_cdev->flags & LED_SUSPENDED) in led_set_brightness_nosleep()
342 led_set_brightness_nopm(led_cdev, led_cdev->brightness); in led_set_brightness_nosleep()
346 int led_set_brightness_sync(struct led_classdev *led_cdev, unsigned int value) in led_set_brightness_sync() argument
348 if (led_cdev->blink_delay_on || led_cdev->blink_delay_off) in led_set_brightness_sync()
351 led_cdev->brightness = min(value, led_cdev->max_brightness); in led_set_brightness_sync()
353 if (led_cdev->flags & LED_SUSPENDED) in led_set_brightness_sync()
356 return __led_set_brightness_blocking(led_cdev, led_cdev->brightness); in led_set_brightness_sync()
360 int led_update_brightness(struct led_classdev *led_cdev) in led_update_brightness() argument
364 if (led_cdev->brightness_get) { in led_update_brightness()
365 ret = led_cdev->brightness_get(led_cdev); in led_update_brightness()
367 led_cdev->brightness = ret; in led_update_brightness()
376 u32 *led_get_default_pattern(struct led_classdev *led_cdev, unsigned int *size) in led_get_default_pattern() argument
378 struct fwnode_handle *fwnode = led_cdev->dev->fwnode; in led_get_default_pattern()
402 void led_sysfs_disable(struct led_classdev *led_cdev) in led_sysfs_disable() argument
404 lockdep_assert_held(&led_cdev->led_access); in led_sysfs_disable()
406 led_cdev->flags |= LED_SYSFS_DISABLE; in led_sysfs_disable()
411 void led_sysfs_enable(struct led_classdev *led_cdev) in led_sysfs_enable() argument
413 lockdep_assert_held(&led_cdev->led_access); in led_sysfs_enable()
415 led_cdev->flags &= ~LED_SYSFS_DISABLE; in led_sysfs_enable()