Merge "mdm9x25: update shared IMEM for V2 H/W"
diff --git a/dev/pmic/pm8x41/include/pm8x41.h b/dev/pmic/pm8x41/include/pm8x41.h
index c199011..eada6cc 100644
--- a/dev/pmic/pm8x41/include/pm8x41.h
+++ b/dev/pmic/pm8x41/include/pm8x41.h
@@ -61,6 +61,8 @@
 
 #define PON_PSHOLD_WARM_RESET   0x1
 
+#define PMIC_VERSION_V2         1
+
 struct pm8x41_gpio {
 	int direction;
 	int output_buffer;
@@ -82,6 +84,7 @@
 void pm8x41_reset_configure(uint8_t);
 int pm8x41_ldo_set_voltage(const char *, uint32_t);
 int pm8x41_ldo_control(const char *, uint8_t);
+uint8_t pm8x41_get_pmic_rev();
 
 struct pm8x41_ldo {
 	const char *name;
diff --git a/dev/pmic/pm8x41/include/pm8x41_hw.h b/dev/pmic/pm8x41/include/pm8x41_hw.h
index 470e02b..86cfee5 100644
--- a/dev/pmic/pm8x41/include/pm8x41_hw.h
+++ b/dev/pmic/pm8x41/include/pm8x41_hw.h
@@ -35,6 +35,7 @@
 /* SMBB bit values */
 #define BOOT_DONE_BIT                         7
 
+#define REVID_REVISION4                       0x103
 
 /* GPIO Registers */
 #define GPIO_PERIPHERAL_BASE                  0xC000
diff --git a/dev/pmic/pm8x41/pm8x41.c b/dev/pmic/pm8x41/pm8x41.c
index f28dd91..62014ad 100644
--- a/dev/pmic/pm8x41/pm8x41.c
+++ b/dev/pmic/pm8x41/pm8x41.c
@@ -344,3 +344,9 @@
 
 	return 0;
 }
+
+uint8_t pm8x41_get_pmic_rev()
+{
+	return REG_READ(REVID_REVISION4);
+}
+
diff --git a/platform/msm_shared/smem.h b/platform/msm_shared/smem.h
index 846ebf5..2920ba9 100755
--- a/platform/msm_shared/smem.h
+++ b/platform/msm_shared/smem.h
@@ -266,6 +266,7 @@
 	HW_PLATFORM_RUMI   = 15,
 	HW_PLATFORM_VIRTIO = 16,
 	HW_PLATFORM_BTS = 19,
+	HW_PLATFORM_DMA = 22,
 	HW_PLATFORM_32BITS = 0x7FFFFFFF,
 };
 
diff --git a/target/copper/init.c b/target/copper/init.c
index 79f7b81..e60fbb7 100644
--- a/target/copper/init.c
+++ b/target/copper/init.c
@@ -98,7 +98,10 @@
 uint32_t target_volume_down()
 {
 	/* Volume down button is tied in with RESIN on MSM8974. */
-	return pm8x41_resin_bark_workaround_status();
+	if (pm8x41_get_pmic_rev() == PMIC_VERSION_V2)
+		return pm8x41_resin_bark_workaround_status();
+	else
+		return pm8x41_resin_status();
 }
 
 static void target_keystatus()
diff --git a/target/msm8960/include/target/board.h b/target/msm8960/include/target/board.h
index 1e2606a..9a6f150 100644
--- a/target/msm8960/include/target/board.h
+++ b/target/msm8960/include/target/board.h
@@ -60,5 +60,6 @@
 #define LINUX_MACHTYPE_8064_MPQ_HRD 3994
 #define LINUX_MACHTYPE_8064_MPQ_DTV 3995
 #define LINUX_MACHTYPE_8064_EP      3996
+#define LINUX_MACHTYPE_8064_MPQ_DMA 4511
 
 #endif
diff --git a/target/msm8960/init.c b/target/msm8960/init.c
index 912983b..cf57250 100755
--- a/target/msm8960/init.c
+++ b/target/msm8960/init.c
@@ -308,6 +308,7 @@
 	case LINUX_MACHTYPE_8064_MPQ_CDP:
 	case LINUX_MACHTYPE_8064_MPQ_HRD:
 	case LINUX_MACHTYPE_8064_MPQ_DTV:
+	case LINUX_MACHTYPE_8064_MPQ_DMA:
 		uart_dm_init(5, 0x1A200000, 0x1A240000);
 		break;
 
@@ -397,6 +398,9 @@
 		case HW_PLATFORM_DTV:
 			target_id = LINUX_MACHTYPE_8064_MPQ_DTV;
 			break;
+		case HW_PLATFORM_DMA:
+			target_id = LINUX_MACHTYPE_8064_MPQ_DMA;
+			break;
 		default:
 			target_id = LINUX_MACHTYPE_8064_MPQ_CDP;
 		}