diff options
author | Jan Kiszka <jan.kiszka@siemens.com> | 2017-06-09 14:33:13 -0400 |
---|---|---|
committer | Linus Walleij <linus.walleij@linaro.org> | 2017-06-20 04:16:23 -0400 |
commit | 7f45a875da46a112f781c25cfa9bcb93aaed4712 (patch) | |
tree | e6d845a32b18bbdb3b74ff6e9c8d102f2a75354f | |
parent | 5dab5872e59390aa9cca26ee629b95f7179f6c77 (diff) |
gpio: exar: Fix reading of directions and values
First, the logic for translating a register bit to the return code of
exar_get_direction and exar_get_value were wrong. And second, there was
a flip regarding the register bank in exar_get_direction.
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
-rw-r--r-- | drivers/gpio/gpio-exar.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/gpio/gpio-exar.c b/drivers/gpio/gpio-exar.c index c5f5182d6cf0..4b46273ca545 100644 --- a/drivers/gpio/gpio-exar.c +++ b/drivers/gpio/gpio-exar.c | |||
@@ -68,7 +68,7 @@ static int exar_get(struct gpio_chip *chip, unsigned int reg) | |||
68 | value = readb(exar_gpio->regs + reg); | 68 | value = readb(exar_gpio->regs + reg); |
69 | mutex_unlock(&exar_gpio->lock); | 69 | mutex_unlock(&exar_gpio->lock); |
70 | 70 | ||
71 | return !!value; | 71 | return value; |
72 | } | 72 | } |
73 | 73 | ||
74 | static int exar_get_direction(struct gpio_chip *chip, unsigned int offset) | 74 | static int exar_get_direction(struct gpio_chip *chip, unsigned int offset) |
@@ -78,7 +78,7 @@ static int exar_get_direction(struct gpio_chip *chip, unsigned int offset) | |||
78 | int val; | 78 | int val; |
79 | 79 | ||
80 | addr = bank ? EXAR_OFFSET_MPIOSEL_HI : EXAR_OFFSET_MPIOSEL_LO; | 80 | addr = bank ? EXAR_OFFSET_MPIOSEL_HI : EXAR_OFFSET_MPIOSEL_LO; |
81 | val = exar_get(chip, addr) >> (offset % 8); | 81 | val = exar_get(chip, addr) & BIT(offset % 8); |
82 | 82 | ||
83 | return !!val; | 83 | return !!val; |
84 | } | 84 | } |
@@ -89,8 +89,8 @@ static int exar_get_value(struct gpio_chip *chip, unsigned int offset) | |||
89 | unsigned int addr; | 89 | unsigned int addr; |
90 | int val; | 90 | int val; |
91 | 91 | ||
92 | addr = bank ? EXAR_OFFSET_MPIOLVL_LO : EXAR_OFFSET_MPIOLVL_HI; | 92 | addr = bank ? EXAR_OFFSET_MPIOLVL_HI : EXAR_OFFSET_MPIOLVL_LO; |
93 | val = exar_get(chip, addr) >> (offset % 8); | 93 | val = exar_get(chip, addr) & BIT(offset % 8); |
94 | 94 | ||
95 | return !!val; | 95 | return !!val; |
96 | } | 96 | } |