Commit c3afa804 authored by Paul Thomas's avatar Paul Thomas Committed by Linus Walleij

gpio: xilinx: Fix bug where the wrong GPIO register is written to

Care is taken with "index", however with the current version
the actual xgpio_writereg is using index for data but
xgpio_regoffset(chip, i) for the offset. And since i is already
incremented it is incorrect. This patch fixes it so that index
is used for the offset too.

Cc: stable@vger.kernel.org
Signed-off-by: default avatarPaul Thomas <pthomas8589@gmail.com>
Link: https://lore.kernel.org/r/20200125221410.8022-1-pthomas8589@gmail.comSigned-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent dee7c111
...@@ -147,9 +147,10 @@ static void xgpio_set_multiple(struct gpio_chip *gc, unsigned long *mask, ...@@ -147,9 +147,10 @@ static void xgpio_set_multiple(struct gpio_chip *gc, unsigned long *mask,
for (i = 0; i < gc->ngpio; i++) { for (i = 0; i < gc->ngpio; i++) {
if (*mask == 0) if (*mask == 0)
break; break;
/* Once finished with an index write it out to the register */
if (index != xgpio_index(chip, i)) { if (index != xgpio_index(chip, i)) {
xgpio_writereg(chip->regs + XGPIO_DATA_OFFSET + xgpio_writereg(chip->regs + XGPIO_DATA_OFFSET +
xgpio_regoffset(chip, i), index * XGPIO_CHANNEL_OFFSET,
chip->gpio_state[index]); chip->gpio_state[index]);
spin_unlock_irqrestore(&chip->gpio_lock[index], flags); spin_unlock_irqrestore(&chip->gpio_lock[index], flags);
index = xgpio_index(chip, i); index = xgpio_index(chip, i);
...@@ -165,7 +166,7 @@ static void xgpio_set_multiple(struct gpio_chip *gc, unsigned long *mask, ...@@ -165,7 +166,7 @@ static void xgpio_set_multiple(struct gpio_chip *gc, unsigned long *mask,
} }
xgpio_writereg(chip->regs + XGPIO_DATA_OFFSET + xgpio_writereg(chip->regs + XGPIO_DATA_OFFSET +
xgpio_regoffset(chip, i), chip->gpio_state[index]); index * XGPIO_CHANNEL_OFFSET, chip->gpio_state[index]);
spin_unlock_irqrestore(&chip->gpio_lock[index], flags); spin_unlock_irqrestore(&chip->gpio_lock[index], flags);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment