summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorRobby Cai <R63905@freescale.com>2012-06-12 18:24:54 +0800
committerRobby Cai <R63905@freescale.com>2012-06-18 13:25:07 +0800
commit2a41c7e2e81cdc61c1b2e87f92c8752ad2b6549f (patch)
tree30dbefa2da4874d8fdc0431a03d1fcff809cf654 /arch
parentde6ed83b29ef5baaa134bbb0695e87357c097f03 (diff)
ENGR00213749: imx6sl: Add keypad support on EINK-DC3 board
Add the support for keypad on EINK-DC3 board which is stacked on ARM2 board. - configure the iomux setting - add dummy kpp clock to fool imx_keypad driver - add platform device for keypad - add key mapping (4x4 array) used on EINK-DC3 - update the defconfig for keypad driver Signed-off-by: Robby Cai <R63905@freescale.com>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/configs/imx6s_defconfig3
-rw-r--r--arch/arm/mach-mx6/Kconfig1
-rwxr-xr-xarch/arm/mach-mx6/board-mx6sl_arm2.c28
-rwxr-xr-xarch/arm/mach-mx6/board-mx6sl_arm2.h10
-rwxr-xr-xarch/arm/mach-mx6/clock_mx6sl.c1
-rw-r--r--arch/arm/mach-mx6/devices-imx6q.h3
-rw-r--r--arch/arm/plat-mxc/devices/platform-imx-keypad.c5
-rwxr-xr-xarch/arm/plat-mxc/include/mach/iomux-mx6sl.h11
-rw-r--r--arch/arm/plat-mxc/include/mach/mx6.h3
9 files changed, 59 insertions, 6 deletions
diff --git a/arch/arm/configs/imx6s_defconfig b/arch/arm/configs/imx6s_defconfig
index ffb73c81609c..6e8281a49950 100644
--- a/arch/arm/configs/imx6s_defconfig
+++ b/arch/arm/configs/imx6s_defconfig
@@ -260,6 +260,7 @@ CONFIG_IMX_HAVE_PLATFORM_IMX2_WDT=y
CONFIG_IMX_HAVE_PLATFORM_IMX_SNVS_RTC=y
CONFIG_IMX_HAVE_PLATFORM_IMX_CAAM=y
CONFIG_IMX_HAVE_PLATFORM_IMX_I2C=y
+CONFIG_IMX_HAVE_PLATFORM_IMX_KEYPAD=y
CONFIG_IMX_HAVE_PLATFORM_IMX_SSI=y
CONFIG_IMX_HAVE_PLATFORM_IMX_ESAI=y
CONFIG_IMX_HAVE_PLATFORM_IMX_UART=y
@@ -1034,7 +1035,7 @@ CONFIG_KEYBOARD_GPIO=y
# CONFIG_KEYBOARD_MAX7359 is not set
# CONFIG_KEYBOARD_MCS is not set
# CONFIG_KEYBOARD_MPR121 is not set
-# CONFIG_KEYBOARD_IMX is not set
+CONFIG_KEYBOARD_IMX=y
# CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_OPENCORES is not set
# CONFIG_KEYBOARD_STOWAWAY is not set
diff --git a/arch/arm/mach-mx6/Kconfig b/arch/arm/mach-mx6/Kconfig
index c6851d064eaa..a96597d2d599 100644
--- a/arch/arm/mach-mx6/Kconfig
+++ b/arch/arm/mach-mx6/Kconfig
@@ -98,6 +98,7 @@ config MACH_MX6SL_ARM2
select IMX_HAVE_PLATFORM_IMX_EPDC
select IMX_HAVE_PLATFORM_IMX_SPDC
select IMX_HAVE_PLATFORM_IMX_PXP
+ select IMX_HAVE_PLATFORM_IMX_KEYPAD
help
Include support for i.MX 6Sololite Armadillo2 platform. This includes specific
configurations for the board and its peripherals.
diff --git a/arch/arm/mach-mx6/board-mx6sl_arm2.c b/arch/arm/mach-mx6/board-mx6sl_arm2.c
index 2d42966dbfb1..b17a0fff464a 100755
--- a/arch/arm/mach-mx6/board-mx6sl_arm2.c
+++ b/arch/arm/mach-mx6/board-mx6sl_arm2.c
@@ -1042,6 +1042,33 @@ static struct mxc_fb_platform_data fb_data[] = {
static struct platform_device lcd_wvga_device = {
.name = "lcd_seiko",
};
+
+static int mx6sl_arm2_keymap[] = {
+ KEY(0, 0, KEY_SELECT),
+ KEY(0, 1, KEY_BACK),
+ KEY(0, 2, KEY_F1),
+ KEY(0, 3, KEY_F2),
+
+ KEY(1, 0, KEY_F3),
+ KEY(1, 1, KEY_F4),
+ KEY(1, 2, KEY_F5),
+ KEY(1, 3, KEY_MENU),
+
+ KEY(2, 0, KEY_PREVIOUS),
+ KEY(2, 1, KEY_NEXT),
+ KEY(2, 2, KEY_HOME),
+ KEY(2, 3, KEY_NEXT),
+
+ KEY(3, 0, KEY_UP),
+ KEY(3, 1, KEY_LEFT),
+ KEY(3, 2, KEY_RIGHT),
+ KEY(3, 3, KEY_DOWN),
+};
+
+static const struct matrix_keymap_data mx6sl_arm2_map_data __initconst = {
+ .keymap = mx6sl_arm2_keymap,
+ .keymap_size = ARRAY_SIZE(mx6sl_arm2_keymap),
+};
/*!
* Board specific initialization.
*/
@@ -1118,6 +1145,7 @@ static void __init mx6_arm2_init(void)
imx6q_add_imx2_wdt(0, NULL);
imx_add_viv_gpu(&imx6_gpu_data, &imx6q_gpu_pdata);
+ imx6sl_add_imx_keypad(&mx6sl_arm2_map_data);
}
extern void __iomem *twd_base;
diff --git a/arch/arm/mach-mx6/board-mx6sl_arm2.h b/arch/arm/mach-mx6/board-mx6sl_arm2.h
index 940c46d0e984..724f29fc32e0 100755
--- a/arch/arm/mach-mx6/board-mx6sl_arm2.h
+++ b/arch/arm/mach-mx6/board-mx6sl_arm2.h
@@ -143,6 +143,16 @@ static iomux_v3_cfg_t mx6sl_arm2_pads[] = {
MX6SL_PAD_PWM1__PWM1_PWMO,
/* LCD power on */
MX6SL_PAD_KEY_ROW5__GPIO_4_3,
+
+ /* keypad on E-Ink add-on board */
+ MX6SL_PAD_KEY_COL0__KPP_COL_0,
+ MX6SL_PAD_KEY_COL1__KPP_COL_1,
+ MX6SL_PAD_KEY_COL2__KPP_COL_2,
+ MX6SL_PAD_KEY_COL3__KPP_COL_3,
+ MX6SL_PAD_KEY_ROW0__KPP_ROW_0,
+ MX6SL_PAD_KEY_ROW1__KPP_ROW_1,
+ MX6SL_PAD_KEY_ROW2__KPP_ROW_2,
+ MX6SL_PAD_KEY_ROW3__KPP_ROW_3,
};
static iomux_v3_cfg_t mx6sl_arm2_epdc_enable_pads[] = {
diff --git a/arch/arm/mach-mx6/clock_mx6sl.c b/arch/arm/mach-mx6/clock_mx6sl.c
index 0c17ed4bfd8f..e1a4e0032c2f 100755
--- a/arch/arm/mach-mx6/clock_mx6sl.c
+++ b/arch/arm/mach-mx6/clock_mx6sl.c
@@ -3866,6 +3866,7 @@ static struct clk_lookup lookups[] = {
_REGISTER_CLOCK(NULL, "usb_phy4_clk", usb_phy4_clk),
_REGISTER_CLOCK("imx2-wdt.0", NULL, dummy_clk),
_REGISTER_CLOCK("imx2-wdt.1", NULL, dummy_clk),
+ _REGISTER_CLOCK(NULL, "kpp", dummy_clk),
_REGISTER_CLOCK(NULL, NULL, aips_tz2_clk),
_REGISTER_CLOCK(NULL, NULL, aips_tz1_clk),
_REGISTER_CLOCK(NULL, "clko_clk", clko_clk),
diff --git a/arch/arm/mach-mx6/devices-imx6q.h b/arch/arm/mach-mx6/devices-imx6q.h
index 6f8b485a3576..7695d1253035 100644
--- a/arch/arm/mach-mx6/devices-imx6q.h
+++ b/arch/arm/mach-mx6/devices-imx6q.h
@@ -239,3 +239,6 @@ extern const struct imx_pcie_data imx6q_pcie_data __initconst;
#define imx6q_add_busfreq(pdata) imx_add_busfreq(pdata)
+extern const struct imx_imx_keypad_data imx6sl_imx_keypad_data;
+#define imx6sl_add_imx_keypad(pdata) \
+ imx_add_imx_keypad(&imx6sl_imx_keypad_data, pdata)
diff --git a/arch/arm/plat-mxc/devices/platform-imx-keypad.c b/arch/arm/plat-mxc/devices/platform-imx-keypad.c
index 26366114b021..1a120218d05c 100644
--- a/arch/arm/plat-mxc/devices/platform-imx-keypad.c
+++ b/arch/arm/plat-mxc/devices/platform-imx-keypad.c
@@ -46,6 +46,11 @@ const struct imx_imx_keypad_data imx51_imx_keypad_data __initconst =
imx_imx_keypad_data_entry_single(MX51, SZ_16);
#endif /* ifdef CONFIG_SOC_IMX51 */
+#ifdef CONFIG_SOC_IMX6SL
+const struct imx_imx_keypad_data imx6sl_imx_keypad_data __initconst =
+ imx_imx_keypad_data_entry_single(MX6SL, SZ_16);
+#endif /* ifdef CONFIG_SOC_IMX6SL */
+
struct platform_device *__init imx_add_imx_keypad(
const struct imx_imx_keypad_data *data,
const struct matrix_keymap_data *pdata)
diff --git a/arch/arm/plat-mxc/include/mach/iomux-mx6sl.h b/arch/arm/plat-mxc/include/mach/iomux-mx6sl.h
index 5ce23184a540..00734c9c0289 100755
--- a/arch/arm/plat-mxc/include/mach/iomux-mx6sl.h
+++ b/arch/arm/plat-mxc/include/mach/iomux-mx6sl.h
@@ -69,6 +69,9 @@
PAD_CTL_PUE | PAD_CTL_PKE | \
PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm)
+#define MX6SL_KEYPAD_CTRL (PAD_CTL_HYS | PAD_CTL_PKE | PAD_CTL_PUE | \
+ PAD_CTL_PUS_100K_UP | PAD_CTL_DSE_120ohm)
+
#define MX6SL_PAD_AUD_MCLK__AUDMUX_AUDIO_CLK_OUT \
IOMUX_PAD(0x02A4, 0x004C, 0, 0x0000, 0, NO_PAD_CTRL)
#define MX6SL_PAD_AUD_MCLK__PWM4_PWMO \
@@ -1708,7 +1711,7 @@
IOMUX_PAD(0x0490, 0x0188, 7, 0x0000, 0, NO_PAD_CTRL)
#define MX6SL_PAD_KEY_ROW0__KPP_ROW_0 \
- IOMUX_PAD(0x0494, 0x018C, 0, 0x0754, 0, NO_PAD_CTRL)
+ IOMUX_PAD(0x0494, 0x018C, 0, 0x0754, 0, MX6SL_KEYPAD_CTRL)
#define MX6SL_PAD_KEY_ROW0__I2C2_SDA \
IOMUX_PAD(0x0494, 0x018C, 1 | IOMUX_CONFIG_SION, 0x0728, 2, MX6SL_I2C_PAD_CTRL)
#define MX6SL_PAD_KEY_ROW0__LCDIF_DAT_1 \
@@ -1725,7 +1728,7 @@
IOMUX_PAD(0x0494, 0x018C, 7, 0x0000, 0, NO_PAD_CTRL)
#define MX6SL_PAD_KEY_ROW1__KPP_ROW_1 \
- IOMUX_PAD(0x0498, 0x0190, 0, 0x0758, 0, NO_PAD_CTRL)
+ IOMUX_PAD(0x0498, 0x0190, 0, 0x0758, 0, MX6SL_KEYPAD_CTRL)
#define MX6SL_PAD_KEY_ROW1__ECSPI4_MISO \
IOMUX_PAD(0x0498, 0x0190, 1, 0x06D4, 2, NO_PAD_CTRL)
#define MX6SL_PAD_KEY_ROW1__LCDIF_DAT_3 \
@@ -1742,7 +1745,7 @@
IOMUX_PAD(0x0498, 0x0190, 7, 0x0000, 0, NO_PAD_CTRL)
#define MX6SL_PAD_KEY_ROW2__KPP_ROW_2 \
- IOMUX_PAD(0x049C, 0x0194, 0, 0x075C, 0, NO_PAD_CTRL)
+ IOMUX_PAD(0x049C, 0x0194, 0, 0x075C, 0, MX6SL_KEYPAD_CTRL)
#define MX6SL_PAD_KEY_ROW2__ECSPI4_SCLK \
IOMUX_PAD(0x049C, 0x0194, 1, 0x06D0, 2, NO_PAD_CTRL)
#define MX6SL_PAD_KEY_ROW2__LCDIF_DAT_5 \
@@ -1759,7 +1762,7 @@
IOMUX_PAD(0x049C, 0x0194, 7, 0x0000, 0, NO_PAD_CTRL)
#define MX6SL_PAD_KEY_ROW3__KPP_ROW_3 \
- IOMUX_PAD(0x04A0, 0x0198, 0, 0x0760, 0, NO_PAD_CTRL)
+ IOMUX_PAD(0x04A0, 0x0198, 0, 0x0760, 0, MX6SL_KEYPAD_CTRL)
#define MX6SL_PAD_KEY_ROW3__AUDMUX_AUD6_RXC \
IOMUX_PAD(0x04A0, 0x0198, 1, 0x061C, 1, NO_PAD_CTRL)
#define MX6SL_PAD_KEY_ROW3__LCDIF_DAT_7 \
diff --git a/arch/arm/plat-mxc/include/mach/mx6.h b/arch/arm/plat-mxc/include/mach/mx6.h
index 51c047acf8bc..bb4423e20063 100644
--- a/arch/arm/plat-mxc/include/mach/mx6.h
+++ b/arch/arm/plat-mxc/include/mach/mx6.h
@@ -178,7 +178,7 @@
#define GPIO5_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x2C000)
#define GPIO6_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x30000)
#define GPIO7_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x34000)
-#define KPP_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x38000)
+#define MX6SL_KPP_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x38000)
#define MX6Q_WDOG1_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x3C000)
#define MX6Q_WDOG2_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x40000)
#define CCM_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x44000)
@@ -418,6 +418,7 @@
#define MXC_INT_WDOG1 112
#define MXC_INT_WDOG2 113
#define MXC_INT_KPP 114
+#define MX6SL_INT_KPP 114
#define MX6Q_INT_PWM1 115
#define MX6Q_INT_PWM2 116
#define MX6Q_INT_PWM3 117