aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpio/gpio-adp5588.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/drivers/gpio/gpio-adp5588.c b/drivers/gpio/gpio-adp5588.c
index 3f190e68f973..7d3c8d942ead 100644
--- a/drivers/gpio/gpio-adp5588.c
+++ b/drivers/gpio/gpio-adp5588.c
@@ -67,9 +67,20 @@ static int adp5588_gpio_get_value(struct gpio_chip *chip, unsigned off)
67{ 67{
68 struct adp5588_gpio *dev = 68 struct adp5588_gpio *dev =
69 container_of(chip, struct adp5588_gpio, gpio_chip); 69 container_of(chip, struct adp5588_gpio, gpio_chip);
70 unsigned bank = ADP5588_BANK(off);
71 unsigned bit = ADP5588_BIT(off);
72 int val;
70 73
71 return !!(adp5588_gpio_read(dev->client, 74 mutex_lock(&dev->lock);
72 GPIO_DAT_STAT1 + ADP5588_BANK(off)) & ADP5588_BIT(off)); 75
76 if (dev->dir[bank] & bit)
77 val = dev->dat_out[bank];
78 else
79 val = adp5588_gpio_read(dev->client, GPIO_DAT_STAT1 + bank);
80
81 mutex_unlock(&dev->lock);
82
83 return !!(val & bit);
73} 84}
74 85
75static void adp5588_gpio_set_value(struct gpio_chip *chip, 86static void adp5588_gpio_set_value(struct gpio_chip *chip,