diff options
author | Phil Reid <preid@electromag.com.au> | 2016-11-08 13:18:11 +0800 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2016-11-26 09:56:59 +0100 |
commit | 88fce76cf59055ddf97667001dbd26577b8760e0 (patch) | |
tree | 24a58a7f2390d0791c1e1a2df61cb8162606dee4 | |
parent | 9a7b808949518e702eddddbd97c9948e4e6b7de9 (diff) |
gpio: pca953x: Move memcpy into mutex lock for set multiple
commit 386377b5473043c09b2de40bfe5abfb0fc87e1b4 upstream.
Need to ensure that reg_output is not updated while setting multiple
bits. This makes the mutex locking behaviour for the set_multiple call
consistent with that of the set_value call.
Fixes: b4818afeacbd ("gpio: pca953x: Add set_multiple to allow multiple")
Signed-off-by: Phil Reid <preid@electromag.com.au>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/gpio/gpio-pca953x.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c index 02f2a5621bb0..5fae629c241e 100644 --- a/drivers/gpio/gpio-pca953x.c +++ b/drivers/gpio/gpio-pca953x.c @@ -372,8 +372,8 @@ static void pca953x_gpio_set_multiple(struct gpio_chip *gc, break; } - memcpy(reg_val, chip->reg_output, NBANK(chip)); mutex_lock(&chip->i2c_lock); + memcpy(reg_val, chip->reg_output, NBANK(chip)); for(bank=0; bank<NBANK(chip); bank++) { unsigned bankmask = mask[bank / sizeof(*mask)] >> ((bank % sizeof(*mask)) * 8); |