From patchwork Wed Sep 9 11:11:44 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?b?w6zigJPigJjDrMKn4oCew6zigJ7CsQ==?= X-Patchwork-Id: 46353 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 n89BI4Vq004007 for ; Wed, 9 Sep 2009 11:18:04 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752503AbZIILRg (ORCPT ); Wed, 9 Sep 2009 07:17:36 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1752829AbZIILRg (ORCPT ); Wed, 9 Sep 2009 07:17:36 -0400 Received: from ganesha.gnumonks.org ([213.95.27.120]:40177 "EHLO ganesha.gnumonks.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752503AbZIILRf (ORCPT ); Wed, 9 Sep 2009 07:17:35 -0400 Received: from uucp by ganesha.gnumonks.org with local-bsmtp (Exim 4.63) (envelope-from ) id 1MlLBB-0000XV-2X; Wed, 09 Sep 2009 13:17:37 +0200 Received: from [12.23.106.154] (helo=localhost.localdomain) by meercat.kr.gnumonks.org with esmtp (Exim 4.68) (envelope-from ) id 1MlKzQ-0001uA-CV; Wed, 09 Sep 2009 20:05:28 +0900 From: jsgood.yang@samsung.com To: dmitry.torokhov@gmail.com, ben-linux@fluff.org, linux-input@vger.kernel.org, linux-arm-kernel@lists.infradead.org Cc: Jinsung Yang , Kyeongil Kim Subject: [PATCH 4/4] [ARM][S3C] Add support keypad platform data Date: Wed, 9 Sep 2009 20:11:44 +0900 Message-Id: <1252494704-17895-1-git-send-email-jsgood.yang@samsung.com> X-Mailer: git-send-email 1.6.2.5 Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org From: Jinsung Yang This patch contains smdk6410 keypad platform data which includes smdk6410 evalutation QWERTY keyboard map and gpio configuration function. Signed-off-by: Jinsung Yang Signed-off-by: Kyeongil Kim --- arch/arm/mach-s3c6410/mach-smdk6410.c | 50 +++++++++++++++++++++++++++++++++ 1 files changed, 50 insertions(+), 0 deletions(-) diff --git a/arch/arm/mach-s3c6410/mach-smdk6410.c b/arch/arm/mach-s3c6410/mach-smdk6410.c index bc9a7de..8fb3116 100644 --- a/arch/arm/mach-s3c6410/mach-smdk6410.c +++ b/arch/arm/mach-s3c6410/mach-smdk6410.c @@ -25,6 +25,7 @@ #include #include #include +#include #ifdef CONFIG_SMDK6410_WM1190_EV1 #include @@ -50,6 +51,7 @@ #include #include #include +#include #include #include @@ -184,6 +186,7 @@ static struct platform_device *smdk6410_devices[] __initdata = { &s3c_device_fb, &s3c_device_usb, &s3c_device_usb_hsotg, + &s3c_device_keypad, &smdk6410_lcd_powerdev, &smdk6410_smsc911x, @@ -337,6 +340,50 @@ static struct i2c_board_info i2c_devs1[] __initdata = { { I2C_BOARD_INFO("24c128", 0x57), }, /* Samsung S524AD0XD1 */ }; +static unsigned short smdk6410_keycode[] = { + KEY_RESERVED, KEY_RESERVED, KEY_1, KEY_Q, KEY_A, KEY_RESERVED, + KEY_RESERVED, KEY_LEFT, KEY_RESERVED, KEY_RESERVED, KEY_2, KEY_W, + KEY_S, KEY_Z, KEY_RIGHT, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, + KEY_3, KEY_E, KEY_D, KEY_X, KEY_RESERVED, KEY_UP, KEY_RESERVED, + KEY_RESERVED, KEY_4, KEY_R, KEY_F, KEY_C, KEY_RESERVED, KEY_RESERVED, + KEY_RESERVED, KEY_O, KEY_5, KEY_T, KEY_G, KEY_V, KEY_DOWN, + KEY_BACKSPACE, KEY_P, KEY_0, KEY_6, KEY_Y, KEY_H, KEY_SPACE, + KEY_RESERVED, KEY_RESERVED, KEY_M, KEY_L, KEY_7, KEY_U, KEY_J, KEY_N, + KEY_RESERVED, KEY_ENTER, KEY_LEFTSHIFT, KEY_9, KEY_8, KEY_I, KEY_K, + KEY_B, KEY_RESERVED, KEY_COMMA, +}; + +static struct s3c_platform_keypad keypad_data __initdata = { + .nr_rows = 8, + .nr_cols = 8, + .max_keys = 64, + .max_masks = 32, + .delay = 50, + .keymap = smdk6410_keycode, +}; + +static void s3c_keypad_cfg_gpio(int rows, int columns) +{ + unsigned int gpio; + unsigned int end; + + end = S3C64XX_GPK(8 + rows); + + /* Set all the necessary GPK pins to special-function 0 */ + for (gpio = S3C64XX_GPK(8); gpio < end; gpio++) { + s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(3)); + s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE); + } + + end = S3C64XX_GPL(0 + columns); + + /* Set all the necessary GPK pins to special-function 0 */ + for (gpio = S3C64XX_GPL(0); gpio < end; gpio++) { + s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(3)); + s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE); + } +} + static void __init smdk6410_map_io(void) { u32 tmp; @@ -371,6 +418,9 @@ static void __init smdk6410_machine_init(void) i2c_register_board_info(0, i2c_devs0, ARRAY_SIZE(i2c_devs0)); i2c_register_board_info(1, i2c_devs1, ARRAY_SIZE(i2c_devs1)); + s3c_keypad_set_platdata(&keypad_data); + s3c_keypad_cfg_gpio(keypad_data.nr_rows, keypad_data.nr_cols); + platform_add_devices(smdk6410_devices, ARRAY_SIZE(smdk6410_devices)); }