aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpio
diff options
context:
space:
mode:
authorGeert Uytterhoeven <geert+renesas@glider.be>2016-03-11 11:31:27 -0500
committerLinus Walleij <linus.walleij@linaro.org>2016-03-16 08:03:14 -0400
commite0a8604f1300cefab4aeafe214fc57954a7b4487 (patch)
treea05f0d32f515ebcd9ba1fd00d498d0123707f805 /drivers/gpio
parente5f7e3121429c7b1ce6d759150b5bf936ddd2080 (diff)
gpio: pca953x: Fix pca953x_gpio_set_multiple() on 64-bit
pca953x_gpio_set_multiple() divides by 4 to convert from longs to bytes, which assumes a 32-bit platform, and is not correct on 64-bit platforms. Use "sizeof(...)" instead to fix this. Cc: stable@vger.kernel.org Fixes: b4818afeacbd8182 ("gpio: pca953x: Add set_multiple to allow multiple bits to be set in one write.") Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> Acked-by: Phil Reid <preid@electromag.com.au> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'drivers/gpio')
-rw-r--r--drivers/gpio/gpio-pca953x.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c
index b7fe5d5e3488..d0d3065a7557 100644
--- a/drivers/gpio/gpio-pca953x.c
+++ b/drivers/gpio/gpio-pca953x.c
@@ -367,9 +367,11 @@ static void pca953x_gpio_set_multiple(struct gpio_chip *gc,
367 memcpy(reg_val, chip->reg_output, NBANK(chip)); 367 memcpy(reg_val, chip->reg_output, NBANK(chip));
368 mutex_lock(&chip->i2c_lock); 368 mutex_lock(&chip->i2c_lock);
369 for(bank=0; bank<NBANK(chip); bank++) { 369 for(bank=0; bank<NBANK(chip); bank++) {
370 unsigned bankmask = mask[bank/4] >> ((bank % 4) * 8); 370 unsigned bankmask = mask[bank / sizeof(*mask)] >>
371 ((bank % sizeof(*mask)) * 8);
371 if(bankmask) { 372 if(bankmask) {
372 unsigned bankval = bits[bank/4] >> ((bank % 4) * 8); 373 unsigned bankval = bits[bank / sizeof(*bits)] >>
374 ((bank % sizeof(*bits)) * 8);
373 reg_val[bank] = (reg_val[bank] & ~bankmask) | bankval; 375 reg_val[bank] = (reg_val[bank] & ~bankmask) | bankval;
374 } 376 }
375 } 377 }