Merge "msm: camera: eeprom: Fix OOB condition for memory map count"
diff --git a/Documentation/devicetree/bindings/arm/msm/msm.txt b/Documentation/devicetree/bindings/arm/msm/msm.txt
index 4f8e4f5..67060d3 100644
--- a/Documentation/devicetree/bindings/arm/msm/msm.txt
+++ b/Documentation/devicetree/bindings/arm/msm/msm.txt
@@ -410,6 +410,6 @@
 compatible = "qcom,sdxpoorwills-atp"
 compatible = "qcom,sdxpoorwills-mtp"
 compatible = "qcom,sdxpoorwills-cdp"
-compatible = "qcom,sdxpoorwills-ttp"
-compatible = "qcom,sdxpoorwills-ccard"
+compatible = "qcom,sa415m-ttp"
+compatible = "qcom,sa415m-ccard"
 compatible = "qcom,mdm9607-ttp"
diff --git a/Documentation/devicetree/bindings/mhi/msm_mhi_dev.txt b/Documentation/devicetree/bindings/mhi/msm_mhi_dev.txt
index 3017468..ece30e4 100644
--- a/Documentation/devicetree/bindings/mhi/msm_mhi_dev.txt
+++ b/Documentation/devicetree/bindings/mhi/msm_mhi_dev.txt
@@ -31,6 +31,18 @@
 		MHI driver on the host. This property is required if iatu
 		property qcom,mhi-config-iatu is present.
 
+MSM MHI DEV NET
+
+MSM MHI DEV enables communication with the host over a PCIe link using the
+Network Interface.
+
+Required properties:
+  - compatible: should be "qcom,msm-mhi-dev-net" for MHI net device driver.
+
+Optional property:
+  - qcom,mhi-ethernet-interface;: If property is present use ethernet packet
+	parsing support.
+
 Example:
 
 	mhi: qcom,msm-mhi-dev {
@@ -44,3 +56,8 @@
 		qcom,mhi-ep-msi = <1>;
 		qcom,mhi-version = <0x1000000>;
 	};
+
+	qcom,mhi_net_dev {
+		compatible = "qcom,msm-mhi-dev-net";
+		qcom,mhi-ethernet-interface;
+	};
diff --git a/Documentation/devicetree/bindings/sound/aw8896.txt b/Documentation/devicetree/bindings/sound/aw8896.txt
index e74ce67..c96b367 100644
--- a/Documentation/devicetree/bindings/sound/aw8896.txt
+++ b/Documentation/devicetree/bindings/sound/aw8896.txt
@@ -6,7 +6,13 @@
 
   - reg : I2C address of the device
 
-  - reset-gpio: gpio used for HW reset
+  - reset-gpio : gpio used for HW reset
+
+  - dvdd-supply : Power supply for PA's dvdd
+
+  - dvdd-voltage : Minimum and maximum voltage in uV to set for power supply
+
+  - dvdd-current : dvdd's max current in uA
 
 Optional properties:
 
@@ -18,4 +24,7 @@
 		compatible = "awinic,i2c_smartpa";
 		reg = <0x34>;
 		reset-gpio = <&tlmm 68 0>;
+		dvdd-supply = <&pm660_l9>;
+		dvdd-voltage = <1800000 1800000>;
+		dvdd-current = <15000>;
 	};
diff --git a/arch/arm/boot/dts/qcom/Makefile b/arch/arm/boot/dts/qcom/Makefile
index 17524cf..ff0ae9a 100644
--- a/arch/arm/boot/dts/qcom/Makefile
+++ b/arch/arm/boot/dts/qcom/Makefile
@@ -3,7 +3,7 @@
 	sdxpoorwills-cdp.dtb \
 	sdxpoorwills-mtp.dtb \
 	sdxpoorwills-atp.dtb \
-	sdxpoorwills-v2-ttp.dtb \
+	sa415m-ttp.dtb \
 	sdxpoorwills-cdp-256.dtb \
 	sdxpoorwills-mtp-256.dtb \
 	sdxpoorwills-dualwifi-cdp.dtb \
@@ -16,9 +16,10 @@
 	sdxpoorwills-v2-cdp.dtb \
 	sdxpoorwills-v2-dualwifi-mtp.dtb \
 	sdxpoorwills-v2-dualwifi-cdp.dtb \
-	sdxpoorwills-ccard.dtb \
-	sdxpoorwills-ccard-pcie-ep.dtb \
-	sdxpoorwills-ccard-usb-ep.dtb \
+	sa415m-ccard.dtb \
+	sa415m-ccard-pcie-ep.dtb \
+	sa415m-ccard-usb-ep.dtb \
+	sa415m-ttp-usb-ep.dtb \
 	sdxpoorwills-v2-pcie-ep-mtp-256.dtb \
 	sdxpoorwills-v2-pcie-ep-mtp.dtb
 
diff --git a/arch/arm/boot/dts/qcom/pmxpoorwills.dtsi b/arch/arm/boot/dts/qcom/pmxpoorwills.dtsi
index 08e306d..fb88e76 100644
--- a/arch/arm/boot/dts/qcom/pmxpoorwills.dtsi
+++ b/arch/arm/boot/dts/qcom/pmxpoorwills.dtsi
@@ -60,16 +60,18 @@
 					<0x0 0xc2 0 IRQ_TYPE_NONE>,
 					<0x0 0xc3 0 IRQ_TYPE_NONE>,
 					<0x0 0xc4 0 IRQ_TYPE_NONE>,
-					<0x0 0xc5 0 IRQ_TYPE_NONE>;
+					<0x0 0xc5 0 IRQ_TYPE_NONE>,
+					<0x0 0xc8 0 IRQ_TYPE_NONE>;
 			interrupt-names = "pmxpoorwills_gpio1",
 					  "pmxpoorwills_gpio2",
 					  "pmxpoorwills_gpio3",
 					  "pmxpoorwills_gpio4",
 					  "pmxpoorwills_gpio5",
-					  "pmxpoorwills_gpio6";
+					  "pmxpoorwills_gpio6",
+					  "pmxpoorwills_gpio9";
 			gpio-controller;
 			#gpio-cells = <2>;
-			qcom,gpios-disallowed = <7 8 9>;
+			qcom,gpios-disallowed = <7 8>;
 		};
 
 		pmxpoorwills_rtc: qcom,pmxpoorwills_rtc {
diff --git a/arch/arm/boot/dts/qcom/sdxpoorwills-ccard-pcie-ep.dts b/arch/arm/boot/dts/qcom/sa415m-ccard-pcie-ep.dts
similarity index 90%
rename from arch/arm/boot/dts/qcom/sdxpoorwills-ccard-pcie-ep.dts
rename to arch/arm/boot/dts/qcom/sa415m-ccard-pcie-ep.dts
index c7bf2bd..c2a447b 100644
--- a/arch/arm/boot/dts/qcom/sdxpoorwills-ccard-pcie-ep.dts
+++ b/arch/arm/boot/dts/qcom/sa415m-ccard-pcie-ep.dts
@@ -12,11 +12,11 @@
 
 /dts-v1/;
 
-#include "sdxpoorwills-ccard.dtsi"
+#include "sa415m-ccard.dtsi"
 
 / {
 	model = "Qualcomm Technologies, Inc. SA415M CCARD PCIE-EP";
-	compatible = "qcom,sdxpoorwills-ccard",
+	compatible = "qcom,sa415m-ccard",
 		"qcom,sdxpoorwills", "qcom,ccard";
 	qcom,board-id = <25 1>, <25 0x101>;
 };
@@ -52,3 +52,7 @@
 &ipc_router_mhi_dev_xprt {
 	status = "okay";
 };
+
+&mhi_net_device {
+	status = "okay";
+};
diff --git a/arch/arm/boot/dts/qcom/sdxpoorwills-ccard-usb-ep.dts b/arch/arm/boot/dts/qcom/sa415m-ccard-usb-ep.dts
similarity index 89%
rename from arch/arm/boot/dts/qcom/sdxpoorwills-ccard-usb-ep.dts
rename to arch/arm/boot/dts/qcom/sa415m-ccard-usb-ep.dts
index 9f0764e..1cf3a55 100644
--- a/arch/arm/boot/dts/qcom/sdxpoorwills-ccard-usb-ep.dts
+++ b/arch/arm/boot/dts/qcom/sa415m-ccard-usb-ep.dts
@@ -12,11 +12,11 @@
 
 /dts-v1/;
 
-#include "sdxpoorwills-ccard.dtsi"
+#include "sa415m-ccard.dtsi"
 
 / {
 	model = "Qualcomm Technologies, Inc. SA415M CCARD USB-EP";
-	compatible = "qcom,sdxpoorwills-ccard",
+	compatible = "qcom,sa415m-ccard",
 		"qcom,sdxpoorwills", "qcom,ccard";
 	qcom,board-id = <25 2>, <25 0x102>;
 };
diff --git a/arch/arm/boot/dts/qcom/sdxpoorwills-ccard.dts b/arch/arm/boot/dts/qcom/sa415m-ccard.dts
similarity index 89%
rename from arch/arm/boot/dts/qcom/sdxpoorwills-ccard.dts
rename to arch/arm/boot/dts/qcom/sa415m-ccard.dts
index b9acf1c..a0212fc 100644
--- a/arch/arm/boot/dts/qcom/sdxpoorwills-ccard.dts
+++ b/arch/arm/boot/dts/qcom/sa415m-ccard.dts
@@ -12,11 +12,11 @@
 
 /dts-v1/;
 
-#include "sdxpoorwills-ccard.dtsi"
+#include "sa415m-ccard.dtsi"
 
 / {
 	model = "Qualcomm Technologies, Inc. SA415M CCARD";
-	compatible = "qcom,sdxpoorwills-ccard",
+	compatible = "qcom,sa415m-ccard",
 		"qcom,sdxpoorwills", "qcom,ccard";
 	qcom,board-id = <25 0>, <25 0x100>;
 };
diff --git a/arch/arm/boot/dts/qcom/sdxpoorwills-ccard.dtsi b/arch/arm/boot/dts/qcom/sa415m-ccard.dtsi
similarity index 93%
rename from arch/arm/boot/dts/qcom/sdxpoorwills-ccard.dtsi
rename to arch/arm/boot/dts/qcom/sa415m-ccard.dtsi
index d327aa3..aa708e6 100644
--- a/arch/arm/boot/dts/qcom/sdxpoorwills-ccard.dtsi
+++ b/arch/arm/boot/dts/qcom/sa415m-ccard.dtsi
@@ -10,7 +10,7 @@
  * GNU General Public License for more details.
  */
 
-#include "sdxpoorwills-ttp.dtsi"
+#include "sa415m-ttp.dtsi"
 #include "sdxpoorwills-v2.dtsi"
 
 &blsp1_uart2b_hs {
@@ -141,12 +141,13 @@
 	};
 };
 
-&pmxpoorwills_gpios {
-	a2b_cdc_sel {
-		a2b_cdc_sel_default: a2b_cdc_sel_default {
-			pins = "gpio1";
-			power-source = <1>;
-			output-high;
-		};
-	};
+&emac_hw {
+	/delete-property/ vreg_rgmii-supply;
+	pinctrl-names = "default";
+	pinctrl-0 = <&vreg_rgmii_off_default>;
+};
+
+&vreg_rgmii_io_pads {
+	regulator-min-microvolt = <1800000>;
+	regulator-max-microvolt = <1800000>;
 };
diff --git a/arch/arm/boot/dts/qcom/sdxpoorwills-v2-ttp.dts b/arch/arm/boot/dts/qcom/sa415m-ttp-usb-ep.dts
similarity index 81%
copy from arch/arm/boot/dts/qcom/sdxpoorwills-v2-ttp.dts
copy to arch/arm/boot/dts/qcom/sa415m-ttp-usb-ep.dts
index a686c4b..802e8319 100644
--- a/arch/arm/boot/dts/qcom/sdxpoorwills-v2-ttp.dts
+++ b/arch/arm/boot/dts/qcom/sa415m-ttp-usb-ep.dts
@@ -12,14 +12,14 @@
 
 /dts-v1/;
 
-#include "sdxpoorwills-ttp.dtsi"
+#include "sa415m-ttp.dtsi"
 #include "sdxpoorwills-v2.dtsi"
 
 / {
-	model = "Qualcomm Technologies, Inc. SDXPOORWILLS TTP V2";
-	compatible = "qcom,sdxpoorwills-ttp",
+	model = "Qualcomm Technologies, Inc. SA415M TTP USB-EP";
+	compatible = "qcom,sa415m-ttp",
 		"qcom,sdxpoorwills", "qcom,ttp";
-	qcom,board-id = <30 0x100>;
+	qcom,board-id = <30 0x102>;
 };
 
 &blsp1_uart2b_hs {
diff --git a/arch/arm/boot/dts/qcom/sdxpoorwills-v2-ttp.dts b/arch/arm/boot/dts/qcom/sa415m-ttp.dts
similarity index 84%
rename from arch/arm/boot/dts/qcom/sdxpoorwills-v2-ttp.dts
rename to arch/arm/boot/dts/qcom/sa415m-ttp.dts
index a686c4b..d83eb68 100644
--- a/arch/arm/boot/dts/qcom/sdxpoorwills-v2-ttp.dts
+++ b/arch/arm/boot/dts/qcom/sa415m-ttp.dts
@@ -12,12 +12,12 @@
 
 /dts-v1/;
 
-#include "sdxpoorwills-ttp.dtsi"
+#include "sa415m-ttp.dtsi"
 #include "sdxpoorwills-v2.dtsi"
 
 / {
-	model = "Qualcomm Technologies, Inc. SDXPOORWILLS TTP V2";
-	compatible = "qcom,sdxpoorwills-ttp",
+	model = "Qualcomm Technologies, Inc. SA415M TTP V2";
+	compatible = "qcom,sa415m-ttp",
 		"qcom,sdxpoorwills", "qcom,ttp";
 	qcom,board-id = <30 0x100>;
 };
diff --git a/arch/arm/boot/dts/qcom/sdxpoorwills-ttp.dtsi b/arch/arm/boot/dts/qcom/sa415m-ttp.dtsi
similarity index 96%
rename from arch/arm/boot/dts/qcom/sdxpoorwills-ttp.dtsi
rename to arch/arm/boot/dts/qcom/sa415m-ttp.dtsi
index c8fe492..e8fdc08 100644
--- a/arch/arm/boot/dts/qcom/sdxpoorwills-ttp.dtsi
+++ b/arch/arm/boot/dts/qcom/sa415m-ttp.dtsi
@@ -46,6 +46,14 @@
 	};
 };
 
+&i2c_3 {
+	eeprom@52 {
+		compatible = "atmel,24c128";
+		reg = <0x52>;
+		pagesize = <32>;
+	};
+};
+
 &i2c_4 {
 	status = "okay";
 
diff --git a/arch/arm/boot/dts/qcom/sdxpoorwills-pcie-ep-cdp-256.dtsi b/arch/arm/boot/dts/qcom/sdxpoorwills-pcie-ep-cdp-256.dtsi
index ba29301..1f07825 100644
--- a/arch/arm/boot/dts/qcom/sdxpoorwills-pcie-ep-cdp-256.dtsi
+++ b/arch/arm/boot/dts/qcom/sdxpoorwills-pcie-ep-cdp-256.dtsi
@@ -39,6 +39,10 @@
 	status = "okay";
 };
 
+&mhi_net_device {
+	status = "okay";
+};
+
 &restart_pshold {
 	qcom,force-warm-reboot;
 };
diff --git a/arch/arm/boot/dts/qcom/sdxpoorwills-pcie-ep-cdp.dtsi b/arch/arm/boot/dts/qcom/sdxpoorwills-pcie-ep-cdp.dtsi
index 43490bf..f139ba9 100644
--- a/arch/arm/boot/dts/qcom/sdxpoorwills-pcie-ep-cdp.dtsi
+++ b/arch/arm/boot/dts/qcom/sdxpoorwills-pcie-ep-cdp.dtsi
@@ -36,6 +36,10 @@
 	status = "okay";
 };
 
+&mhi_net_device {
+	status = "okay";
+};
+
 &restart_pshold {
 	qcom,force-warm-reboot;
 };
diff --git a/arch/arm/boot/dts/qcom/sdxpoorwills-pcie-ep-mtp-256.dtsi b/arch/arm/boot/dts/qcom/sdxpoorwills-pcie-ep-mtp-256.dtsi
index d2fe3be..14e70bc 100644
--- a/arch/arm/boot/dts/qcom/sdxpoorwills-pcie-ep-mtp-256.dtsi
+++ b/arch/arm/boot/dts/qcom/sdxpoorwills-pcie-ep-mtp-256.dtsi
@@ -39,6 +39,10 @@
 	status = "okay";
 };
 
+&mhi_net_device {
+	status = "okay";
+};
+
 &restart_pshold {
 	qcom,force-warm-reboot;
 };
diff --git a/arch/arm/boot/dts/qcom/sdxpoorwills-pcie.dtsi b/arch/arm/boot/dts/qcom/sdxpoorwills-pcie.dtsi
index 1907209..e0ecfaa 100644
--- a/arch/arm/boot/dts/qcom/sdxpoorwills-pcie.dtsi
+++ b/arch/arm/boot/dts/qcom/sdxpoorwills-pcie.dtsi
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 and
@@ -130,7 +130,6 @@
 		qcom,vreg-cx-voltage-level = <RPMH_REGULATOR_LEVEL_MAX
 						RPMH_REGULATOR_LEVEL_SVS 0>;
 
-		qcom,l0s-supported;
 		qcom,l1-supported;
 		qcom,l1ss-supported;
 		qcom,aux-clk-sync;
diff --git a/arch/arm/boot/dts/qcom/sdxpoorwills-pinctrl.dtsi b/arch/arm/boot/dts/qcom/sdxpoorwills-pinctrl.dtsi
index 8c11e09..09a6219 100644
--- a/arch/arm/boot/dts/qcom/sdxpoorwills-pinctrl.dtsi
+++ b/arch/arm/boot/dts/qcom/sdxpoorwills-pinctrl.dtsi
@@ -1755,6 +1755,14 @@
 };
 
 &pmxpoorwills_gpios {
+	a2b_cdc_sel {
+		a2b_cdc_sel_default: a2b_cdc_sel_default {
+			pins = "gpio1";
+			power-source = <1>;
+			output-high;
+		};
+	};
+
 	ambient_therm {
 		ambient_therm_default: ambient_therm_default {
 			pins = "gpio2";
@@ -1768,4 +1776,13 @@
 			bias-high-impedance;
 		};
 	};
+
+	vreg_rgmii_off {
+		vreg_rgmii_off_default: vreg_rgmii_off_default {
+			pins = "gpio9";
+			bias-pull-down;
+			output-disable;
+			input-enable;
+		};
+	};
 };
diff --git a/arch/arm/boot/dts/qcom/sdxpoorwills-regulator.dtsi b/arch/arm/boot/dts/qcom/sdxpoorwills-regulator.dtsi
index 7543f7c..70dc3ae 100644
--- a/arch/arm/boot/dts/qcom/sdxpoorwills-regulator.dtsi
+++ b/arch/arm/boot/dts/qcom/sdxpoorwills-regulator.dtsi
@@ -1,4 +1,4 @@
-/* Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 and
@@ -398,8 +398,8 @@
 	vreg_rgmii_io_pads: rgmii_io_pads_regulator {
 		compatible = "regulator-fixed";
 		regulator-name = "rgmii_io_pads";
-		regulator-min-microvolt = <1800000>;
-		regulator-max-microvolt = <1800000>;
+		regulator-min-microvolt = <2500000>;
+		regulator-max-microvolt = <2500000>;
 		regulator-enable-ramp-delay = <100>;
 		gpio = <&tlmm 83 GPIO_ACTIVE_HIGH>;
 		enable-active-high;
diff --git a/arch/arm/boot/dts/qcom/sdxpoorwills.dtsi b/arch/arm/boot/dts/qcom/sdxpoorwills.dtsi
index 02a1bf9..abbc8b5 100644
--- a/arch/arm/boot/dts/qcom/sdxpoorwills.dtsi
+++ b/arch/arm/boot/dts/qcom/sdxpoorwills.dtsi
@@ -520,6 +520,12 @@
 		status = "disabled";
 	};
 
+	mhi_net_device: qcom,mhi_net_dev {
+		compatible = "qcom,msm-mhi-dev-net";
+		qcom,mhi-ethernet-interface;
+		status = "disabled";
+	};
+
 	gdsc_emac: qcom,gdsc@147004 {
 		compatible = "qcom,gdsc";
 		regulator-name = "gdsc_emac";
diff --git a/arch/arm/configs/sdxpoorwills-auto-perf_defconfig b/arch/arm/configs/sdxpoorwills-auto-perf_defconfig
index f292555..1af9a91 100644
--- a/arch/arm/configs/sdxpoorwills-auto-perf_defconfig
+++ b/arch/arm/configs/sdxpoorwills-auto-perf_defconfig
@@ -65,7 +65,6 @@
 CONFIG_IPV6_MROUTE=y
 CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y
 CONFIG_IPV6_PIMSM_V2=y
-# CONFIG_ANDROID_PARANOID_NETWORK is not set
 CONFIG_NETFILTER=y
 CONFIG_NETFILTER_DEBUG=y
 CONFIG_NF_CONNTRACK=y
@@ -193,6 +192,7 @@
 CONFIG_BLK_DEV_LOOP=y
 CONFIG_BLK_DEV_RAM=y
 CONFIG_QSEECOM=y
+CONFIG_EEPROM_AT24=y
 CONFIG_SCSI=y
 CONFIG_BLK_DEV_SD=y
 CONFIG_CHR_DEV_SG=y
diff --git a/arch/arm/configs/sdxpoorwills-auto_defconfig b/arch/arm/configs/sdxpoorwills-auto_defconfig
index d5544bd..572c46b 100644
--- a/arch/arm/configs/sdxpoorwills-auto_defconfig
+++ b/arch/arm/configs/sdxpoorwills-auto_defconfig
@@ -66,7 +66,6 @@
 CONFIG_IPV6_MROUTE=y
 CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y
 CONFIG_IPV6_PIMSM_V2=y
-# CONFIG_ANDROID_PARANOID_NETWORK is not set
 CONFIG_NETFILTER=y
 CONFIG_NETFILTER_DEBUG=y
 CONFIG_NF_CONNTRACK=y
@@ -194,6 +193,7 @@
 CONFIG_BLK_DEV_LOOP=y
 CONFIG_BLK_DEV_RAM=y
 CONFIG_QSEECOM=y
+CONFIG_EEPROM_AT24=y
 CONFIG_SCSI=y
 CONFIG_BLK_DEV_SD=y
 CONFIG_CHR_DEV_SG=y
diff --git a/arch/arm/configs/sdxpoorwills-perf_defconfig b/arch/arm/configs/sdxpoorwills-perf_defconfig
index 4c48a1f..44eb38b 100644
--- a/arch/arm/configs/sdxpoorwills-perf_defconfig
+++ b/arch/arm/configs/sdxpoorwills-perf_defconfig
@@ -66,7 +66,6 @@
 CONFIG_IPV6_MROUTE=y
 CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y
 CONFIG_IPV6_PIMSM_V2=y
-# CONFIG_ANDROID_PARANOID_NETWORK is not set
 CONFIG_NETFILTER=y
 CONFIG_NETFILTER_DEBUG=y
 CONFIG_NF_CONNTRACK=y
diff --git a/arch/arm/configs/sdxpoorwills_defconfig b/arch/arm/configs/sdxpoorwills_defconfig
index f892b1a..2b02a48 100644
--- a/arch/arm/configs/sdxpoorwills_defconfig
+++ b/arch/arm/configs/sdxpoorwills_defconfig
@@ -68,7 +68,6 @@
 CONFIG_IPV6_MROUTE=y
 CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y
 CONFIG_IPV6_PIMSM_V2=y
-# CONFIG_ANDROID_PARANOID_NETWORK is not set
 CONFIG_NETFILTER=y
 CONFIG_NETFILTER_DEBUG=y
 CONFIG_NF_CONNTRACK=y
diff --git a/arch/arm64/boot/dts/qcom/sdm429-qrd-spyro-evt.dtsi b/arch/arm64/boot/dts/qcom/sdm429-qrd-spyro-evt.dtsi
index 78cd72f..eaa844b 100644
--- a/arch/arm64/boot/dts/qcom/sdm429-qrd-spyro-evt.dtsi
+++ b/arch/arm64/boot/dts/qcom/sdm429-qrd-spyro-evt.dtsi
@@ -592,8 +592,8 @@
 	/delete-property/qcom,cdc-us-eu-gpios;
 
 
-	asoc-codec = <&stub_codec>, <&msm_dig_codec>;
-	asoc-codec-names = "msm-stub-codec.1", "msm-dig-codec";
+	asoc-codec = <&stub_codec>, <&msm_dig_codec>, <&ext_smart_pa>;
+	asoc-codec-names = "msm-stub-codec.1", "msm-dig-codec", "ext-smart-pa";
 };
 
 &soc {
@@ -655,7 +655,7 @@
 };
 
 &i2c_2 {
-	aw8896_smartpa@34 {
+	ext_smart_pa: aw8896_smartpa@34 {
 		compatible = "awinic,aw8896_smartpa";
 		reg = <0x34>;
 		reset-gpio = <&tlmm 68 0>;
diff --git a/arch/arm64/boot/dts/qcom/sdm429.dtsi b/arch/arm64/boot/dts/qcom/sdm429.dtsi
index 06c54a1..b261860 100644
--- a/arch/arm64/boot/dts/qcom/sdm429.dtsi
+++ b/arch/arm64/boot/dts/qcom/sdm429.dtsi
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 and
@@ -220,6 +220,18 @@
 			<  400000000 1>,
 			<  533333333 3>;
 
+		qcom,speed5-bin-v0-c1 =
+			<          0 0>,
+			<  960000000 1>,
+			< 1305600000 1>,
+			< 1497600000 2>,
+			< 1708800000 3>;
+
+		qcom,speed5-bin-v0-cci =
+			<          0 0>,
+			<  400000000 1>,
+			<  533333333 3>;
+
 		#clock-cells = <1>;
 	};
 
diff --git a/arch/arm64/boot/dts/qcom/sdm439.dtsi b/arch/arm64/boot/dts/qcom/sdm439.dtsi
index e4e74cb..b42d18e 100644
--- a/arch/arm64/boot/dts/qcom/sdm439.dtsi
+++ b/arch/arm64/boot/dts/qcom/sdm439.dtsi
@@ -356,6 +356,26 @@
 		<          0 0>,
 		<  400000000 1>,
 		<  533333333 3>;
+
+	qcom,speed5-bin-v0-c0 =
+		<          0 0>,
+		<  768000000 1>,
+		<  998400000 1>,
+		< 1171200000 2>,
+		< 1305600000 3>,
+		< 1459200000 5>;
+
+	qcom,speed5-bin-v0-c1=
+		<          0 0>,
+		<  960000000 1>,
+		< 1305600000 1>,
+		< 1497600000 2>,
+		< 1708800000 3>;
+
+	qcom,speed5-bin-v0-cci =
+		<          0 0>,
+		<  400000000 1>,
+		<  533333333 3>;
 };
 
 &clock_gcc {
diff --git a/arch/arm64/boot/dts/qcom/sdm845-v2.1-rb3.dtsi b/arch/arm64/boot/dts/qcom/sdm845-v2.1-rb3.dtsi
index 1391080..9f3bd2b 100644
--- a/arch/arm64/boot/dts/qcom/sdm845-v2.1-rb3.dtsi
+++ b/arch/arm64/boot/dts/qcom/sdm845-v2.1-rb3.dtsi
@@ -21,14 +21,6 @@
 #include "sdm845-rb3.dtsi"
 #include "sdm845-audio-overlay.dtsi"
 
-&labibb {
-	status = "disabled";
-};
-
-&pmi8998_wled {
-	status = "disabled";
-};
-
 &qupv3_se3_i2c {
 	status = "disabled";
 };
@@ -41,10 +33,6 @@
 	status = "ok";
 };
 
-&ext_5v_boost {
-	status = "disabled";
-};
-
 &wil6210 {
 	status = "disabled";
 };
@@ -83,14 +71,6 @@
 	pins = "gpio11";
 };
 
-&sde_dp {
-	status = "disabled";
-};
-
-&mdss_mdp {
-	status = "disabled";
-};
-
 &soc {
 	qcom,qbt1000 {
 		compatible = "qcom,qbt1000";
@@ -99,6 +79,10 @@
 		qcom,ipc-gpio = <&tlmm 121 0>;
 		qcom,finger-detect-gpio = <&pm8998_gpios 4 0>;
 	};
+
+	qcom,rmnet-ipa {
+		 status="disabled";
+	};
 };
 
 &ssc_sensors {
@@ -193,3 +177,7 @@
 		};
 	};
 };
+
+&ipa_hw {
+	status="disabled";
+};
diff --git a/drivers/android/binder.c b/drivers/android/binder.c
index 01d5f5d..6107c03 100644
--- a/drivers/android/binder.c
+++ b/drivers/android/binder.c
@@ -70,12 +70,6 @@
 #include <linux/pid_namespace.h>
 #include <linux/security.h>
 #include <linux/spinlock.h>
-
-#ifdef CONFIG_ANDROID_BINDER_IPC_32BIT
-#define BINDER_IPC_32BIT 1
-#endif
-
-#include <uapi/linux/android/binder.h>
 #include "binder_alloc.h"
 #include "binder_trace.h"
 
diff --git a/drivers/android/binder_alloc.h b/drivers/android/binder_alloc.h
index b60d161..8db0962 100644
--- a/drivers/android/binder_alloc.h
+++ b/drivers/android/binder_alloc.h
@@ -22,6 +22,11 @@
 #include <linux/vmalloc.h>
 #include <linux/slab.h>
 #include <linux/list_lru.h>
+
+#ifdef CONFIG_ANDROID_BINDER_IPC_32BIT
+#define BINDER_IPC_32BIT 1
+#endif
+
 #include <uapi/linux/android/binder.h>
 
 extern struct list_lru binder_alloc_lru;
diff --git a/drivers/clk/msm/mdss/mdss-dsi-pll-12nm-util.c b/drivers/clk/msm/mdss/mdss-dsi-pll-12nm-util.c
index e502826..1baf534 100644
--- a/drivers/clk/msm/mdss/mdss-dsi-pll-12nm-util.c
+++ b/drivers/clk/msm/mdss/mdss-dsi-pll-12nm-util.c
@@ -900,7 +900,7 @@
 		rc = c->ops->set_rate(c, pll->vco_cached_rate);
 		if (rc) {
 			pr_err("index=%d vco_set_rate failed. rc=%d\n",
-					rc, pll->index);
+					pll->index, rc);
 			goto error;
 		}
 	}
diff --git a/drivers/misc/qseecom.c b/drivers/misc/qseecom.c
index 72e5031..1fcafc1 100644
--- a/drivers/misc/qseecom.c
+++ b/drivers/misc/qseecom.c
@@ -535,7 +535,7 @@
 			smc_id = TZ_OS_APP_SHUTDOWN_ID;
 			desc.arginfo = TZ_OS_APP_SHUTDOWN_ID_PARAM_ID;
 			desc.args[0] = req->app_id;
-			ret = __qseecom_scm_call2_locked(smc_id, &desc);
+			ret = scm_call2(smc_id, &desc);
 			break;
 		}
 		case QSEOS_APP_LOOKUP_COMMAND: {
diff --git a/drivers/platform/msm/mhi_dev/mhi_dev_net.c b/drivers/platform/msm/mhi_dev/mhi_dev_net.c
index d1f86a4..c78f20c 100644
--- a/drivers/platform/msm/mhi_dev/mhi_dev_net.c
+++ b/drivers/platform/msm/mhi_dev/mhi_dev_net.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 and
@@ -27,11 +27,13 @@
 #include <linux/spinlock.h>
 #include <linux/errno.h>
 #include <linux/ktime.h>
+#include <linux/platform_device.h>
+#include <linux/etherdevice.h>
 
 #include "mhi.h"
 
 #define MHI_NET_DRIVER_NAME  "mhi_dev_net_drv"
-#define MHI_NET_DEV_NAME     "mhi_dev_net%d"
+#define MHI_NET_DEV_NAME     "mhi_swip%d"
 #define MHI_NET_DEFAULT_MTU   8192
 #define MHI_NET_IPC_PAGES     (100)
 #define MHI_MAX_RX_REQ        (128)
@@ -90,6 +92,7 @@
 	u32 out_chan;
 	/* read channel - always odd */
 	u32 in_chan;
+	bool eth_iface;
 	struct mhi_dev_client *out_handle;
 	struct mhi_dev_client *in_handle;
 	/*process pendig packets */
@@ -113,6 +116,7 @@
 struct mhi_dev_net_ctxt {
 	struct mhi_dev_net_chan_attr chan_attr[MHI_MAX_SOFTWARE_CHANNELS];
 	struct mhi_dev_net_client *client_handle;
+	struct platform_device		*pdev;
 	void (*net_event_notifier)(struct mhi_dev_client_cb_reason *cb);
 };
 
@@ -247,8 +251,12 @@
 	unsigned long   flags;
 
 	skb->len = mreq->transfer_len;
-	skb->protocol =
-		mhi_dev_net_eth_type_trans(skb);
+
+	if (net_handle->eth_iface)
+		skb->protocol = eth_type_trans(skb, net_handle->dev);
+	else
+		skb->protocol = mhi_dev_net_eth_type_trans(skb);
+
 	skb_put(skb, mreq->transfer_len);
 	net_handle->dev->stats.rx_packets++;
 	skb->dev = net_handle->dev;
@@ -433,12 +441,15 @@
 	.ndo_change_mtu = mhi_dev_net_change_mtu,
 };
 
-static void mhi_dev_net_setup(struct net_device *dev)
+static void mhi_dev_net_rawip_setup(struct net_device *dev)
 {
 	dev->netdev_ops = &mhi_dev_net_ops_ip;
 	ether_setup(dev);
+	mhi_dev_net_log(MHI_INFO,
+			"mhi_dev_net Raw IP setup\n");
 
 	/* set this after calling ether_setup */
+	dev->header_ops = NULL;
 	dev->type = ARPHRD_RAWIP;
 	dev->hard_header_len = 0;
 	dev->mtu = MHI_NET_DEFAULT_MTU;
@@ -446,6 +457,14 @@
 	dev->flags &= ~(IFF_BROADCAST | IFF_MULTICAST);
 }
 
+static void mhi_dev_net_ether_setup(struct net_device *dev)
+{
+	dev->netdev_ops = &mhi_dev_net_ops_ip;
+	ether_setup(dev);
+	mhi_dev_net_log(MHI_INFO,
+			"mhi_dev_net Ethernet setup\n");
+}
+
 static int mhi_dev_net_enable_iface(struct mhi_dev_net_client *mhi_dev_net_ptr)
 {
 	int ret = 0;
@@ -462,12 +481,20 @@
 			"mhi_dev_net interface registration\n");
 	netdev = alloc_netdev(sizeof(struct mhi_dev_net_client),
 			MHI_NET_DEV_NAME, NET_NAME_PREDICTABLE,
-			mhi_dev_net_setup);
+			mhi_net_ctxt.client_handle->eth_iface ?
+			mhi_dev_net_ether_setup :
+			mhi_dev_net_rawip_setup);
 	if (!netdev) {
 		pr_err("Failed to allocate netdev for mhi_dev_net\n");
 		goto net_dev_alloc_fail;
 	}
 
+	if (mhi_net_ctxt.client_handle->eth_iface) {
+		eth_random_addr(netdev->dev_addr);
+		if (!is_valid_ether_addr(netdev->dev_addr))
+			return -EADDRNOTAVAIL;
+	}
+
 	mhi_dev_net_ctxt = netdev_priv(netdev);
 	mhi_dev_net_ptr->dev = netdev;
 	*mhi_dev_net_ctxt = mhi_dev_net_ptr;
@@ -621,6 +648,12 @@
 				"Failed to create IPC logging for mhi_dev_net\n");
 	mhi_net_ctxt.client_handle = mhi_net_client;
 
+	if (mhi_net_ctxt.pdev)
+		mhi_net_ctxt.client_handle->eth_iface =
+			of_property_read_bool
+			((&mhi_net_ctxt.pdev->dev)->of_node,
+				"qcom,mhi-ethernet-interface");
+
 	/*Process pending packet work queue*/
 	mhi_net_client->pending_pckt_wq =
 		create_singlethread_workqueue("pending_xmit_pckt_wq");
@@ -665,3 +698,47 @@
 	mhi_dev_net_close();
 }
 EXPORT_SYMBOL(mhi_dev_net_exit);
+
+static int mhi_dev_net_probe(struct platform_device *pdev)
+{
+	if (pdev->dev.of_node) {
+		mhi_net_ctxt.pdev = pdev;
+		mhi_dev_net_log(MHI_INFO,
+				"MHI Network probe success");
+	}
+
+	return 0;
+}
+
+static int mhi_dev_net_remove(struct platform_device *pdev)
+{
+	platform_set_drvdata(pdev, NULL);
+
+	return 0;
+}
+
+static const struct of_device_id mhi_dev_net_match_table[] = {
+	{	.compatible = "qcom,msm-mhi-dev-net" },
+	{}
+};
+
+static struct platform_driver mhi_dev_net_driver = {
+	.driver		= {
+		.name	= "qcom,msm-mhi-dev-net",
+		.of_match_table = mhi_dev_net_match_table,
+	},
+	.probe		= mhi_dev_net_probe,
+	.remove		= mhi_dev_net_remove,
+};
+
+static int __init mhi_dev_net_init(void)
+{
+	return platform_driver_register(&mhi_dev_net_driver);
+}
+subsys_initcall(mhi_dev_net_init);
+
+static void __exit mhi_dev_exit(void)
+{
+	platform_driver_unregister(&mhi_dev_net_driver);
+}
+module_exit(mhi_dev_net_exit);
diff --git a/drivers/usb/gadget/config.c b/drivers/usb/gadget/config.c
index 17a6077..9b9d31e 100644
--- a/drivers/usb/gadget/config.c
+++ b/drivers/usb/gadget/config.c
@@ -198,9 +198,13 @@
 void usb_free_all_descriptors(struct usb_function *f)
 {
 	usb_free_descriptors(f->fs_descriptors);
+	f->fs_descriptors = NULL;
 	usb_free_descriptors(f->hs_descriptors);
+	f->hs_descriptors = NULL;
 	usb_free_descriptors(f->ss_descriptors);
+	f->ss_descriptors = NULL;
 	usb_free_descriptors(f->ssp_descriptors);
+	f->ssp_descriptors = NULL;
 }
 EXPORT_SYMBOL_GPL(usb_free_all_descriptors);
 
diff --git a/include/linux/diagchar.h b/include/linux/diagchar.h
index 8371859..d33071c 100644
--- a/include/linux/diagchar.h
+++ b/include/linux/diagchar.h
@@ -148,7 +148,7 @@
  * a new RANGE of SSIDs to the msg_mask_tbl.
  */
 #define MSG_MASK_TBL_CNT		26
-#define APPS_EVENT_LAST_ID		0xCA7
+#define APPS_EVENT_LAST_ID		0xCAA
 
 #define MSG_SSID_0			0
 #define MSG_SSID_0_LAST			130
@@ -183,7 +183,7 @@
 #define MSG_SSID_15			8000
 #define MSG_SSID_15_LAST		8000
 #define MSG_SSID_16			8500
-#define MSG_SSID_16_LAST		8531
+#define MSG_SSID_16_LAST		8532
 #define MSG_SSID_17			9000
 #define MSG_SSID_17_LAST		9008
 #define MSG_SSID_18			9500
@@ -783,7 +783,8 @@
 	MSG_LVL_LOW | MSG_LVL_MED | MSG_LVL_HIGH | MSG_LVL_ERROR |
 		MSG_LVL_FATAL,
 	MSG_LVL_MED,
-	MSG_LVL_MED
+	MSG_LVL_MED,
+	MSG_LVL_LOW
 };
 
 static const uint32_t msg_bld_masks_17[] =  {
@@ -921,7 +922,7 @@
 /* LOG CODES */
 static const uint32_t log_code_last_tbl[] = {
 	0x0,	/* EQUIP ID 0 */
-	0x1C94,	/* EQUIP ID 1 */
+	0x1C9A,	/* EQUIP ID 1 */
 	0x0,	/* EQUIP ID 2 */
 	0x0,	/* EQUIP ID 3 */
 	0x4910,	/* EQUIP ID 4 */
diff --git a/sound/soc/codecs/aw8896.c b/sound/soc/codecs/aw8896.c
index dbc7cd8..2592b48 100644
--- a/sound/soc/codecs/aw8896.c
+++ b/sound/soc/codecs/aw8896.c
@@ -43,6 +43,7 @@
 #define AW_READ_CHIPID_RETRIES 5
 #define AW_READ_CHIPID_RETRY_DELAY 5
 #define AW8896_MAX_DSP_START_TRY_COUNT    10
+#define DT_MAX_PROP_SIZE 80
 
 static int aw8896_spk_control;
 static int aw8896_rcv_control;
@@ -1068,6 +1069,14 @@
 
 static int aw8896_parse_dt(struct device *dev, struct aw8896 *aw8896,
 		struct device_node *np) {
+	int prop_val = 0;
+	int ret = 0;
+	int len = 0;
+	const __be32 *prop = NULL;
+	struct device_node *regnode = NULL;
+	char *dvdd_supply = "dvdd";
+	char prop_name[DT_MAX_PROP_SIZE] = {0};
+
 	aw8896->reset_gpio = of_get_named_gpio(np, "reset-gpio", 0);
 	if (aw8896->reset_gpio < 0) {
 		dev_err(dev,
@@ -1082,7 +1091,47 @@
 	if (aw8896->irq_gpio < 0)
 		dev_info(dev, "%s: no irq gpio provided.\n", __func__);
 
+	snprintf(prop_name, DT_MAX_PROP_SIZE, "%s-supply", dvdd_supply);
+	regnode = of_parse_phandle(np, prop_name, 0);
+	if (!regnode) {
+		dev_err(dev, "%s: no %s provided\n", __func__, prop_name);
+		goto err_get_regulator;
+	}
+
+	aw8896->supply.regulator = devm_regulator_get(dev, dvdd_supply);
+	if (IS_ERR(aw8896->supply.regulator)) {
+		dev_err(dev, "%s: failed to get supply for %s\n", __func__,
+			dvdd_supply);
+		goto err_get_regulator;
+	}
+
+	snprintf(prop_name, DT_MAX_PROP_SIZE, "%s-voltage", dvdd_supply);
+	prop = of_get_property(np, prop_name, &len);
+	if (!prop || (len != (2 * sizeof(__be32)))) {
+		dev_err(dev, "%s: no %s provided or format invalid\n",
+			__func__, prop_name);
+		goto err_get_voltage;
+	}
+
+	aw8896->supply.min_uv = be32_to_cpup(&prop[0]);
+	aw8896->supply.max_uv = be32_to_cpup(&prop[1]);
+
+	snprintf(prop_name, DT_MAX_PROP_SIZE, "%s-current", dvdd_supply);
+	ret = of_property_read_u32(np, prop_name, &prop_val);
+	if (ret) {
+		dev_err(dev, "%s: no %s provided\n", __func__, prop_name);
+		goto err_get_current;
+	}
+	aw8896->supply.ua = prop_val;
+
 	return 0;
+
+err_get_current:
+err_get_voltage:
+	devm_regulator_put(aw8896->supply.regulator);
+	aw8896->supply.regulator = NULL;
+err_get_regulator:
+	return -EINVAL;
 }
 
 int aw8896_hw_reset(struct aw8896 *aw8896)
@@ -1354,7 +1403,7 @@
 
 	i2c_set_clientdata(i2c, aw8896);
 	mutex_init(&aw8896->lock);
-	/* aw8896 rst & int */
+
 	if (np) {
 		ret = aw8896_parse_dt(&i2c->dev, aw8896, np);
 		if (ret) {
@@ -1388,6 +1437,30 @@
 		}
 	}
 
+	ret = regulator_set_voltage(aw8896->supply.regulator,
+				    aw8896->supply.max_uv,
+				    aw8896->supply.min_uv);
+	if (ret) {
+		dev_err(&i2c->dev, "%s: set voltage %d ~ %d failed\n",
+				__func__,
+				aw8896->supply.min_uv,
+				aw8896->supply.max_uv);
+		goto err_supply_set;
+	}
+
+	ret = regulator_set_load(aw8896->supply.regulator, aw8896->supply.ua);
+	if (ret < 0) {
+		dev_err(&i2c->dev, "%s: set current %d failed\n", __func__,
+				aw8896->supply.ua);
+		goto err_supply_set;
+	}
+
+	ret = regulator_enable(aw8896->supply.regulator);
+	if (ret < 0) {
+		dev_err(&i2c->dev, "%s: regulator enable failed\n", __func__);
+		goto err_supply_set;
+	}
+
 	ret = aw8896_hw_reset(aw8896);
 	if (ret < 0) {
 		dev_err(&i2c->dev, "%s: aw8896_hw_reset failed\n", __func__);
@@ -1461,6 +1534,11 @@
 	if (gpio_is_valid(aw8896->irq_gpio))
 		devm_gpio_free(&i2c->dev, aw8896->irq_gpio);
 err_hw_rst:
+	if (aw8896->supply.regulator)
+		regulator_disable(aw8896->supply.regulator);
+err_supply_set:
+	if (aw8896->supply.regulator)
+		devm_regulator_put(aw8896->supply.regulator);
 err_irq_gpio_request:
 	if (gpio_is_valid(aw8896->reset_gpio))
 		devm_gpio_free(&i2c->dev, aw8896->reset_gpio);
@@ -1486,6 +1564,11 @@
 	if (gpio_is_valid(aw8896->reset_gpio))
 		devm_gpio_free(&i2c->dev, aw8896->reset_gpio);
 
+	if (aw8896->supply.regulator) {
+		regulator_disable(aw8896->supply.regulator);
+		devm_regulator_put(aw8896->supply.regulator);
+	}
+
 	devm_kfree(&i2c->dev, aw8896);
 	aw8896 = NULL;
 
diff --git a/sound/soc/codecs/aw8896.h b/sound/soc/codecs/aw8896.h
index 48e01ca..5663cb2 100644
--- a/sound/soc/codecs/aw8896.h
+++ b/sound/soc/codecs/aw8896.h
@@ -15,6 +15,7 @@
 
 #ifndef _AW8896_H_
 #define _AW8896_H_
+#include <linux/regulator/driver.h>
 
 /*
  * i2c transaction on Linux limited to 64k
@@ -81,10 +82,18 @@
 	AW8896_DSP_CFG_OK,
 };
 
+struct dvdd_supply {
+	struct regulator *regulator;
+	int min_uv;
+	int max_uv;
+	int ua;
+};
+
 struct aw8896 {
 	struct regmap *regmap;
 	struct i2c_client *i2c;
 	struct snd_soc_codec *codec;
+	struct dvdd_supply supply;
 	struct mutex lock;
 	int dsp_init;
 	int dsp_fw_state;