Messages in this thread Patch in this message |  | | Date | Sat, 7 Feb 2009 15:13:35 +0900 | | Subject | [PATCH] twl4030-gpio: Fix getting the value of the TWL4030 GPIO output pin | | From | Joonyoung Shim <> |
| |
If TWL4030 GPIO pin is output, must read the value from REG_GPIODATAOUTx register in twl4030_get_gpio_datainout().
Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com> ---
diff --git a/drivers/gpio/twl4030-gpio.c b/drivers/gpio/twl4030-gpio.c index afad147..890518a 100644 --- a/drivers/gpio/twl4030-gpio.c +++ b/drivers/gpio/twl4030-gpio.c @@ -183,7 +183,7 @@ static int twl4030_set_gpio_dataout(int gpio, int enable) return gpio_twl4030_write(base, d_msk); }
-static int twl4030_get_gpio_datain(int gpio) +static int twl4030_get_gpio_datainout(int gpio) { u8 d_bnk = gpio >> 3; u8 d_off = gpio & 0x7; @@ -194,7 +194,17 @@ static int twl4030_get_gpio_datain(int gpio) || !(gpio_usage_count & BIT(gpio)))) return -EPERM;
- base = REG_GPIODATAIN1 + d_bnk; + base = REG_GPIODATADIR1 + d_bnk; + ret = gpio_twl4030_read(base); + if (ret > 0) + ret = (ret >> d_off) & 0x1; + else + return ret; + + if (ret) + base = REG_GPIODATAOUT1 + d_bnk; + else + base = REG_GPIODATAIN1 + d_bnk; ret = gpio_twl4030_read(base); if (ret > 0) ret = (ret >> d_off) & 0x1;
|  |