diff options
| -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 | } |
