From: Dominic Curran <dcurran@ti.com>
To: linux-omap@vger.kernel.org
Subject: [PATCH 3/3] [OMAPZOOM] INPUT: Switch LDP to use both TWL4030 and GPIO keypad drivers
Date: Mon, 20 Oct 2008 14:46:19 -0500 [thread overview]
Message-ID: <200810201446.19658.dcurran@ti.com> (raw)
The LDP uses both TWL4030 and GPIO's for its keypad inputs.
This patch changes the LDP board file to make use of both the TWL4030
and GPIO keypad drivers.
Signed-off-by: Dominic Curran <dcurran@ti.com>
---
arch/arm/mach-omap2/board-ldp.c | 131 +++++++++++++++++++++++++--------------
1 files changed, 84 insertions(+), 47 deletions(-)
diff --git a/arch/arm/mach-omap2/board-ldp.c b/arch/arm/mach-omap2/board-ldp.c
index 47a0ba2..290d469 100644
--- a/arch/arm/mach-omap2/board-ldp.c
+++ b/arch/arm/mach-omap2/board-ldp.c
@@ -16,6 +16,7 @@
#include <linux/platform_device.h>
#include <linux/delay.h>
#include <linux/input.h>
+#include <linux/gpio_keys.h>
#include <linux/workqueue.h>
#include <linux/err.h>
#include <linux/clk.h>
@@ -226,15 +227,10 @@ static int ldp_twl4030_keymap[] = {
KEY(0, 0, KEY_1),
KEY(1, 0, KEY_2),
KEY(2, 0, KEY_3),
- KEY(3, 0, KEY_ENTER),
- KEY(4, 0, KEY_F1),
- KEY(5, 0, KEY_F2),
KEY(0, 1, KEY_4),
KEY(1, 1, KEY_5),
KEY(2, 1, KEY_6),
KEY(3, 1, KEY_F5),
- KEY(4, 1, KEY_F3),
- KEY(5, 1, KEY_F4),
KEY(0, 2, KEY_7),
KEY(1, 2, KEY_8),
KEY(2, 2, KEY_9),
@@ -242,62 +238,103 @@ static int ldp_twl4030_keymap[] = {
KEY(0, 3, KEY_F7),
KEY(1, 3, KEY_0),
KEY(2, 3, KEY_F8),
- KEY(0, 4, KEY_RIGHT),
- KEY(1, 4, KEY_UP),
- KEY(2, 4, KEY_DOWN),
- KEY(3, 4, KEY_LEFT),
KEY(5, 4, KEY_MUTE),
KEY(4, 4, KEY_VOLUMEUP),
KEY(5, 5, KEY_VOLUMEDOWN),
0
};
-#define GPIO_KEY(gpio, key) ((gpio<<16) | (key))
-
-static unsigned int ldp_omap_gpio_keymap[] = {
- GPIO_KEY(101, KEY_ENTER), /*select*/
- GPIO_KEY(102, KEY_F1), /*S7*/
- GPIO_KEY(103, KEY_F2), /*S3*/
- GPIO_KEY(104, KEY_F3), /*S1*/
- GPIO_KEY(105, KEY_F4), /*S2*/
- GPIO_KEY(106, KEY_LEFT), /*left*/
- GPIO_KEY(107, KEY_RIGHT), /*right*/
- GPIO_KEY(108, KEY_UP), /*up*/
- GPIO_KEY(109, KEY_DOWN), /*down*/
- 0
-};
-
-/* OMAP3430 LDP Keymaps:
- * OMAP LDP uses both TWL4030 GPIO's and OMAP GPIO's to get key presses.
- * This is why there are two keymaps:
- * - ldp_twl4030_keymap (TWL4030)
- * - ldp_omap_gpio_keymap (OMAP GPIO's)
- * Unfortunately the input subsystem requires all the keymaps to be
- * listed in one place (.keymap) in order for a key to be a valid input.
- * This is why some keys appear in both keymaps.
- * If a key does appear in both keymaps then its entry in
- * ldp_twl4030_keymap is purely to keep the input subsystem happy and
- * its row/col values have no meaning.
- */
-static struct omap_kp_platform_data ldp_kp_data = {
+static struct twl4030_keypad_data ldp_kp_twl4030_data = {
.rows = 6,
.cols = 6,
- .keymap = ldp_twl4030_keymap,
- .keymapsize = ARRAY_SIZE(ldp_twl4030_keymap),
+ .keymap = ldp_twl4030_keymap,
+ .keymapsize = ARRAY_SIZE(ldp_twl4030_keymap),
.rep = 1,
.irq = TWL4030_MODIRQ_KEYPAD,
- /* Use row_gpios as a way to pass the OMAP GPIO keymap pointer */
- .row_gpios = ldp_omap_gpio_keymap,
};
-static struct platform_device ldp_kp_device = {
- .name = "omap_twl4030keypad",
- .id = -1,
+
+static struct gpio_keys_button ldp_gpio_keys_buttons[] = {
+ [0] = {
+ .code = KEY_ENTER,
+ .gpio = 101,
+ .desc = "enter sw",
+ .active_low = 1,
+ .debounce_interval = 30,
+ },
+ [1] = {
+ .code = KEY_F1,
+ .gpio = 102,
+ .desc = "func 1",
+ .active_low = 1,
+ .debounce_interval = 30,
+ },
+ [2] = {
+ .code = KEY_F2,
+ .gpio = 103,
+ .desc = "func 2",
+ .active_low = 1,
+ .debounce_interval = 30,
+ },
+ [3] = {
+ .code = KEY_F3,
+ .gpio = 104,
+ .desc = "func 3",
+ .active_low = 1,
+ .debounce_interval = 30,
+ },
+ [4] = {
+ .code = KEY_F4,
+ .gpio = 105,
+ .desc = "func 4",
+ .active_low = 1,
+ .debounce_interval = 30,
+ },
+ [5] = {
+ .code = KEY_LEFT,
+ .gpio = 106,
+ .desc = "left sw",
+ .active_low = 1,
+ .debounce_interval = 30,
+ },
+ [6] = {
+ .code = KEY_RIGHT,
+ .gpio = 107,
+ .desc = "right sw",
+ .active_low = 1,
+ .debounce_interval = 30,
+ },
+ [7] = {
+ .code = KEY_UP,
+ .gpio = 108,
+ .desc = "up sw",
+ .active_low = 1,
+ .debounce_interval = 30,
+ },
+ [8] = {
+ .code = KEY_DOWN,
+ .gpio = 109,
+ .desc = "down sw",
+ .active_low = 1,
+ .debounce_interval = 30,
+ },
+};
+
+static struct gpio_keys_platform_data ldp_gpio_keys = {
+ .buttons = ldp_gpio_keys_buttons,
+ .nbuttons = ARRAY_SIZE(ldp_gpio_keys_buttons),
+ .rep = 1,
+};
+
+static struct platform_device ldp_gpio_keys_device = {
+ .name = "gpio-keys",
+ .id = -1,
.dev = {
- .platform_data = &ldp_kp_data,
+ .platform_data = &ldp_gpio_keys,
},
};
+
static int ts_gpio;
static int __init msecure_init(void)
@@ -444,7 +481,7 @@ static struct spi_board_info ldp_spi_board_info[] __initdata = {
static struct platform_device *ldp_devices[] __initdata = {
&ldp_smc911x_device,
- &ldp_kp_device,
+ &ldp_gpio_keys_device,
};
static inline void __init ldp_init_smc911x(void)
@@ -536,7 +573,7 @@ static struct twl4030_platform_data ldp_twldata = {
.madc = &ldp_madc_data,
.usb = &ldp_usb_data,
.gpio = &ldp_gpio_data,
- //.keypad = &sdp3430_kp_data,
+ .keypad = &ldp_kp_twl4030_data,
};
static struct i2c_board_info __initdata ldp_i2c_boardinfo[] = {
--
1.5.4.1
reply other threads:[~2008-10-20 19:46 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200810201446.19658.dcurran@ti.com \
--to=dcurran@ti.com \
--cc=linux-omap@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).