Lines Matching refs:led_cdev

47 static int __led_set_brightness(struct led_classdev *led_cdev, unsigned int value)  in __led_set_brightness()  argument
49 if (!led_cdev->brightness_set) in __led_set_brightness()
52 led_cdev->brightness_set(led_cdev, value); in __led_set_brightness()
57 static int __led_set_brightness_blocking(struct led_classdev *led_cdev, unsigned int value) in __led_set_brightness_blocking() argument
59 if (!led_cdev->brightness_set_blocking) in __led_set_brightness_blocking()
62 return led_cdev->brightness_set_blocking(led_cdev, value); in __led_set_brightness_blocking()
67 struct led_classdev *led_cdev = timer_container_of(led_cdev, t, in led_timer_function() local
72 if (!led_cdev->blink_delay_on || !led_cdev->blink_delay_off) { in led_timer_function()
73 led_set_brightness_nosleep(led_cdev, LED_OFF); in led_timer_function()
74 clear_bit(LED_BLINK_SW, &led_cdev->work_flags); in led_timer_function()
79 &led_cdev->work_flags)) { in led_timer_function()
80 clear_bit(LED_BLINK_SW, &led_cdev->work_flags); in led_timer_function()
84 brightness = led_get_brightness(led_cdev); in led_timer_function()
88 &led_cdev->work_flags)) in led_timer_function()
89 brightness = led_cdev->new_blink_brightness; in led_timer_function()
91 brightness = led_cdev->blink_brightness; in led_timer_function()
92 delay = led_cdev->blink_delay_on; in led_timer_function()
97 led_cdev->blink_brightness = brightness; in led_timer_function()
99 delay = led_cdev->blink_delay_off; in led_timer_function()
102 led_set_brightness_nosleep(led_cdev, brightness); in led_timer_function()
108 if (test_bit(LED_BLINK_ONESHOT, &led_cdev->work_flags)) { in led_timer_function()
109 if (test_bit(LED_BLINK_INVERT, &led_cdev->work_flags)) { in led_timer_function()
112 &led_cdev->work_flags); in led_timer_function()
116 &led_cdev->work_flags); in led_timer_function()
120 mod_timer(&led_cdev->blink_timer, jiffies + msecs_to_jiffies(delay)); in led_timer_function()
123 static void set_brightness_delayed_set_brightness(struct led_classdev *led_cdev, in set_brightness_delayed_set_brightness() argument
128 ret = __led_set_brightness(led_cdev, value); in set_brightness_delayed_set_brightness()
130 ret = __led_set_brightness_blocking(led_cdev, value); in set_brightness_delayed_set_brightness()
137 if (ret == -ENODEV && led_cdev->flags & LED_UNREGISTERING && in set_brightness_delayed_set_brightness()
138 led_cdev->flags & LED_HW_PLUGGABLE) in set_brightness_delayed_set_brightness()
142 dev_err(led_cdev->dev, in set_brightness_delayed_set_brightness()
148 struct led_classdev *led_cdev = in set_brightness_delayed() local
151 if (test_and_clear_bit(LED_BLINK_DISABLE, &led_cdev->work_flags)) { in set_brightness_delayed()
152 led_stop_software_blink(led_cdev); in set_brightness_delayed()
153 set_bit(LED_SET_BRIGHTNESS_OFF, &led_cdev->work_flags); in set_brightness_delayed()
163 if (test_and_clear_bit(LED_SET_BRIGHTNESS_OFF, &led_cdev->work_flags)) { in set_brightness_delayed()
164 set_brightness_delayed_set_brightness(led_cdev, LED_OFF); in set_brightness_delayed()
173 if (led_cdev->delayed_set_value != LED_OFF) in set_brightness_delayed()
174 set_bit(LED_SET_BRIGHTNESS, &led_cdev->work_flags); in set_brightness_delayed()
177 if (test_and_clear_bit(LED_SET_BRIGHTNESS, &led_cdev->work_flags)) in set_brightness_delayed()
178 set_brightness_delayed_set_brightness(led_cdev, led_cdev->delayed_set_value); in set_brightness_delayed()
180 if (test_and_clear_bit(LED_SET_BLINK, &led_cdev->work_flags)) { in set_brightness_delayed()
181 unsigned long delay_on = led_cdev->delayed_delay_on; in set_brightness_delayed()
182 unsigned long delay_off = led_cdev->delayed_delay_off; in set_brightness_delayed()
184 led_blink_set(led_cdev, &delay_on, &delay_off); in set_brightness_delayed()
188 static void led_set_software_blink(struct led_classdev *led_cdev, in led_set_software_blink() argument
194 current_brightness = led_get_brightness(led_cdev); in led_set_software_blink()
196 led_cdev->blink_brightness = current_brightness; in led_set_software_blink()
197 if (!led_cdev->blink_brightness) in led_set_software_blink()
198 led_cdev->blink_brightness = led_cdev->max_brightness; in led_set_software_blink()
200 led_cdev->blink_delay_on = delay_on; in led_set_software_blink()
201 led_cdev->blink_delay_off = delay_off; in led_set_software_blink()
205 led_set_brightness_nosleep(led_cdev, LED_OFF); in led_set_software_blink()
211 led_set_brightness_nosleep(led_cdev, in led_set_software_blink()
212 led_cdev->blink_brightness); in led_set_software_blink()
216 set_bit(LED_BLINK_SW, &led_cdev->work_flags); in led_set_software_blink()
217 mod_timer(&led_cdev->blink_timer, jiffies + 1); in led_set_software_blink()
221 static void led_blink_setup(struct led_classdev *led_cdev, in led_blink_setup() argument
225 if (!test_bit(LED_BLINK_ONESHOT, &led_cdev->work_flags) && in led_blink_setup()
226 led_cdev->blink_set && in led_blink_setup()
227 !led_cdev->blink_set(led_cdev, delay_on, delay_off)) in led_blink_setup()
234 led_set_software_blink(led_cdev, *delay_on, *delay_off); in led_blink_setup()
237 void led_init_core(struct led_classdev *led_cdev) in led_init_core() argument
239 INIT_WORK(&led_cdev->set_brightness_work, set_brightness_delayed); in led_init_core()
241 timer_setup(&led_cdev->blink_timer, led_timer_function, 0); in led_init_core()
245 void led_blink_set(struct led_classdev *led_cdev, in led_blink_set() argument
249 timer_delete_sync(&led_cdev->blink_timer); in led_blink_set()
251 clear_bit(LED_BLINK_SW, &led_cdev->work_flags); in led_blink_set()
252 clear_bit(LED_BLINK_ONESHOT, &led_cdev->work_flags); in led_blink_set()
253 clear_bit(LED_BLINK_ONESHOT_STOP, &led_cdev->work_flags); in led_blink_set()
255 led_blink_setup(led_cdev, delay_on, delay_off); in led_blink_set()
259 void led_blink_set_oneshot(struct led_classdev *led_cdev, in led_blink_set_oneshot() argument
264 if (test_bit(LED_BLINK_ONESHOT, &led_cdev->work_flags) && in led_blink_set_oneshot()
265 timer_pending(&led_cdev->blink_timer)) in led_blink_set_oneshot()
268 set_bit(LED_BLINK_ONESHOT, &led_cdev->work_flags); in led_blink_set_oneshot()
269 clear_bit(LED_BLINK_ONESHOT_STOP, &led_cdev->work_flags); in led_blink_set_oneshot()
272 set_bit(LED_BLINK_INVERT, &led_cdev->work_flags); in led_blink_set_oneshot()
274 clear_bit(LED_BLINK_INVERT, &led_cdev->work_flags); in led_blink_set_oneshot()
276 led_blink_setup(led_cdev, delay_on, delay_off); in led_blink_set_oneshot()
280 void led_blink_set_nosleep(struct led_classdev *led_cdev, unsigned long delay_on, in led_blink_set_nosleep() argument
284 if (led_cdev->blink_set && led_cdev->brightness_set_blocking) { in led_blink_set_nosleep()
285 led_cdev->delayed_delay_on = delay_on; in led_blink_set_nosleep()
286 led_cdev->delayed_delay_off = delay_off; in led_blink_set_nosleep()
287 set_bit(LED_SET_BLINK, &led_cdev->work_flags); in led_blink_set_nosleep()
288 queue_work(led_cdev->wq, &led_cdev->set_brightness_work); in led_blink_set_nosleep()
292 led_blink_set(led_cdev, &delay_on, &delay_off); in led_blink_set_nosleep()
296 void led_stop_software_blink(struct led_classdev *led_cdev) in led_stop_software_blink() argument
298 timer_delete_sync(&led_cdev->blink_timer); in led_stop_software_blink()
299 led_cdev->blink_delay_on = 0; in led_stop_software_blink()
300 led_cdev->blink_delay_off = 0; in led_stop_software_blink()
301 clear_bit(LED_BLINK_SW, &led_cdev->work_flags); in led_stop_software_blink()
305 void led_set_brightness(struct led_classdev *led_cdev, unsigned int brightness) in led_set_brightness() argument
311 if (test_bit(LED_BLINK_SW, &led_cdev->work_flags)) { in led_set_brightness()
318 set_bit(LED_BLINK_DISABLE, &led_cdev->work_flags); in led_set_brightness()
319 queue_work(led_cdev->wq, &led_cdev->set_brightness_work); in led_set_brightness()
322 &led_cdev->work_flags); in led_set_brightness()
323 led_cdev->new_blink_brightness = brightness; in led_set_brightness()
328 led_set_brightness_nosleep(led_cdev, brightness); in led_set_brightness()
332 void led_set_brightness_nopm(struct led_classdev *led_cdev, unsigned int value) in led_set_brightness_nopm() argument
335 if (!__led_set_brightness(led_cdev, value)) in led_set_brightness_nopm()
346 led_cdev->delayed_set_value = value; in led_set_brightness_nopm()
351 set_bit(LED_SET_BRIGHTNESS, &led_cdev->work_flags); in led_set_brightness_nopm()
353 clear_bit(LED_SET_BRIGHTNESS, &led_cdev->work_flags); in led_set_brightness_nopm()
354 clear_bit(LED_SET_BLINK, &led_cdev->work_flags); in led_set_brightness_nopm()
355 set_bit(LED_SET_BRIGHTNESS_OFF, &led_cdev->work_flags); in led_set_brightness_nopm()
358 queue_work(led_cdev->wq, &led_cdev->set_brightness_work); in led_set_brightness_nopm()
362 void led_set_brightness_nosleep(struct led_classdev *led_cdev, unsigned int value) in led_set_brightness_nosleep() argument
364 led_cdev->brightness = min(value, led_cdev->max_brightness); in led_set_brightness_nosleep()
366 if (led_cdev->flags & LED_SUSPENDED) in led_set_brightness_nosleep()
369 led_set_brightness_nopm(led_cdev, led_cdev->brightness); in led_set_brightness_nosleep()
373 int led_set_brightness_sync(struct led_classdev *led_cdev, unsigned int value) in led_set_brightness_sync() argument
375 if (led_cdev->blink_delay_on || led_cdev->blink_delay_off) in led_set_brightness_sync()
378 led_cdev->brightness = min(value, led_cdev->max_brightness); in led_set_brightness_sync()
380 if (led_cdev->flags & LED_SUSPENDED) in led_set_brightness_sync()
383 return __led_set_brightness_blocking(led_cdev, led_cdev->brightness); in led_set_brightness_sync()
391 void led_mc_set_brightness(struct led_classdev *led_cdev, in led_mc_set_brightness() argument
398 if (!(led_cdev->flags & LED_MULTI_COLOR)) { in led_mc_set_brightness()
399 dev_err_once(led_cdev->dev, "error not a multi-color LED\n"); in led_mc_set_brightness()
403 mcled_cdev = lcdev_to_mccdev(led_cdev); in led_mc_set_brightness()
405 dev_err_once(led_cdev->dev, "error num_colors mismatch %u != %u\n", in led_mc_set_brightness()
413 led_set_brightness(led_cdev, brightness); in led_mc_set_brightness()
417 int led_update_brightness(struct led_classdev *led_cdev) in led_update_brightness() argument
421 if (led_cdev->brightness_get) { in led_update_brightness()
422 ret = led_cdev->brightness_get(led_cdev); in led_update_brightness()
426 led_cdev->brightness = ret; in led_update_brightness()
433 u32 *led_get_default_pattern(struct led_classdev *led_cdev, unsigned int *size) in led_get_default_pattern() argument
435 struct fwnode_handle *fwnode = led_cdev->dev->fwnode; in led_get_default_pattern()
459 void led_sysfs_disable(struct led_classdev *led_cdev) in led_sysfs_disable() argument
461 lockdep_assert_held(&led_cdev->led_access); in led_sysfs_disable()
463 led_cdev->flags |= LED_SYSFS_DISABLE; in led_sysfs_disable()
468 void led_sysfs_enable(struct led_classdev *led_cdev) in led_sysfs_enable() argument
470 lockdep_assert_held(&led_cdev->led_access); in led_sysfs_enable()
472 led_cdev->flags &= ~LED_SYSFS_DISABLE; in led_sysfs_enable()