Merge "msm_shared: Minor changes to nand driver."
diff --git a/platform/msm8960/gpio.c b/platform/msm8960/gpio.c
old mode 100644
new mode 100755
index 58a582b..eb5aead
--- a/platform/msm8960/gpio.c
+++ b/platform/msm8960/gpio.c
@@ -80,7 +80,8 @@
 			ASSERT(0);
 		}
 	}
-	else if(board_platform_id() == APQ8064)
+	else if((board_platform_id() == APQ8064) ||
+			(board_platform_id() == APQ8064AB))
 	{
 		switch (id) {
 
@@ -214,6 +215,14 @@
 	PM8XXX_GPIO_OUTPUT(PM_GPIO(9), 0),
 };
 
+/* pm8917 GPIO configuration for MSM8930 keypad */
+static struct pm8xxx_gpio_init pm8917_keypad_gpios[] = {
+	/* keys GPIOs */
+	PM8XXX_GPIO_INPUT(PM_GPIO(27), PM_GPIO_PULL_UP_30),
+	PM8XXX_GPIO_INPUT(PM_GPIO(28), PM_GPIO_PULL_UP_30),
+	PM8XXX_GPIO_INPUT(PM_GPIO(36), PM_GPIO_PULL_UP_30),
+	PM8XXX_GPIO_INPUT(PM_GPIO(37), PM_GPIO_PULL_UP_30),
+};
 
 void msm8960_keypad_gpio_init()
 {
@@ -233,13 +242,26 @@
 {
 	int i = 0;
 	int num = 0;
+	struct pm8xxx_gpio_init *gpio_array;
+	uint32_t pmic_type;
 
-	num = ARRAY_SIZE(pm8038_keypad_gpios);
+	pmic_type = board_pmic_type();
+
+	if (pmic_type == PMIC_IS_PM8917)
+	{
+		num = ARRAY_SIZE(pm8917_keypad_gpios);
+		gpio_array = pm8917_keypad_gpios;
+	}
+	else
+	{
+		num = ARRAY_SIZE(pm8038_keypad_gpios);
+		gpio_array = pm8038_keypad_gpios;
+	}
 
 	for(i=0; i < num; i++)
 	{
-		pm8921_gpio_config(pm8038_keypad_gpios[i].gpio,
-							&(pm8038_keypad_gpios[i].config));
+		pm8921_gpio_config(gpio_array[i].gpio,
+							&(gpio_array[i].config));
 	}
 }
 
diff --git a/platform/msm_shared/smem.h b/platform/msm_shared/smem.h
old mode 100644
new mode 100755
index b43291a..1179739
--- a/platform/msm_shared/smem.h
+++ b/platform/msm_shared/smem.h
@@ -237,6 +237,10 @@
 	MSM8930AA = 142,
 	MSM8630AA = 143,
 	MSM8230AA = 144,
+	MDM9225   = 149,
+	MDM9225M  = 150,
+	MDM9625M  = 152,
+	APQ8064AB = 153, /* aka V2 PRIME */
 };
 
 enum platform {
diff --git a/target/msm8960/atags.c b/target/msm8960/atags.c
old mode 100644
new mode 100755
index 8142890..69141f0
--- a/target/msm8960/atags.c
+++ b/target/msm8960/atags.c
@@ -128,6 +128,7 @@
 
 	switch (platform_id) {
 		case APQ8064:
+		case APQ8064AB:
 			if(baseband == BASEBAND_MDM)
 			{
 				/* Use 8064 Fusion 3 memory map */
diff --git a/target/msm8960/init.c b/target/msm8960/init.c
old mode 100644
new mode 100755
index e1f67e1..0491a20
--- a/target/msm8960/init.c
+++ b/target/msm8960/init.c
@@ -124,8 +124,9 @@
 	{
 		msm8930_keypad_init();
 	}
-	else if( (platform_id == APQ8064) ||
-		 (platform_id == MPQ8064))
+	else if((platform_id == APQ8064) ||
+		    (platform_id == MPQ8064) ||
+		    (platform_id == APQ8064AB))
 	{
 		apq8064_keypad_init();
 	}
@@ -383,7 +384,7 @@
 		default:
 			target_id = LINUX_MACHTYPE_8064_MPQ_CDP;
 		}
-	} else if ((platform == APQ8064)) {
+	} else if ((platform == APQ8064) || (platform == APQ8064AB)) {
 		switch (platform_hw) {
 		case HW_PLATFORM_SURF:
 			target_id = LINUX_MACHTYPE_8064_CDP;
@@ -422,7 +423,7 @@
 		baseband = BASEBAND_SGLTE;
 	else if (platform == APQ8060)
 		baseband = BASEBAND_APQ;
-	else if (platform == APQ8064)
+	else if ((platform == APQ8064) || (platform == APQ8064AB))
 		baseband = BASEBAND_APQ;
 	else if (platform == MPQ8064)
 		baseband = BASEBAND_APQ;
diff --git a/target/msm8960/keypad.c b/target/msm8960/keypad.c
index e331606..b84780b 100644
--- a/target/msm8960/keypad.c
+++ b/target/msm8960/keypad.c
@@ -65,14 +65,28 @@
 	[KEYMAP_INDEX(0, 1)] = KEY_VOLUMEDOWN,	/* Volume key on the device/CDP */
 };
 
-unsigned int msm8930_keys_gpiomap[] = {
+unsigned int msm8930_keys_pm8038_gpiomap[] = {
 	[KEYMAP_INDEX(0, 0)] = PM_GPIO(3),	/* Volume key on the device/CDP */
 	[KEYMAP_INDEX(0, 1)] = PM_GPIO(8),	/* Volume key on the device/CDP */
 };
 
-struct qwerty_keypad_info msm8930_qwerty_keypad = {
+unsigned int msm8930_keys_pm8917_gpiomap[] = {
+	[KEYMAP_INDEX(0, 0)] = PM_GPIO(27),	/* Volume key on the device/CDP */
+	[KEYMAP_INDEX(0, 1)] = PM_GPIO(28),	/* Volume key on the device/CDP */
+};
+
+struct qwerty_keypad_info msm8930_pm8038_qwerty_keypad = {
 	.keymap = msm8930_qwerty_keymap,
-	.gpiomap = msm8930_keys_gpiomap,
+	.gpiomap = msm8930_keys_pm8038_gpiomap,
+	.mapsize = ARRAY_SIZE(msm8930_qwerty_keymap),
+	.key_gpio_get = &pm8921_gpio_get,
+	.settle_time = 5 /* msec */ ,
+	.poll_time = 20 /* msec */ ,
+};
+
+struct qwerty_keypad_info msm8930_pm8917_qwerty_keypad = {
+	.keymap = msm8930_qwerty_keymap,
+	.gpiomap = msm8930_keys_pm8917_gpiomap,
 	.mapsize = ARRAY_SIZE(msm8930_qwerty_keymap),
 	.key_gpio_get = &pm8921_gpio_get,
 	.settle_time = 5 /* msec */ ,
@@ -120,8 +134,18 @@
 
 void msm8930_keypad_init(void)
 {
+	uint32_t pm_type = board_pmic_type();
+
 	msm8930_keypad_gpio_init();
-	ssbi_gpio_keypad_init(&msm8930_qwerty_keypad);
+
+	if (pm_type == PMIC_IS_PM8917)
+	{
+		ssbi_gpio_keypad_init(&msm8930_pm8917_qwerty_keypad);
+	}
+	else
+	{
+		ssbi_gpio_keypad_init(&msm8930_pm8038_qwerty_keypad);
+	}
 }
 
 void apq8064_keypad_init(void)