msm:8060: dragonboard keypad support

config dragonboard keypad

Signed-off-by: Zhang Chang Ken <kenz@codeaurora.org>
diff --git a/arch/arm/mach-msm/board-msm8x60.c b/arch/arm/mach-msm/board-msm8x60.c
index 472e5d0..dd85981 100644
--- a/arch/arm/mach-msm/board-msm8x60.c
+++ b/arch/arm/mach-msm/board-msm8x60.c
@@ -5279,6 +5279,36 @@
 	KEY(5, 4, KEY_MENU),	  /* Center switch: MIC */
 };
 
+static const unsigned int dragon_keymap[] = {
+	KEY(0, 0, KEY_MENU),
+	KEY(0, 2, KEY_1),
+	KEY(0, 3, KEY_4),
+	KEY(0, 4, KEY_7),
+
+	KEY(1, 0, KEY_UP),
+	KEY(1, 1, KEY_LEFT),
+	KEY(1, 2, KEY_DOWN),
+	KEY(1, 3, KEY_5),
+	KEY(1, 4, KEY_8),
+
+	KEY(2, 0, KEY_HOME),
+	KEY(2, 1, KEY_REPLY),
+	KEY(2, 2, KEY_2),
+	KEY(2, 3, KEY_6),
+	KEY(2, 4, KEY_0),
+
+	KEY(3, 0, KEY_VOLUMEUP),
+	KEY(3, 1, KEY_RIGHT),
+	KEY(3, 2, KEY_3),
+	KEY(3, 3, KEY_9),
+	KEY(3, 4, KEY_SWITCHVIDEOMODE),
+
+	KEY(4, 0, KEY_VOLUMEDOWN),
+	KEY(4, 1, KEY_BACK),
+	KEY(4, 2, KEY_CAMERA),
+	KEY(4, 3, KEY_KBDILLUMTOGGLE),
+};
+
 static struct resource resources_keypad[] = {
 	{
 		.start	= PM8058_KEYPAD_IRQ(PM8058_IRQ_BASE),
@@ -5311,6 +5341,24 @@
 	.keymap_data		= &ffa_keymap_data,
 };
 
+static struct matrix_keymap_data dragon_keymap_data = {
+	.keymap_size = ARRAY_SIZE(dragon_keymap),
+	.keymap = dragon_keymap,
+};
+
+static struct pmic8058_keypad_data dragon_keypad_data = {
+	.input_name = "dragon-keypad",
+	.input_phys_device = "dragon-keypad/input0",
+	.num_rows = 6,
+	.num_cols = 5,
+	.rows_gpio_start = 8,
+	.cols_gpio_start = 0,
+	.debounce_ms = {8, 10},
+	.scan_delay_ms = 32,
+	.row_hold_ns = 91500,
+	.wakeup = 1,
+	.keymap_data = &dragon_keymap_data,
+};
 static const unsigned int fluid_keymap[] = {
 	KEY(0, 0, KEY_FN_F1),	 /* LS - PUSH1 */
 	KEY(0, 1, KEY_UP),	 /* NAV - UP */
@@ -9709,6 +9757,11 @@
 			platform_data = &fluid_keypad_data;
 		pm8058_platform_data.sub_devices[PM8058_SUBDEV_KPD].pdata_size
 			= sizeof(fluid_keypad_data);
+	} else if (machine_is_msm8x60_dragon()) {
+		pm8058_platform_data.sub_devices[PM8058_SUBDEV_KPD].
+			platform_data = &dragon_keypad_data;
+		pm8058_platform_data.sub_devices[PM8058_SUBDEV_KPD].pdata_size
+			= sizeof(dragon_keypad_data);
 	} else {
 		pm8058_platform_data.sub_devices[PM8058_SUBDEV_KPD].
 			platform_data = &ffa_keypad_data;