From a846a262efd0f4c6ccca4e11b2f0042aa01d9825 Mon Sep 17 00:00:00 2001 From: LiGang Date: Mon, 29 Oct 2012 13:02:10 +0800 Subject: 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 --- arch/arm/mach-mx6/board-mx6sl_common.h | 4 +-- arch/arm/mach-mx6/board-mx6sl_evk.c | 47 ++++++++++++++++++++++++++++ arch/arm/plat-mxc/include/mach/iomux-mx6sl.h | 2 +- 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) -- cgit v1.2.3