aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/plat-samsung
diff options
context:
space:
mode:
authorEunki Kim <eunki_kim@samsung.com>2012-10-23 09:39:33 -0400
committerKukjin Kim <kgene.kim@samsung.com>2012-10-23 09:39:33 -0400
commit453e2dd768de8aa82ee503f1d45395149aa357d6 (patch)
tree7772efb06f4ef05a34e648350718f2cebf4b6ea7 /arch/arm/plat-samsung
parent6f0c0580b70c89094b3422ba81118c7b959c7556 (diff)
ARM: SAMSUNG: Insert bitmap_gpio_int member in samsung_gpio_chip
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@samsung.com> Cc: Grant Likely <grant.likely@secretlab.ca> Cc: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Kukjin Kim <kgene.kim@samsung.com>
Diffstat (limited to 'arch/arm/plat-samsung')
-rw-r--r--arch/arm/plat-samsung/include/plat/gpio-core.h2
-rw-r--r--arch/arm/plat-samsung/s5p-irq-gpioint.c8
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 1fe6917f6a2a..dfd8b7af8c7a 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;
48 * @config: special function and pull-resistor control information. 48 * @config: special function and pull-resistor control information.
49 * @lock: Lock for exclusive access to this gpio bank. 49 * @lock: Lock for exclusive access to this gpio bank.
50 * @pm_save: Save information for suspend/resume support. 50 * @pm_save: Save information for suspend/resume support.
51 * @bitmap_gpio_int: Bitmap for representing GPIO interrupt or not.
51 * 52 *
52 * This wrapper provides the necessary information for the Samsung 53 * This wrapper provides the necessary information for the Samsung
53 * specific gpios being registered with gpiolib. 54 * specific gpios being registered with gpiolib.
@@ -71,6 +72,7 @@ struct samsung_gpio_chip {
71#ifdef CONFIG_PM 72#ifdef CONFIG_PM
72 u32 pm_save[4]; 73 u32 pm_save[4];
73#endif 74#endif
75 u32 bitmap_gpio_int;
74}; 76};
75 77
76static inline struct samsung_gpio_chip *to_samsung_gpio(struct gpio_chip *gpc) 78static 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 23557d30e44c..bae56131a50a 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)
185 185
186 /* check if the group has been already registered */ 186 /* check if the group has been already registered */
187 if (my_chip->irq_base) 187 if (my_chip->irq_base)
188 return my_chip->irq_base + offset; 188 goto success;
189 189
190 /* register gpio group */ 190 /* register gpio group */
191 ret = s5p_gpioint_add(my_chip); 191 ret = s5p_gpioint_add(my_chip);
@@ -193,9 +193,13 @@ int __init s5p_register_gpio_interrupt(int pin)
193 my_chip->chip.to_irq = samsung_gpiolib_to_irq; 193 my_chip->chip.to_irq = samsung_gpiolib_to_irq;
194 printk(KERN_INFO "Registered interrupt support for gpio group %d.\n", 194 printk(KERN_INFO "Registered interrupt support for gpio group %d.\n",
195 group); 195 group);
196 return my_chip->irq_base + offset; 196 goto success;
197 } 197 }
198 return ret; 198 return ret;
199success:
200 my_chip->bitmap_gpio_int |= BIT(offset);
201
202 return my_chip->irq_base + offset;
199} 203}
200 204
201int __init s5p_register_gpioint_bank(int chain_irq, int start, int nr_groups) 205int __init s5p_register_gpioint_bank(int chain_irq, int start, int nr_groups)