Blame view
drivers/leds/led-core.c
3.17 KB
c72a1d608 [PATCH] LED: add ... |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
/* * LED Class Core * * Copyright 2005-2006 Openedhand Ltd. * * Author: Richard Purdie <rpurdie@openedhand.com> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * */ #include <linux/kernel.h> #include <linux/list.h> #include <linux/module.h> |
72f8da329 leds: Fix leds_li... |
17 |
#include <linux/rwsem.h> |
c72a1d608 [PATCH] LED: add ... |
18 19 |
#include <linux/leds.h> #include "leds.h" |
72f8da329 leds: Fix leds_li... |
20 |
DECLARE_RWSEM(leds_list_lock); |
4d404fd5c leds: Cleanup var... |
21 |
EXPORT_SYMBOL_GPL(leds_list_lock); |
c72a1d608 [PATCH] LED: add ... |
22 |
|
4d404fd5c leds: Cleanup var... |
23 |
LIST_HEAD(leds_list); |
c72a1d608 [PATCH] LED: add ... |
24 |
EXPORT_SYMBOL_GPL(leds_list); |
a403d930c led-class: change... |
25 |
|
a403d930c led-class: change... |
26 27 28 29 30 31 32 33 34 35 36 |
static void led_set_software_blink(struct led_classdev *led_cdev, unsigned long delay_on, unsigned long delay_off) { int current_brightness; current_brightness = led_get_brightness(led_cdev); if (current_brightness) led_cdev->blink_brightness = current_brightness; if (!led_cdev->blink_brightness) led_cdev->blink_brightness = led_cdev->max_brightness; |
a403d930c led-class: change... |
37 38 |
led_cdev->blink_delay_on = delay_on; led_cdev->blink_delay_off = delay_off; |
8d82fef8b leds: Turn off le... |
39 40 41 |
/* never on - just set to off */ if (!delay_on) { __led_set_brightness(led_cdev, LED_OFF); |
a403d930c led-class: change... |
42 |
return; |
8d82fef8b leds: Turn off le... |
43 |
} |
a403d930c led-class: change... |
44 45 46 |
/* never off - just set to brightness */ if (!delay_off) { |
0da3e65ba leds: Rename led_... |
47 |
__led_set_brightness(led_cdev, led_cdev->blink_brightness); |
a403d930c led-class: change... |
48 49 |
return; } |
9067359fa Revert "leds: con... |
50 |
mod_timer(&led_cdev->blink_timer, jiffies + 1); |
a403d930c led-class: change... |
51 |
} |
20c0e6b87 leds: fix sparse ... |
52 |
static void led_blink_setup(struct led_classdev *led_cdev, |
5bb629c50 leds: add oneshot... |
53 54 |
unsigned long *delay_on, unsigned long *delay_off) |
a403d930c led-class: change... |
55 |
{ |
5bb629c50 leds: add oneshot... |
56 57 |
if (!(led_cdev->flags & LED_BLINK_ONESHOT) && led_cdev->blink_set && |
a403d930c led-class: change... |
58 59 60 61 62 63 64 65 66 |
!led_cdev->blink_set(led_cdev, delay_on, delay_off)) return; /* blink with 1 Hz as default if nothing specified */ if (!*delay_on && !*delay_off) *delay_on = *delay_off = 500; led_set_software_blink(led_cdev, *delay_on, *delay_off); } |
5bb629c50 leds: add oneshot... |
67 68 69 70 71 |
void led_blink_set(struct led_classdev *led_cdev, unsigned long *delay_on, unsigned long *delay_off) { |
9067359fa Revert "leds: con... |
72 |
del_timer_sync(&led_cdev->blink_timer); |
5bb629c50 leds: add oneshot... |
73 74 75 76 77 78 |
led_cdev->flags &= ~LED_BLINK_ONESHOT; led_cdev->flags &= ~LED_BLINK_ONESHOT_STOP; led_blink_setup(led_cdev, delay_on, delay_off); } |
a403d930c led-class: change... |
79 |
EXPORT_SYMBOL(led_blink_set); |
5bb629c50 leds: add oneshot... |
80 81 82 83 84 85 |
void led_blink_set_oneshot(struct led_classdev *led_cdev, unsigned long *delay_on, unsigned long *delay_off, int invert) { if ((led_cdev->flags & LED_BLINK_ONESHOT) && |
9067359fa Revert "leds: con... |
86 |
timer_pending(&led_cdev->blink_timer)) |
5bb629c50 leds: add oneshot... |
87 88 89 90 91 92 93 94 95 96 97 98 99 |
return; led_cdev->flags |= LED_BLINK_ONESHOT; led_cdev->flags &= ~LED_BLINK_ONESHOT_STOP; if (invert) led_cdev->flags |= LED_BLINK_INVERT; else led_cdev->flags &= ~LED_BLINK_INVERT; led_blink_setup(led_cdev, delay_on, delay_off); } EXPORT_SYMBOL(led_blink_set_oneshot); |
d23a22a74 leds: delay led_s... |
100 |
void led_stop_software_blink(struct led_classdev *led_cdev) |
a403d930c led-class: change... |
101 |
{ |
9067359fa Revert "leds: con... |
102 |
del_timer_sync(&led_cdev->blink_timer); |
437864828 leds: fix led_bri... |
103 104 |
led_cdev->blink_delay_on = 0; led_cdev->blink_delay_off = 0; |
d23a22a74 leds: delay led_s... |
105 106 107 108 109 110 |
} EXPORT_SYMBOL_GPL(led_stop_software_blink); void led_set_brightness(struct led_classdev *led_cdev, enum led_brightness brightness) { |
9067359fa Revert "leds: con... |
111 |
/* delay brightness setting if need to stop soft-blink timer */ |
d23a22a74 leds: delay led_s... |
112 113 114 115 116 |
if (led_cdev->blink_delay_on || led_cdev->blink_delay_off) { led_cdev->delayed_set_value = brightness; schedule_work(&led_cdev->set_brightness_work); return; } |
437864828 leds: fix led_bri... |
117 |
|
0da3e65ba leds: Rename led_... |
118 |
__led_set_brightness(led_cdev, brightness); |
a403d930c led-class: change... |
119 |
} |
19cd67e2d leds: Rename led_... |
120 |
EXPORT_SYMBOL(led_set_brightness); |