mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 19:51:31 -04:00
LED fixes for 4.20-rc2
-----BEGIN PGP SIGNATURE-----
iJEEABYIADkWIQQUwxxKyE5l/npt8ARiEGxRG/Sl2wUCW+SJrBscamFjZWsuYW5h
c3pld3NraUBnbWFpbC5jb20ACgkQYhBsURv0pdtTfAEAg9TNQi+IAth1TuEfbsrO
ykB2PDEPD0wZnWh/sEIYhdAA/3zhYeqPq4X9PLhtRZQ2fJFE2Uw/4BTmSAqffD+L
2ZwG
=MA3z
-----END PGP SIGNATURE-----
Merge tag 'led-fixes-for-4.20-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/j.anaszewski/linux-leds
Pull LED fixes from Jacek Anaszewski:
"All three fixes are related to the newly added pattern trigger:
- remove mutex_lock() from timer callback, which would trigger
problems related to sleeping in atomic context, the removal is
harmless since mutex protection turned out to be redundant in this
case
- fix pattern parsing to properly handle intervals with brightness == 0
- fix typos in the ABI documentation"
* tag 'led-fixes-for-4.20-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/j.anaszewski/linux-leds:
Documentation: ABI: led-trigger-pattern: Fix typos
leds: trigger: Fix sleeping function called from invalid context
Fix pattern handling optimalization
This commit is contained in:
commit
6a1ac56c23
2 changed files with 10 additions and 21 deletions
|
|
@ -75,8 +75,6 @@ static void pattern_trig_timer_function(struct timer_list *t)
|
|||
{
|
||||
struct pattern_trig_data *data = from_timer(data, t, timer);
|
||||
|
||||
mutex_lock(&data->lock);
|
||||
|
||||
for (;;) {
|
||||
if (!data->is_indefinite && !data->repeat)
|
||||
break;
|
||||
|
|
@ -87,9 +85,10 @@ static void pattern_trig_timer_function(struct timer_list *t)
|
|||
data->curr->brightness);
|
||||
mod_timer(&data->timer,
|
||||
jiffies + msecs_to_jiffies(data->curr->delta_t));
|
||||
|
||||
/* Skip the tuple with zero duration */
|
||||
pattern_trig_update_patterns(data);
|
||||
if (!data->next->delta_t) {
|
||||
/* Skip the tuple with zero duration */
|
||||
pattern_trig_update_patterns(data);
|
||||
}
|
||||
/* Select next tuple */
|
||||
pattern_trig_update_patterns(data);
|
||||
} else {
|
||||
|
|
@ -116,8 +115,6 @@ static void pattern_trig_timer_function(struct timer_list *t)
|
|||
|
||||
break;
|
||||
}
|
||||
|
||||
mutex_unlock(&data->lock);
|
||||
}
|
||||
|
||||
static int pattern_trig_start_pattern(struct led_classdev *led_cdev)
|
||||
|
|
@ -176,14 +173,10 @@ static ssize_t repeat_store(struct device *dev, struct device_attribute *attr,
|
|||
if (res < -1 || res == 0)
|
||||
return -EINVAL;
|
||||
|
||||
/*
|
||||
* Clear previous patterns' performence firstly, and remove the timer
|
||||
* without mutex lock to avoid dead lock.
|
||||
*/
|
||||
del_timer_sync(&data->timer);
|
||||
|
||||
mutex_lock(&data->lock);
|
||||
|
||||
del_timer_sync(&data->timer);
|
||||
|
||||
if (data->is_hw_pattern)
|
||||
led_cdev->pattern_clear(led_cdev);
|
||||
|
||||
|
|
@ -234,14 +227,10 @@ static ssize_t pattern_trig_store_patterns(struct led_classdev *led_cdev,
|
|||
struct pattern_trig_data *data = led_cdev->trigger_data;
|
||||
int ccount, cr, offset = 0, err = 0;
|
||||
|
||||
/*
|
||||
* Clear previous patterns' performence firstly, and remove the timer
|
||||
* without mutex lock to avoid dead lock.
|
||||
*/
|
||||
del_timer_sync(&data->timer);
|
||||
|
||||
mutex_lock(&data->lock);
|
||||
|
||||
del_timer_sync(&data->timer);
|
||||
|
||||
if (data->is_hw_pattern)
|
||||
led_cdev->pattern_clear(led_cdev);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue