msm7627a: Fix keypad for QRD device

QRD devices has only two hardware keys, due to key mismatch with
surf key layout QRD device was always entering into recovery mode.
Added right keypad support for QRD.

Change-Id: If55561774e437d5dfa095000d1a6dd33c30957d6
diff --git a/target/msm7627a/keypad.c b/target/msm7627a/keypad.c
index 15aef13..4d9fde9 100644
--- a/target/msm7627a/keypad.c
+++ b/target/msm7627a/keypad.c
@@ -34,6 +34,8 @@
 #include <dev/ssbi.h>
 #include <dev/gpio_keypad.h>
 
+#define LINUX_MACHTYPE_7x27A_QRD 3756
+
 #define ARRAY_SIZE(x) (sizeof(x)/sizeof((x)[0]))
 
 /* don't turn this on without updating the ffa support */
@@ -42,7 +44,11 @@
 static unsigned int halibut_row_gpios[] = {31, 32, 33, 34, 35};
 static unsigned int halibut_col_gpios[] = {36, 37, 38, 39, 40};
 
+static unsigned int halibut_row_gpios_qrd[] = {31, 32};
+static unsigned int halibut_col_gpios_qrd[] = {36, 37};
+
 #define KEYMAP_INDEX(row, col) ((row)*ARRAY_SIZE(halibut_col_gpios) + (col))
+#define KEYMAP_INDEX_QRD(row, col) ((row)*ARRAY_SIZE(halibut_col_gpios_qrd) + (col))
 
 static const unsigned short halibut_keymap[ARRAY_SIZE(halibut_col_gpios) * ARRAY_SIZE(halibut_row_gpios)] = {
 	[KEYMAP_INDEX(0, 0)] = KEY_7,
@@ -76,7 +82,12 @@
 	[KEYMAP_INDEX(4, 4)] = KEY_VOLUMEDOWN,
 };
 
-static struct gpio_keypad_info halibut_keypad_info = {
+static const unsigned short halibut_keymap_qrd[ARRAY_SIZE(halibut_col_gpios_qrd) * ARRAY_SIZE(halibut_row_gpios_qrd)] = {
+	[KEYMAP_INDEX_QRD(0, 0)] = KEY_VOLUMEUP,
+	[KEYMAP_INDEX_QRD(0, 1)] = KEY_VOLUMEDOWN,
+};
+
+static struct gpio_keypad_info halibut_keypad_info_surf = {
 	.keymap		= halibut_keymap,
 	.output_gpios	= halibut_row_gpios,
 	.input_gpios	= halibut_col_gpios,
@@ -87,7 +98,23 @@
 	.flags		= GPIOKPF_DRIVE_INACTIVE,
 };
 
+static struct gpio_keypad_info halibut_keypad_info_qrd = {
+	.keymap 	= halibut_keymap_qrd,
+	.output_gpios	= halibut_row_gpios_qrd,
+	.input_gpios	= halibut_col_gpios_qrd,
+	.noutputs	= ARRAY_SIZE(halibut_row_gpios_qrd),
+	.ninputs	= ARRAY_SIZE(halibut_col_gpios_qrd),
+	.settle_time	= 5 /* msec */,
+	.poll_time	= 20 /* msec */,
+	.flags		= GPIOKPF_DRIVE_INACTIVE,
+};
 void keypad_init(void)
 {
-	gpio_keypad_init(&halibut_keypad_info);
+	unsigned int mach_id;
+	mach_id = board_machtype();
+
+	if (mach_id == LINUX_MACHTYPE_7x27A_QRD)
+		gpio_keypad_init(&halibut_keypad_info_qrd);
+	else
+		gpio_keypad_init(&halibut_keypad_info_surf);
 }