summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLiGang <b41990@freescale.com>2012-10-29 13:02:10 +0800
committerLiGang <b41990@freescale.com>2012-10-29 13:02:10 +0800
commita846a262efd0f4c6ccca4e11b2f0042aa01d9825 (patch)
tree7500d31bb54ffa9065a5966fc9bcef188c108e70
parentd1f9845d0c0ca08374c7c11d31de7aeca50b69d3 (diff)
ENGR00230854 Add GPIO button for power key
1. Make pad WDOG_B pin as gpio_3_18, and 100k pull up 2. Add GPIO button Signed-off-by: LiGang <b41990@freescale.com>
-rw-r--r--arch/arm/mach-mx6/board-mx6sl_common.h4
-rw-r--r--arch/arm/mach-mx6/board-mx6sl_evk.c47
-rwxr-xr-xarch/arm/plat-mxc/include/mach/iomux-mx6sl.h2
3 files changed, 50 insertions, 3 deletions
diff --git a/arch/arm/mach-mx6/board-mx6sl_common.h b/arch/arm/mach-mx6/board-mx6sl_common.h
index 4a04cbea0694..465863ec504d 100644
--- a/arch/arm/mach-mx6/board-mx6sl_common.h
+++ b/arch/arm/mach-mx6/board-mx6sl_common.h
@@ -223,8 +223,8 @@ static iomux_v3_cfg_t mx6sl_brd_pads[] = {
MX6SL_PAD_KEY_ROW2__KPP_ROW_2,
MX6SL_PAD_KEY_ROW3__KPP_ROW_3,
- /* WDOG */
- MX6SL_PAD_WDOG_B__WDOG1_WDOG_B,
+ /* The WDOG_B pad is used as an power key gpio button */
+ MX6SL_PAD_WDOG_B__GPIO_3_18,
/* Charge */
MX6SL_PAD_ECSPI2_MISO__GPIO_4_14, /* CHG_FLT */
diff --git a/arch/arm/mach-mx6/board-mx6sl_evk.c b/arch/arm/mach-mx6/board-mx6sl_evk.c
index 48d4669fe56a..0f8f80894510 100644
--- a/arch/arm/mach-mx6/board-mx6sl_evk.c
+++ b/arch/arm/mach-mx6/board-mx6sl_evk.c
@@ -1384,6 +1384,52 @@ static void __init uart2_init(void)
ARRAY_SIZE(mx6sl_uart2_pads));
imx6sl_add_imx_uart(1, &mx6sl_evk_uart1_data);
}
+
+
+#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
+
+#define MX6SL_EVK_POWER_OFF IMX_GPIO_NR(3, 18)
+
+#define GPIO_BUTTON(gpio_num, ev_code, act_low, descr, wake, debounce) \
+{ \
+ .gpio = gpio_num, \
+ .type = EV_KEY, \
+ .code = ev_code, \
+ .active_low = act_low, \
+ .desc = "btn " descr, \
+ .wakeup = wake, \
+ .debounce_interval = debounce, \
+}
+
+static struct gpio_keys_button imx6sl_buttons[] = {
+ GPIO_BUTTON(MX6SL_EVK_POWER_OFF, KEY_POWER, 1, "power", 1, 1),
+};
+
+static struct gpio_keys_platform_data imx6sl_button_data = {
+ .buttons = imx6sl_buttons,
+ .nbuttons = ARRAY_SIZE(imx6sl_buttons),
+ .rep = 0,
+};
+
+static struct platform_device imx6sl_button_device = {
+ .name = "gpio-keys",
+ .id = -1,
+ .num_resources = 0,
+ .dev = {
+ .platform_data = &imx6sl_button_data,
+ }
+};
+
+static void __init imx6sl_add_device_buttons(void)
+{
+ platform_device_register(&imx6sl_button_device);
+}
+#else
+static void __init imx6sl_add_device_buttons(void) {}
+#endif
+
+
+
/*!
* Board specific initialization.
*/
@@ -1506,6 +1552,7 @@ static void __init mx6_evk_init(void)
imx6q_add_imx2_wdt(0, NULL);
imx_add_viv_gpu(&imx6_gpu_data, &imx6q_gpu_pdata);
+ imx6sl_add_device_buttons();
imx6sl_add_imx_keypad(&mx6sl_evk_map_data);
imx6q_add_busfreq();
imx6sl_add_dcp();
diff --git a/arch/arm/plat-mxc/include/mach/iomux-mx6sl.h b/arch/arm/plat-mxc/include/mach/iomux-mx6sl.h
index 90de1dd8f4fb..1649f3423ccf 100755
--- a/arch/arm/plat-mxc/include/mach/iomux-mx6sl.h
+++ b/arch/arm/plat-mxc/include/mach/iomux-mx6sl.h
@@ -3085,7 +3085,7 @@
#define MX6SL_PAD_WDOG_B__UART5_RI \
IOMUX_PAD(0x05A8, 0x02A0, 2, 0x0000, 0, MX6SL_UART_PAD_CTRL)
#define MX6SL_PAD_WDOG_B__GPIO_3_18 \
- IOMUX_PAD(0x05A8, 0x02A0, 5, 0x0000, 0, NO_PAD_CTRL)
+ IOMUX_PAD(0x05A8, 0x02A0, 5, 0x0000, 0, MX6SL_KEYPAD_CTRL)
#define MX6SL_PAD_WDOG_B__OBSERVE_MUX_OUT_2 \
IOMUX_PAD(0x05A8, 0x02A0, 7, 0x0000, 0, NO_PAD_CTRL)