gpio: samsung: Fix input mode setting function for GPIO int
authorEunki Kim <eunki_kim@samsung.com>
Tue, 23 Oct 2012 13:39:38 +0000 (22:39 +0900)
committerKukjin Kim <kgene.kim@samsung.com>
Tue, 23 Oct 2012 13:39:38 +0000 (22:39 +0900)
This patch makes GPIO pin to INTERRUPT mode or INPUT mode according
to bitmap_gpio_int. When the related bit of bitmap_gpio_int is set,
it makes GPIO pin to INTERRUPT mode instrad of INPUT mode in the
samsung_gpiolib_4bit_input function.

Signed-off-by: Eunki Kim <eunki_kim@samsung.com>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Kukjin Kim <kgene.kim@samsung.com>
drivers/gpio/gpio-samsung.c

index a006f0db15af78a536837e76fad021c12c4fb8b2..15be3d9aebe94b90f6acc02838285f8d012ef5d9 100644 (file)
@@ -596,7 +596,10 @@ static int samsung_gpiolib_4bit_input(struct gpio_chip *chip,
        unsigned long con;
 
        con = __raw_readl(base + GPIOCON_OFF);
-       con &= ~(0xf << con_4bit_shift(offset));
+       if (ourchip->bitmap_gpio_int & BIT(offset))
+               con |= 0xf << con_4bit_shift(offset);
+       else
+               con &= ~(0xf << con_4bit_shift(offset));
        __raw_writel(con, base + GPIOCON_OFF);
 
        gpio_dbg("%s: %p: CON now %08lx\n", __func__, base, con);
@@ -1081,6 +1084,8 @@ static void __init samsung_gpiolib_add_4bit_chips(struct samsung_gpio_chip *chip
                if ((base != NULL) && (chip->base == NULL))
                        chip->base = base + ((i) * 0x20);
 
+               chip->bitmap_gpio_int = 0;
+
                samsung_gpiolib_add(chip);
        }
 }