diff options
Diffstat (limited to 'drivers/gpio/gpio-pca953x.c')
-rw-r--r-- | drivers/gpio/gpio-pca953x.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c index e422568e14ad..fe731f094257 100644 --- a/drivers/gpio/gpio-pca953x.c +++ b/drivers/gpio/gpio-pca953x.c | |||
@@ -372,14 +372,15 @@ static void pca953x_gpio_set_multiple(struct gpio_chip *gc, | |||
372 | 372 | ||
373 | bank_shift = fls((chip->gpio_chip.ngpio - 1) / BANK_SZ); | 373 | bank_shift = fls((chip->gpio_chip.ngpio - 1) / BANK_SZ); |
374 | 374 | ||
375 | memcpy(reg_val, chip->reg_output, NBANK(chip)); | ||
376 | mutex_lock(&chip->i2c_lock); | 375 | mutex_lock(&chip->i2c_lock); |
376 | memcpy(reg_val, chip->reg_output, NBANK(chip)); | ||
377 | for (bank = 0; bank < NBANK(chip); bank++) { | 377 | for (bank = 0; bank < NBANK(chip); bank++) { |
378 | bank_mask = mask[bank / sizeof(*mask)] >> | 378 | bank_mask = mask[bank / sizeof(*mask)] >> |
379 | ((bank % sizeof(*mask)) * 8); | 379 | ((bank % sizeof(*mask)) * 8); |
380 | if (bank_mask) { | 380 | if (bank_mask) { |
381 | bank_val = bits[bank / sizeof(*bits)] >> | 381 | bank_val = bits[bank / sizeof(*bits)] >> |
382 | ((bank % sizeof(*bits)) * 8); | 382 | ((bank % sizeof(*bits)) * 8); |
383 | bank_val &= bank_mask; | ||
383 | reg_val[bank] = (reg_val[bank] & ~bank_mask) | bank_val; | 384 | reg_val[bank] = (reg_val[bank] & ~bank_mask) | bank_val; |
384 | } | 385 | } |
385 | } | 386 | } |
@@ -607,7 +608,6 @@ static int pca953x_irq_setup(struct pca953x_chip *chip, | |||
607 | 608 | ||
608 | if (client->irq && irq_base != -1 | 609 | if (client->irq && irq_base != -1 |
609 | && (chip->driver_data & PCA_INT)) { | 610 | && (chip->driver_data & PCA_INT)) { |
610 | |||
611 | ret = pca953x_read_regs(chip, | 611 | ret = pca953x_read_regs(chip, |
612 | chip->regs->input, chip->irq_stat); | 612 | chip->regs->input, chip->irq_stat); |
613 | if (ret) | 613 | if (ret) |