ARM: EXYNOS4: Add keypad device helpers
authorNaveen Krishna Ch <ch.naveen@samsung.com>
Sat, 5 Mar 2011 00:44:09 +0000 (09:44 +0900)
committerKukjin Kim <kgene.kim@samsung.com>
Tue, 15 Mar 2011 11:37:02 +0000 (20:37 +0900)
This patch adds the samsung_keypad_cfg_gpio() for EXYNOS4.
Now, this helpers are only for keypad operating in PORT-0.

Signed-off-by: Naveen Krishna Ch <ch.naveen@samsung.com>
Signed-off-by: Kukjin Kim <kgene.kim@samsung.com>
arch/arm/mach-exynos4/Kconfig
arch/arm/mach-exynos4/Makefile
arch/arm/mach-exynos4/setup-keypad.c [new file with mode: 0644]

index 8b841e693902570fa40a704ee009e735b1445d4d..8a007cc26ac56e3fd689ca9b4e8f8c5647c1a6db 100644 (file)
@@ -65,6 +65,11 @@ config EXYNOS4_SETUP_I2C7
        help
          Common setup code for i2c bus 7.
 
+config EXYNOS4_SETUP_KEYPAD
+       bool
+       help
+         Common setup code for keypad.
+
 config EXYNOS4_SETUP_SDHCI
        bool
        select EXYNOS4_SETUP_SDHCI_GPIO
index 486d8b4b38d32b779c23d2ea01ddb6bf47591e89..b8f0e7d82d7e5fed41fe5f470efa3879d0622ceb 100644 (file)
@@ -50,6 +50,7 @@ obj-$(CONFIG_EXYNOS4_SETUP_I2C4)      += setup-i2c4.o
 obj-$(CONFIG_EXYNOS4_SETUP_I2C5)       += setup-i2c5.o
 obj-$(CONFIG_EXYNOS4_SETUP_I2C6)       += setup-i2c6.o
 obj-$(CONFIG_EXYNOS4_SETUP_I2C7)       += setup-i2c7.o
+obj-$(CONFIG_EXYNOS4_SETUP_KEYPAD)     += setup-keypad.o
 obj-$(CONFIG_EXYNOS4_SETUP_SDHCI)      += setup-sdhci.o
 obj-$(CONFIG_EXYNOS4_SETUP_SDHCI_GPIO) += setup-sdhci-gpio.o
 obj-$(CONFIG_SATA_AHCI_PLATFORM)       += dev-ahci.o
diff --git a/arch/arm/mach-exynos4/setup-keypad.c b/arch/arm/mach-exynos4/setup-keypad.c
new file mode 100644 (file)
index 0000000..1ee0ebf
--- /dev/null
@@ -0,0 +1,35 @@
+/* linux/arch/arm/mach-exynos4/setup-keypad.c
+ *
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd.
+ *             http://www.samsung.com
+ *
+ * GPIO configuration for Exynos4 KeyPad device
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+*/
+
+#include <linux/gpio.h>
+#include <plat/gpio-cfg.h>
+
+void samsung_keypad_cfg_gpio(unsigned int rows, unsigned int cols)
+{
+       /* Keypads can be of various combinations, Just making sure */
+
+       if (rows > 8) {
+               /* Set all the necessary GPX2 pins: KP_ROW[0~7] */
+               s3c_gpio_cfgrange_nopull(EXYNOS4_GPX2(0), 8, S3C_GPIO_SFN(3));
+
+               /* Set all the necessary GPX3 pins: KP_ROW[8~] */
+               s3c_gpio_cfgrange_nopull(EXYNOS4_GPX3(0), (rows - 8),
+                                        S3C_GPIO_SFN(3));
+       } else {
+               /* Set all the necessary GPX2 pins: KP_ROW[x] */
+               s3c_gpio_cfgrange_nopull(EXYNOS4_GPX2(0), rows,
+                                        S3C_GPIO_SFN(3));
+       }
+
+       /* Set all the necessary GPX1 pins to special-function 3: KP_COL[x] */
+       s3c_gpio_cfgrange_nopull(EXYNOS4_GPX1(0), cols, S3C_GPIO_SFN(3));
+}