aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpio/gpio-samsung.c
diff options
context:
space:
mode:
authorHeiko Stuebner <heiko@sntech.de>2013-02-12 10:12:09 -0800
committerKukjin Kim <kgene.kim@samsung.com>2013-03-05 20:21:31 +0900
commit1c8408e3137bcb78d9ab8af832111f455d11e99c (patch)
tree35d1896ca67c6f007179256678754243e63a97e6 /drivers/gpio/gpio-samsung.c
parentARM: S3C24XX: add soc_is_s3c2412 option (diff)
downloadlinux-dev-1c8408e3137bcb78d9ab8af832111f455d11e99c.tar.xz
linux-dev-1c8408e3137bcb78d9ab8af832111f455d11e99c.zip
ARM: S3C24XX: handle s3c2412 eints using new infrastructure
The s3c2412 handles the eints 0 to 3 different than all the other SoCs of the 24xx range. These eints must be acked and masked in the regular bits as well as the bits 0 to 3 of the eint registers, which are unused on the other SoCs. This of course can be realized using the new infrastructure with the eint bits in the main register being the parent interrupts of the same bits in the eint register. The s3c2412 therefore gets its own IRQ_EINT0 to 4 constants that reside in the newly created gap before IRQ_EINT4. gpio-samsung, as the only user of these is modified to return the correct values when handling gpio_to_irq requests on s3c2412 based machines. Due to lack of hardware this is compile tested only, but should hopefully work as intended. Signed-off-by: Heiko Stuebner <heiko@sntech.de> Signed-off-by: Kukjin Kim <kgene.kim@samsung.com>
Diffstat (limited to 'drivers/gpio/gpio-samsung.c')
-rw-r--r--drivers/gpio/gpio-samsung.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/gpio/gpio-samsung.c b/drivers/gpio/gpio-samsung.c
index b3643ff007e4..db098cea3a55 100644
--- a/drivers/gpio/gpio-samsung.c
+++ b/drivers/gpio/gpio-samsung.c
@@ -1123,7 +1123,10 @@ int samsung_gpiolib_to_irq(struct gpio_chip *chip, unsigned int offset)
static int s3c24xx_gpiolib_fbank_to_irq(struct gpio_chip *chip, unsigned offset)
{
if (offset < 4)
- return IRQ_EINT0 + offset;
+ if (soc_is_s3c2412())
+ return IRQ_EINT0_2412 + offset;
+ else
+ return IRQ_EINT0 + offset;
if (offset < 8)
return IRQ_EINT4 + offset - 4;