mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-01 10:42:11 +00:00
leds: lp5521/5523: Remove duplicate mutex
It can be a problem when a pattern is loaded via the firmware interface. LP55xx common driver has already locked the mutex in 'lp55xx_firmware_loaded()'. So it should be deleted. On the other hand, locks are required in store_engine_load() on updating program memory. Reported-by: Pali Rohár <pali.rohar@gmail.com> Reported-by: Pavel Machek <pavel@ucw.cz> Signed-off-by: Milo Kim <milo.kim@ti.com> Signed-off-by: Bryan Wu <cooloney@gmail.com> Cc: <stable@vger.kernel.org>
This commit is contained in:
parent
802eee95bd
commit
e70988d1aa
@ -244,18 +244,12 @@ static int lp5521_update_program_memory(struct lp55xx_chip *chip,
|
||||
if (i % 2)
|
||||
goto err;
|
||||
|
||||
mutex_lock(&chip->lock);
|
||||
|
||||
for (i = 0; i < LP5521_PROGRAM_LENGTH; i++) {
|
||||
ret = lp55xx_write(chip, addr[idx] + i, pattern[i]);
|
||||
if (ret) {
|
||||
mutex_unlock(&chip->lock);
|
||||
if (ret)
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
mutex_unlock(&chip->lock);
|
||||
|
||||
return size;
|
||||
|
||||
err:
|
||||
@ -427,15 +421,17 @@ static ssize_t store_engine_load(struct device *dev,
|
||||
{
|
||||
struct lp55xx_led *led = i2c_get_clientdata(to_i2c_client(dev));
|
||||
struct lp55xx_chip *chip = led->chip;
|
||||
int ret;
|
||||
|
||||
mutex_lock(&chip->lock);
|
||||
|
||||
chip->engine_idx = nr;
|
||||
lp5521_load_engine(chip);
|
||||
ret = lp5521_update_program_memory(chip, buf, len);
|
||||
|
||||
mutex_unlock(&chip->lock);
|
||||
|
||||
return lp5521_update_program_memory(chip, buf, len);
|
||||
return ret;
|
||||
}
|
||||
store_load(1)
|
||||
store_load(2)
|
||||
|
@ -337,18 +337,12 @@ static int lp5523_update_program_memory(struct lp55xx_chip *chip,
|
||||
if (i % 2)
|
||||
goto err;
|
||||
|
||||
mutex_lock(&chip->lock);
|
||||
|
||||
for (i = 0; i < LP5523_PROGRAM_LENGTH; i++) {
|
||||
ret = lp55xx_write(chip, LP5523_REG_PROG_MEM + i, pattern[i]);
|
||||
if (ret) {
|
||||
mutex_unlock(&chip->lock);
|
||||
if (ret)
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
mutex_unlock(&chip->lock);
|
||||
|
||||
return size;
|
||||
|
||||
err:
|
||||
@ -548,15 +542,17 @@ static ssize_t store_engine_load(struct device *dev,
|
||||
{
|
||||
struct lp55xx_led *led = i2c_get_clientdata(to_i2c_client(dev));
|
||||
struct lp55xx_chip *chip = led->chip;
|
||||
int ret;
|
||||
|
||||
mutex_lock(&chip->lock);
|
||||
|
||||
chip->engine_idx = nr;
|
||||
lp5523_load_engine_and_select_page(chip);
|
||||
ret = lp5523_update_program_memory(chip, buf, len);
|
||||
|
||||
mutex_unlock(&chip->lock);
|
||||
|
||||
return lp5523_update_program_memory(chip, buf, len);
|
||||
return ret;
|
||||
}
|
||||
store_load(1)
|
||||
store_load(2)
|
||||
|
Loading…
Reference in New Issue
Block a user