From patchwork Thu Sep 17 20:07:40 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: miguel.aguilar@ridgerun.com X-Patchwork-Id: 48363 Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by demeter.kernel.org (8.14.2/8.14.2) with ESMTP id n8HK7nhF017811 for ; Thu, 17 Sep 2009 20:07:50 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752343AbZIQUHp (ORCPT ); Thu, 17 Sep 2009 16:07:45 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1752375AbZIQUHp (ORCPT ); Thu, 17 Sep 2009 16:07:45 -0400 Received: from mail.navvo.net ([74.208.67.6]:53424 "EHLO mail.navvo.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752321AbZIQUHo (ORCPT ); Thu, 17 Sep 2009 16:07:44 -0400 Received: from [201.198.127.70] (helo=localhost.localdomain) by mail.navvo.net with esmtpa (Exim 4.63) (envelope-from ) id 1MoNGc-0000vL-EH; Thu, 17 Sep 2009 15:07:48 -0500 From: miguel.aguilar@ridgerun.com To: nsnehaprabha@ti.com, davinci-linux-open-source@linux.davincidsp.com, linux-input@vger.kernel.org Cc: todd.fischer@ridgerun.com, diego.dompe@ridgerun.com, clark.becker@ridgerun.com, santiago.nunez@ridgerun.com, Miguel Aguilar Date: Thu, 17 Sep 2009 14:07:40 -0600 Message-Id: <1253218060-11604-1-git-send-email-miguel.aguilar@ridgerun.com> X-Mailer: git-send-email 1.6.0.4 X-SA-Exim-Connect-IP: 201.198.127.70 X-SA-Exim-Mail-From: miguel.aguilar@ridgerun.com X-Spam-Checker-Version: SpamAssassin 3.1.7-deb (2006-10-05) on mail.navvo.net X-Spam-Level: X-Spam-Status: No, score=-3.3 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00, NO_REAL_NAME autolearn=ham version=3.1.7-deb Subject: [PATCH v3 2/2] Davinci: DM365: Enable keypad support for DM365 EVM X-SA-Exim-Version: 4.2.1 (built Tue, 09 Jan 2007 17:23:22 +0000) X-SA-Exim-Scanned: Yes (on mail.navvo.net) Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org From: Miguel Aguilar The general structures are defined at DM365 SoC file and the specific platform data structure for the EVM is defined defined at board file. This patch was tested on a DM365 EVM rev c. Signed-off-by: Miguel Aguilar --- arch/arm/configs/davinci_all_defconfig | 1 + arch/arm/mach-davinci/board-dm365-evm.c | 49 ++++++++++++++++++++++++++++ arch/arm/mach-davinci/dm365.c | 30 +++++++++++++++++ arch/arm/mach-davinci/include/mach/dm365.h | 5 +++ 4 files changed, 85 insertions(+), 0 deletions(-) diff --git a/arch/arm/configs/davinci_all_defconfig b/arch/arm/configs/davinci_all_defconfig index ec63c15..e994c83 100644 --- a/arch/arm/configs/davinci_all_defconfig +++ b/arch/arm/configs/davinci_all_defconfig @@ -763,6 +763,7 @@ CONFIG_KEYBOARD_GPIO=y # CONFIG_KEYBOARD_STOWAWAY is not set # CONFIG_KEYBOARD_SUNKBD is not set CONFIG_KEYBOARD_XTKBD=m +CONFIG_KEYBOARD_DAVINCI_DM365=m # CONFIG_INPUT_MOUSE is not set # CONFIG_INPUT_JOYSTICK is not set # CONFIG_INPUT_TABLET is not set diff --git a/arch/arm/mach-davinci/board-dm365-evm.c b/arch/arm/mach-davinci/board-dm365-evm.c index 77f815c..e0c0232 100644 --- a/arch/arm/mach-davinci/board-dm365-evm.c +++ b/arch/arm/mach-davinci/board-dm365-evm.c @@ -38,6 +38,7 @@ #include #include #include +#include static inline int have_imager(void) @@ -197,6 +198,53 @@ static struct davinci_i2c_platform_data i2c_pdata = { .bus_delay = 0 /* usec */, }; +/* Masks for the various keys on the DM365 EVM */ +#define KEY_DM365_KEY2 0 +#define KEY_DM365_LEFT 1 +#define KEY_DM365_EXIT 2 +#define KEY_DM365_DOWN 3 +#define KEY_DM365_ENTER 4 +#define KEY_DM365_UP 5 +#define KEY_DM365_KEY1 6 +#define KEY_DM365_RIGHT 7 +#define KEY_DM365_MENU 8 +#define KEY_DM365_REC 9 +#define KEY_DM365_REW 10 +#define KEY_DM365_SKIPMINUS 11 +#define KEY_DM365_STOP 12 +#define KEY_DM365_FF 13 +#define KEY_DM365_SKIPPLUL 14 +#define KEY_DM365_PLAYPAUSE 15 + +static int dm365evm_keymap[] = { + KEY_DM365_KEY2, + KEY_DM365_LEFT, + KEY_DM365_EXIT, + KEY_DM365_DOWN, + KEY_DM365_ENTER, + KEY_DM365_UP, + KEY_DM365_KEY1, + KEY_DM365_RIGHT, + KEY_DM365_MENU, + KEY_DM365_REC, + KEY_DM365_REW, + KEY_DM365_SKIPMINUS, + KEY_DM365_STOP, + KEY_DM365_FF, + KEY_DM365_SKIPPLUL, + KEY_DM365_PLAYPAUSE, + 0 +}; + +static struct davinci_kp_platform_data dm365evm_kp_data = { + .keymap = dm365evm_keymap, + .keymapsize = ARRAY_SIZE(dm365evm_keymap), + .rep = 1, + /* Scan period = strobe + interval */ + .strobe = 0x5, + .interval = 0x2, +}; + static int cpld_mmc_get_cd(int module) { if (!cpld) @@ -483,6 +531,7 @@ static __init void dm365_evm_init(void) evm_init_cpld(); dm365_init_asp(&dm365_evm_snd_data); + dm365_init_kp(&dm365evm_kp_data); } static __init void dm365_evm_irq_init(void) diff --git a/arch/arm/mach-davinci/dm365.c b/arch/arm/mach-davinci/dm365.c index 2674438..ddb60a1 100644 --- a/arch/arm/mach-davinci/dm365.c +++ b/arch/arm/mach-davinci/dm365.c @@ -33,6 +33,7 @@ #include #include #include +#include #include "clock.h" #include "mux.h" @@ -851,6 +852,28 @@ static struct map_desc dm365_io_desc[] = { }, }; +static struct resource dm365_kp_resources[] = { + { + /* registers */ + .start = DM365_KEYSCAN_BASE, + .end = DM365_KEYSCAN_BASE + SZ_1K - 1, + .flags = IORESOURCE_MEM, + }, + { + /* interrupt */ + .start = IRQ_DM365_KEYINT, + .end = IRQ_DM365_KEYINT, + .flags = IORESOURCE_IRQ, + }, +}; + +static struct platform_device dm365_kp_device = { + .name = "dm365_keypad", + .id = 0, + .num_resources = ARRAY_SIZE(dm365_kp_resources), + .resource = dm365_kp_resources, +}; + /* Contents of JTAG ID register used to identify exact cpu type */ static struct davinci_id dm365_ids[] = { { @@ -950,6 +973,13 @@ void __init dm365_init_asp(struct snd_platform_data *pdata) platform_device_register(&dm365_asp_device); } +void __init dm365_init_kp(struct davinci_kp_platform_data *pdata) +{ + davinci_cfg_reg(DM365_KEYPAD); + dm365_kp_device.dev.platform_data = pdata; + platform_device_register(&dm365_kp_device); +} + void __init dm365_init(void) { davinci_common_init(&davinci_soc_info_dm365); diff --git a/arch/arm/mach-davinci/include/mach/dm365.h b/arch/arm/mach-davinci/include/mach/dm365.h index 2291c0d..fa8f182 100644 --- a/arch/arm/mach-davinci/include/mach/dm365.h +++ b/arch/arm/mach-davinci/include/mach/dm365.h @@ -17,6 +17,7 @@ #include #include #include +#include #define DM365_EMAC_BASE (0x01D07000) #define DM365_EMAC_CNTRL_OFFSET (0x0000) @@ -25,7 +26,11 @@ #define DM365_EMAC_MDIO_OFFSET (0x4000) #define DM365_EMAC_CNTRL_RAM_SIZE (0x2000) +/* Base of keypad register bank */ +#define DM365_KEYSCAN_BASE (0x01C69400) + void __init dm365_init(void); void __init dm365_init_asp(struct snd_platform_data *pdata); +void __init dm365_init_kp(struct davinci_kp_platform_data *pdata); #endif /* __ASM_ARCH_DM365_H */