OMAP4: keypad: Add the board support
authorSyed Rafiuddin <rafiuddin.syed@ti.com>
Mon, 27 Dec 2010 05:51:45 +0000 (05:51 +0000)
committerTony Lindgren <tony@atomide.com>
Thu, 17 Feb 2011 21:42:10 +0000 (13:42 -0800)
-Add the platform changes for the keypad driver
-Register keyboard device with hwmod framework.

Signed-off-by: Syed Rafiuddin <rafiuddin.syed@ti.com>
Signed-off-by: Abraham Arce <x0066660@ti.com>
Signed-off-by: Shubhrajyoti D <shubhrajyoti@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
arch/arm/mach-omap2/board-4430sdp.c
arch/arm/mach-omap2/devices.c

index 12d99e582cd651864b289ed70df1131191f5a488..dcc8b27e303330d16fc384d2c88a1b3abb86d2b0 100644 (file)
@@ -35,6 +35,7 @@
 #include <plat/common.h>
 #include <plat/usb.h>
 #include <plat/mmc.h>
+#include <plat/omap4-keypad.h>
 
 #include "mux.h"
 #include "hsmmc.h"
 #define OMAP4_SFH7741_SENSOR_OUTPUT_GPIO       184
 #define OMAP4_SFH7741_ENABLE_GPIO              188
 
+static const int sdp4430_keymap[] = {
+       KEY(0, 0, KEY_E),
+       KEY(0, 1, KEY_R),
+       KEY(0, 2, KEY_T),
+       KEY(0, 3, KEY_HOME),
+       KEY(0, 4, KEY_F5),
+       KEY(0, 5, KEY_UNKNOWN),
+       KEY(0, 6, KEY_I),
+       KEY(0, 7, KEY_LEFTSHIFT),
+
+       KEY(1, 0, KEY_D),
+       KEY(1, 1, KEY_F),
+       KEY(1, 2, KEY_G),
+       KEY(1, 3, KEY_SEND),
+       KEY(1, 4, KEY_F6),
+       KEY(1, 5, KEY_UNKNOWN),
+       KEY(1, 6, KEY_K),
+       KEY(1, 7, KEY_ENTER),
+
+       KEY(2, 0, KEY_X),
+       KEY(2, 1, KEY_C),
+       KEY(2, 2, KEY_V),
+       KEY(2, 3, KEY_END),
+       KEY(2, 4, KEY_F7),
+       KEY(2, 5, KEY_UNKNOWN),
+       KEY(2, 6, KEY_DOT),
+       KEY(2, 7, KEY_CAPSLOCK),
+
+       KEY(3, 0, KEY_Z),
+       KEY(3, 1, KEY_KPPLUS),
+       KEY(3, 2, KEY_B),
+       KEY(3, 3, KEY_F1),
+       KEY(3, 4, KEY_F8),
+       KEY(3, 5, KEY_UNKNOWN),
+       KEY(3, 6, KEY_O),
+       KEY(3, 7, KEY_SPACE),
+
+       KEY(4, 0, KEY_W),
+       KEY(4, 1, KEY_Y),
+       KEY(4, 2, KEY_U),
+       KEY(4, 3, KEY_F2),
+       KEY(4, 4, KEY_VOLUMEUP),
+       KEY(4, 5, KEY_UNKNOWN),
+       KEY(4, 6, KEY_L),
+       KEY(4, 7, KEY_LEFT),
+
+       KEY(5, 0, KEY_S),
+       KEY(5, 1, KEY_H),
+       KEY(5, 2, KEY_J),
+       KEY(5, 3, KEY_F3),
+       KEY(5, 4, KEY_F9),
+       KEY(5, 5, KEY_VOLUMEDOWN),
+       KEY(5, 6, KEY_M),
+       KEY(5, 7, KEY_RIGHT),
+
+       KEY(6, 0, KEY_Q),
+       KEY(6, 1, KEY_A),
+       KEY(6, 2, KEY_N),
+       KEY(6, 3, KEY_BACK),
+       KEY(6, 4, KEY_BACKSPACE),
+       KEY(6, 5, KEY_UNKNOWN),
+       KEY(6, 6, KEY_P),
+       KEY(6, 7, KEY_UP),
+
+       KEY(7, 0, KEY_PROG1),
+       KEY(7, 1, KEY_PROG2),
+       KEY(7, 2, KEY_PROG3),
+       KEY(7, 3, KEY_PROG4),
+       KEY(7, 4, KEY_F4),
+       KEY(7, 5, KEY_UNKNOWN),
+       KEY(7, 6, KEY_OK),
+       KEY(7, 7, KEY_DOWN),
+};
+
+static struct matrix_keymap_data sdp4430_keymap_data = {
+       .keymap                 = sdp4430_keymap,
+       .keymap_size            = ARRAY_SIZE(sdp4430_keymap),
+};
+
+static struct omap4_keypad_platform_data sdp4430_keypad_data = {
+       .keymap_data            = &sdp4430_keymap_data,
+       .rows                   = 8,
+       .cols                   = 8,
+};
 static struct gpio_led sdp4430_gpio_leds[] = {
        {
                .name   = "omap4:green:debug0",
@@ -593,6 +678,10 @@ static void __init omap_4430sdp_init(void)
                spi_register_board_info(sdp4430_spi_board_info,
                                ARRAY_SIZE(sdp4430_spi_board_info));
        }
+
+       status = omap4_keyboard_init(&sdp4430_keypad_data);
+       if (status)
+               pr_err("Keypad initialization failed: %d\n", status);
 }
 
 static void __init omap_4430sdp_map_io(void)
index e0f0ef952bc980138e142315bbca008b29419ed8..8800486f946711460406a9bbc175c3afe5f61c40 100644 (file)
@@ -30,6 +30,7 @@
 #include <plat/dma.h>
 #include <plat/omap_hwmod.h>
 #include <plat/omap_device.h>
+#include <plat/omap4-keypad.h>
 
 #include "mux.h"
 #include "control.h"
@@ -141,6 +142,46 @@ static inline void omap_init_camera(void)
 }
 #endif
 
+struct omap_device_pm_latency omap_keyboard_latency[] = {
+       {
+               .deactivate_func = omap_device_idle_hwmods,
+               .activate_func   = omap_device_enable_hwmods,
+               .flags = OMAP_DEVICE_LATENCY_AUTO_ADJUST,
+       },
+};
+
+int __init omap4_keyboard_init(struct omap4_keypad_platform_data
+                                               *sdp4430_keypad_data)
+{
+       struct omap_device *od;
+       struct omap_hwmod *oh;
+       struct omap4_keypad_platform_data *keypad_data;
+       unsigned int id = -1;
+       char *oh_name = "kbd";
+       char *name = "omap4-keypad";
+
+       oh = omap_hwmod_lookup(oh_name);
+       if (!oh) {
+               pr_err("Could not look up %s\n", oh_name);
+               return -ENODEV;
+       }
+
+       keypad_data = sdp4430_keypad_data;
+
+       od = omap_device_build(name, id, oh, keypad_data,
+                       sizeof(struct omap4_keypad_platform_data),
+                       omap_keyboard_latency,
+                       ARRAY_SIZE(omap_keyboard_latency), 0);
+
+       if (IS_ERR(od)) {
+               WARN(1, "Cant build omap_device for %s:%s.\n",
+                                               name, oh->name);
+               return PTR_ERR(od);
+       }
+
+       return 0;
+}
+
 #if defined(CONFIG_OMAP_MBOX_FWK) || defined(CONFIG_OMAP_MBOX_FWK_MODULE)
 
 #define MBOX_REG_SIZE   0x120