mirror of
https://github.com/torvalds/linux.git
synced 2024-11-25 21:51:40 +00:00
Input: adp5589-keys - fix adp5589_gpio_get_value()
The adp5589 seems to have the same behavior as similar devices as explained in commit910a9f5636
("Input: adp5588-keys - get value from data out when dir is out"). Basically, when the gpio is set as output we need to get the value from ADP5589_GPO_DATA_OUT_A register instead of ADP5589_GPI_STATUS_A. Fixes:9d2e173644
("Input: ADP5589 - new driver for I2C Keypad Decoder and I/O Expander") Signed-off-by: Nuno Sa <nuno.sa@analog.com> Link: https://lore.kernel.org/r/20241001-b4-dev-adp5589-fw-conversion-v1-2-fca0149dfc47@analog.com Cc: stable@vger.kernel.org Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
This commit is contained in:
parent
fb5cc65f97
commit
c684771630
@ -391,10 +391,17 @@ static int adp5589_gpio_get_value(struct gpio_chip *chip, unsigned off)
|
||||
struct adp5589_kpad *kpad = gpiochip_get_data(chip);
|
||||
unsigned int bank = kpad->var->bank(kpad->gpiomap[off]);
|
||||
unsigned int bit = kpad->var->bit(kpad->gpiomap[off]);
|
||||
int val;
|
||||
|
||||
return !!(adp5589_read(kpad->client,
|
||||
kpad->var->reg(ADP5589_GPI_STATUS_A) + bank) &
|
||||
bit);
|
||||
mutex_lock(&kpad->gpio_lock);
|
||||
if (kpad->dir[bank] & bit)
|
||||
val = kpad->dat_out[bank];
|
||||
else
|
||||
val = adp5589_read(kpad->client,
|
||||
kpad->var->reg(ADP5589_GPI_STATUS_A) + bank);
|
||||
mutex_unlock(&kpad->gpio_lock);
|
||||
|
||||
return !!(val & bit);
|
||||
}
|
||||
|
||||
static void adp5589_gpio_set_value(struct gpio_chip *chip,
|
||||
|
Loading…
Reference in New Issue
Block a user