Eunki Kim wrote: > > When a device uses GPIO interrupt, its driver assumes that GPIO > should be INPUT mode. However, GPIO of SAMSUNG SoC is sepated to > INPUT mode and INTERRUPT mode. They are set by 0x0 and 0xF in GPIO > control register. If the register is set to INPUT mode, the > interrupt never occur. Therefore, it's necessary to set INTERRUPT > mode instead of INPUT mode when the pin is used for GPIO interrupt. > > This patch inserts the bitmap_gpio_int member in struct samsung_ > gpio_chip in order to represent use of GPIO interrupt for each pin > and sets the related bit when s5p_register_gpio_interrupt function > is called. > > Signed-off-by: Eunki Kim <eunki_kim@xxxxxxxxxxx> > Cc: Grant Likely <grant.likely@xxxxxxxxxxxx> > Cc: Linus Walleij <linus.walleij@xxxxxxxxxx> > --- > arch/arm/plat-samsung/include/plat/gpio-core.h | 2 ++ > arch/arm/plat-samsung/s5p-irq-gpioint.c | 8 ++++++-- > 2 files changed, 8 insertions(+), 2 deletions(-) > > diff --git a/arch/arm/plat-samsung/include/plat/gpio-core.h > b/arch/arm/plat-samsung/include/plat/gpio-core.h > index 1fe6917..dfd8b7a 100644 > --- a/arch/arm/plat-samsung/include/plat/gpio-core.h > +++ b/arch/arm/plat-samsung/include/plat/gpio-core.h > @@ -48,6 +48,7 @@ struct samsung_gpio_cfg; > * @config: special function and pull-resistor control information. > * @lock: Lock for exclusive access to this gpio bank. > * @pm_save: Save information for suspend/resume support. > + * @bitmap_gpio_int: Bitmap for representing GPIO interrupt or not. > * > * This wrapper provides the necessary information for the Samsung > * specific gpios being registered with gpiolib. > @@ -71,6 +72,7 @@ struct samsung_gpio_chip { > #ifdef CONFIG_PM > u32 pm_save[4]; > #endif > + u32 bitmap_gpio_int; > }; > > static inline struct samsung_gpio_chip *to_samsung_gpio(struct gpio_chip > *gpc) > diff --git a/arch/arm/plat-samsung/s5p-irq-gpioint.c b/arch/arm/plat- > samsung/s5p-irq-gpioint.c > index f9431fe..d981c61 100644 > --- a/arch/arm/plat-samsung/s5p-irq-gpioint.c > +++ b/arch/arm/plat-samsung/s5p-irq-gpioint.c > @@ -185,7 +185,7 @@ int __init s5p_register_gpio_interrupt(int pin) > > /* check if the group has been already registered */ > if (my_chip->irq_base) > - return my_chip->irq_base + offset; > + goto success; > > /* register gpio group */ > ret = s5p_gpioint_add(my_chip); > @@ -193,9 +193,13 @@ int __init s5p_register_gpio_interrupt(int pin) > my_chip->chip.to_irq = samsung_gpiolib_to_irq; > printk(KERN_INFO "Registered interrupt support for gpio > group %d.\n", > group); > - return my_chip->irq_base + offset; > + goto success; > } > return ret; > +success: > + my_chip->bitmap_gpio_int |= BIT(offset); > + > + return my_chip->irq_base + offset; > } > > int __init s5p_register_gpioint_bank(int chain_irq, int start, int > nr_groups) > -- > 1.7.1 OK, applied. Thanks. Best regards, Kgene. -- Kukjin Kim <kgene.kim@xxxxxxxxxxx>, Senior Engineer, SW Solution Development Team, Samsung Electronics Co., Ltd. -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html