diff options
author | Jacek Anaszewski <j.anaszewski@samsung.com> | 2016-11-09 05:43:46 -0500 |
---|---|---|
committer | Jacek Anaszewski <jacek.anaszewski@gmail.com> | 2017-02-14 16:20:24 -0500 |
commit | fb3d769173d26268d7bf068094a599bb28b2ac63 (patch) | |
tree | 66b61652d729fd810362716297ff2eca3eab1e91 | |
parent | ae3473231e77a3f1909d48cd144cebe5e1d049b3 (diff) |
leds: ledtrig-heartbeat: Make top brightness adjustable
LED class heartbeat trigger allowed only for blinking with max_brightness
value. This patch adds more flexibility by exploiting part of LED core
software blink infrastructure.
Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
Acked-by: Pavel Machek <pavel@ucw.cz>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
-rw-r--r-- | drivers/leds/trigger/ledtrig-heartbeat.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/drivers/leds/trigger/ledtrig-heartbeat.c b/drivers/leds/trigger/ledtrig-heartbeat.c index c9f386213e9e..e6f2f8b9f09a 100644 --- a/drivers/leds/trigger/ledtrig-heartbeat.c +++ b/drivers/leds/trigger/ledtrig-heartbeat.c | |||
@@ -43,6 +43,9 @@ static void led_heartbeat_function(unsigned long data) | |||
43 | return; | 43 | return; |
44 | } | 44 | } |
45 | 45 | ||
46 | if (test_and_clear_bit(LED_BLINK_BRIGHTNESS_CHANGE, &led_cdev->work_flags)) | ||
47 | led_cdev->blink_brightness = led_cdev->new_blink_brightness; | ||
48 | |||
46 | /* acts like an actual heart beat -- ie thump-thump-pause... */ | 49 | /* acts like an actual heart beat -- ie thump-thump-pause... */ |
47 | switch (heartbeat_data->phase) { | 50 | switch (heartbeat_data->phase) { |
48 | case 0: | 51 | case 0: |
@@ -59,26 +62,26 @@ static void led_heartbeat_function(unsigned long data) | |||
59 | delay = msecs_to_jiffies(70); | 62 | delay = msecs_to_jiffies(70); |
60 | heartbeat_data->phase++; | 63 | heartbeat_data->phase++; |
61 | if (!heartbeat_data->invert) | 64 | if (!heartbeat_data->invert) |
62 | brightness = led_cdev->max_brightness; | 65 | brightness = led_cdev->blink_brightness; |
63 | break; | 66 | break; |
64 | case 1: | 67 | case 1: |
65 | delay = heartbeat_data->period / 4 - msecs_to_jiffies(70); | 68 | delay = heartbeat_data->period / 4 - msecs_to_jiffies(70); |
66 | heartbeat_data->phase++; | 69 | heartbeat_data->phase++; |
67 | if (heartbeat_data->invert) | 70 | if (heartbeat_data->invert) |
68 | brightness = led_cdev->max_brightness; | 71 | brightness = led_cdev->blink_brightness; |
69 | break; | 72 | break; |
70 | case 2: | 73 | case 2: |
71 | delay = msecs_to_jiffies(70); | 74 | delay = msecs_to_jiffies(70); |
72 | heartbeat_data->phase++; | 75 | heartbeat_data->phase++; |
73 | if (!heartbeat_data->invert) | 76 | if (!heartbeat_data->invert) |
74 | brightness = led_cdev->max_brightness; | 77 | brightness = led_cdev->blink_brightness; |
75 | break; | 78 | break; |
76 | default: | 79 | default: |
77 | delay = heartbeat_data->period - heartbeat_data->period / 4 - | 80 | delay = heartbeat_data->period - heartbeat_data->period / 4 - |
78 | msecs_to_jiffies(70); | 81 | msecs_to_jiffies(70); |
79 | heartbeat_data->phase = 0; | 82 | heartbeat_data->phase = 0; |
80 | if (heartbeat_data->invert) | 83 | if (heartbeat_data->invert) |
81 | brightness = led_cdev->max_brightness; | 84 | brightness = led_cdev->blink_brightness; |
82 | break; | 85 | break; |
83 | } | 86 | } |
84 | 87 | ||
@@ -133,7 +136,10 @@ static void heartbeat_trig_activate(struct led_classdev *led_cdev) | |||
133 | setup_timer(&heartbeat_data->timer, | 136 | setup_timer(&heartbeat_data->timer, |
134 | led_heartbeat_function, (unsigned long) led_cdev); | 137 | led_heartbeat_function, (unsigned long) led_cdev); |
135 | heartbeat_data->phase = 0; | 138 | heartbeat_data->phase = 0; |
139 | if (!led_cdev->blink_brightness) | ||
140 | led_cdev->blink_brightness = led_cdev->max_brightness; | ||
136 | led_heartbeat_function(heartbeat_data->timer.data); | 141 | led_heartbeat_function(heartbeat_data->timer.data); |
142 | set_bit(LED_BLINK_SW, &led_cdev->work_flags); | ||
137 | led_cdev->activated = true; | 143 | led_cdev->activated = true; |
138 | } | 144 | } |
139 | 145 | ||
@@ -145,6 +151,7 @@ static void heartbeat_trig_deactivate(struct led_classdev *led_cdev) | |||
145 | del_timer_sync(&heartbeat_data->timer); | 151 | del_timer_sync(&heartbeat_data->timer); |
146 | device_remove_file(led_cdev->dev, &dev_attr_invert); | 152 | device_remove_file(led_cdev->dev, &dev_attr_invert); |
147 | kfree(heartbeat_data); | 153 | kfree(heartbeat_data); |
154 | clear_bit(LED_BLINK_SW, &led_cdev->work_flags); | ||
148 | led_cdev->activated = false; | 155 | led_cdev->activated = false; |
149 | } | 156 | } |
150 | } | 157 | } |