4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Phil Reid <[email protected]>

commit 53f8d322234649b4d6f1515b20c127a577efd164 upstream.

gpiod_set_array_value_complex does not clear the bits field.
Therefore when the drivers set_multiple funciton is called bits outside
the mask are undefined and can be either set or not. So bank_val needs
to be masked with bank_mask before or with the reg_val cache.

Fixes: b4818afeacbd ("gpio: pca953x: Add set_multiple to allow multiple")
Signed-off-by: Phil Reid <[email protected]>
Signed-off-by: Linus Walleij <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>

---
 drivers/gpio/gpio-pca953x.c |    1 +
 1 file changed, 1 insertion(+)

--- a/drivers/gpio/gpio-pca953x.c
+++ b/drivers/gpio/gpio-pca953x.c
@@ -380,6 +380,7 @@ static void pca953x_gpio_set_multiple(st
                if(bankmask) {
                        unsigned bankval  = bits[bank / sizeof(*bits)] >>
                                            ((bank % sizeof(*bits)) * 8);
+                       bankval &= bankmask;
                        reg_val[bank] = (reg_val[bank] & ~bankmask) | bankval;
                }
        }


Reply via email to