~postmarketos/upstreaming

Convert MSM8916 boards to use labels, reduce duplication v1 PROPOSED

Stephan Gerhold
Board device trees for newer SoCs reference labels to override properties
for components of the SoC. This patch series converts all MSM8916 boards to
use the same style.

Additionally, in the second part of the series I attempt to reduce duplication
within the MSM8916 board device trees a bit. If we keep copying a large number
of properties to each and every board of a SoC then (in my opinion)
it makes sense to consider if those can be shared in some include.

This will make it easier to add new boards in the future.

Stephan Gerhold (10):
  arm64: dts: qcom: apq8016-sbc: Remove properties that are already
    default
  arm64: dts: qcom: msm8916: Declare sound node in msm8916.dtsi
  arm64: dts: qcom: apq8016-sbc: Define leds outside of soc node
  arm64: dts: qcom: msm8916: Add more labels
  arm64: dts: qcom: msm8916: Use labels in board device trees
  arm64: dts: qcom: pm8916: Add resin node
  arm64: dts: qcom: msm8916: Move PM8916-specific parts to
    msm8916-pm8916.dtsi
  arm64: dts: qcom: msm8916: Move more supplies to msm8916-pm8916.dtsi
  arm64: dts: qcom: msm8916: Set default pinctrl for blsp1_uart1/2
  arm64: dts: qcom: msm8916: Move common USB properties to msm8916.dtsi

 arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi     | 900 ++++++++----------
 .../boot/dts/qcom/msm8916-longcheer-l8150.dts | 108 +--
 arch/arm64/boot/dts/qcom/msm8916-mtp.dtsi     |  14 +-
 arch/arm64/boot/dts/qcom/msm8916-pm8916.dtsi  |  79 ++
 .../qcom/msm8916-samsung-a2015-common.dtsi    | 130 +--
 arch/arm64/boot/dts/qcom/msm8916.dtsi         |  99 +-
 arch/arm64/boot/dts/qcom/pm8916.dtsi          |   8 +
 7 files changed, 625 insertions(+), 713 deletions(-)
 create mode 100644 arch/arm64/boot/dts/qcom/msm8916-pm8916.dtsi

--
2.27.0
Export patchset (mbox)
How do I use this?

Copy & paste the following snippet into your terminal to import this patchset into git:

curl -s https://lists.sr.ht/~postmarketos/upstreaming/patches/11667/mbox | git am -3
Learn more about email & git
View this thread in the archives

[PATCH 01/10] arm64: dts: qcom: apq8016-sbc: Remove properties that are already default Export this patch

Stephan Gerhold
apq8016-sbc.dtsi overrides several properties that are already the
default in msm8916.dtsi. Remove these to simplify the device tree
a bit.

Signed-off-by: Stephan Gerhold <stephan@gerhold.net>
---
 arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi | 18 ------------------
 1 file changed, 18 deletions(-)

diff --git a/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi b/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
index 194343510dcb..0bec6dac17ad 100644
--- a/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
+++ b/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
@@ -387,7 +387,6 @@ usb@78d9000 {
			adp-disable;
			hnp-disable;
			srp-disable;
			dr_mode = "otg";
			pinctrl-names = "default", "device";
			pinctrl-0 = <&usb_sw_sel_pm &usb_hub_reset_pm>;
			pinctrl-1 = <&usb_sw_sel_pm_device &usb_hub_reset_pm_device>;
@@ -405,15 +404,7 @@ lpass@7708000 {
		};

		mdss@1a00000 {
			status = "okay";

			mdp@1a01000 {
				status = "okay";
			};

			dsi@1a98000 {
				status = "okay";

				vdda-supply = <&pm8916_l2>;
				vddio-supply = <&pm8916_l6>;

@@ -428,16 +419,10 @@ endpoint {
			};

			dsi-phy@1a98300 {
				status = "okay";

				vddio-supply = <&pm8916_l6>;
			};
		};

		lpass_codec: codec{
			status = "okay";
		};

		/*
		Internal Codec
			playback - Primary MI2S
@@ -587,8 +572,6 @@ button@0 {
&camss {
	status = "ok";
	ports {
		#address-cells = <1>;
		#size-cells = <0>;
		port@0 {
			reg = <0>;
			csiphy0_ep: endpoint {
@@ -651,7 +634,6 @@ resin {
};

&wcd_codec {
	status = "okay";
	clocks = <&gcc GCC_CODEC_DIGCODEC_CLK>;
	clock-names = "mclk";
	qcom,mbhc-vthreshold-low = <75 150 237 450 500>;
-- 
2.27.0

[PATCH 02/10] arm64: dts: qcom: msm8916: Declare sound node in msm8916.dtsi Export this patch

Stephan Gerhold
The "sound" node in apq8016-sbc.dtsi references memory regions
provided by the SoC and should be therefore declared in msm8916.dtsi.

Additionally, the machine driver used for the "qcom,apq8016-sbc-sndcard"
compatible also works on other MSM8916 devices (provided that audio
routing is set up properly). It is not really specific to apq8016-sbc.

Simplify setting up sound on other boards by moving the common part
to msm8916.dtsi. This also allows referencing the node by the label,
so that we can eventually drop the "soc" node entirely from the
board-specific device tree part and use labels exclusively.

Cc: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: Stephan Gerhold <stephan@gerhold.net>
---
 arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi | 6 +-----
 arch/arm64/boot/dts/qcom/msm8916.dtsi     | 7 +++++++
 2 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi b/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
index 0bec6dac17ad..1155e51c4e4f 100644
--- a/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
+++ b/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
@@ -438,11 +438,7 @@ capture - Quat MI2S

		*/

		sound: sound {
			compatible = "qcom,apq8016-sbc-sndcard";
			reg = <0x07702000 0x4>, <0x07702004 0x4>;
			reg-names = "mic-iomux", "spkr-iomux";

		sound: sound@7702000 {
			status = "okay";
			pinctrl-0 = <&cdc_pdm_lines_act &ext_sec_tlmm_lines_act &ext_mclk_tlmm_lines_act>;
			pinctrl-1 = <&cdc_pdm_lines_sus &ext_sec_tlmm_lines_sus &ext_mclk_tlmm_lines_sus>;
diff --git a/arch/arm64/boot/dts/qcom/msm8916.dtsi b/arch/arm64/boot/dts/qcom/msm8916.dtsi
index 67cae5f9e47e..8b12961f3269 100644
--- a/arch/arm64/boot/dts/qcom/msm8916.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm8916.dtsi
@@ -704,6 +704,13 @@ blsp_i2c6: i2c@78ba000 {
			status = "disabled";
		};

		sound: sound@7702000 {
			status = "disabled";
			compatible = "qcom,apq8016-sbc-sndcard";
			reg = <0x07702000 0x4>, <0x07702004 0x4>;
			reg-names = "mic-iomux", "spkr-iomux";
		};

		lpass: lpass@7708000 {
			status = "disabled";
			compatible = "qcom,lpass-cpu-apq8016";
-- 
2.27.0

[PATCH 03/10] arm64: dts: qcom: apq8016-sbc: Define leds outside of soc node Export this patch

Stephan Gerhold
The leds node does not use any memory regions of the SoC and should
therefore be declared outside the "soc" node.

Signed-off-by: Stephan Gerhold <stephan@gerhold.net>
---
 arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi | 104 +++++++++++-----------
 1 file changed, 52 insertions(+), 52 deletions(-)

diff --git a/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi b/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
index 1155e51c4e4f..47a4ebd86bee 100644
--- a/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
+++ b/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
@@ -307,58 +307,6 @@ spi@78b9000 {
			status = "okay";
		};

		leds {
			pinctrl-names = "default";
			pinctrl-0 = <&msmgpio_leds>,
				    <&pm8916_gpios_leds>,
				    <&pm8916_mpps_leds>;

			compatible = "gpio-leds";

			led@1 {
				label = "apq8016-sbc:green:user1";
				gpios = <&msmgpio 21 GPIO_ACTIVE_HIGH>;
				linux,default-trigger = "heartbeat";
				default-state = "off";
			};

			led@2 {
				label = "apq8016-sbc:green:user2";
				gpios = <&msmgpio 120 GPIO_ACTIVE_HIGH>;
				linux,default-trigger = "mmc0";
				default-state = "off";
			};

			led@3 {
				label = "apq8016-sbc:green:user3";
				gpios = <&pm8916_gpios 1 GPIO_ACTIVE_HIGH>;
				linux,default-trigger = "mmc1";
				default-state = "off";
			};

			led@4 {
				label = "apq8016-sbc:green:user4";
				gpios = <&pm8916_gpios 2 GPIO_ACTIVE_HIGH>;
				linux,default-trigger = "none";
				panic-indicator;
				default-state = "off";
			};

			led@5 {
				label = "apq8016-sbc:yellow:wlan";
				gpios = <&pm8916_mpps 2 GPIO_ACTIVE_HIGH>;
				linux,default-trigger = "phy0tx";
				default-state = "off";
			};

			led@6 {
				label = "apq8016-sbc:blue:bt";
				gpios = <&pm8916_mpps 3 GPIO_ACTIVE_HIGH>;
				linux,default-trigger = "bluetooth-power";
				default-state = "off";
			};
		};

		sdhci@7824000 {
			vmmc-supply = <&pm8916_l8>;
			vqmmc-supply = <&pm8916_l5>;
@@ -563,6 +511,58 @@ button@0 {
			gpios = <&msmgpio 107 GPIO_ACTIVE_LOW>;
		};
	};

	leds {
		pinctrl-names = "default";
		pinctrl-0 = <&msmgpio_leds>,
			    <&pm8916_gpios_leds>,
			    <&pm8916_mpps_leds>;

		compatible = "gpio-leds";

		led@1 {
			label = "apq8016-sbc:green:user1";
			gpios = <&msmgpio 21 GPIO_ACTIVE_HIGH>;
			linux,default-trigger = "heartbeat";
			default-state = "off";
		};

		led@2 {
			label = "apq8016-sbc:green:user2";
			gpios = <&msmgpio 120 GPIO_ACTIVE_HIGH>;
			linux,default-trigger = "mmc0";
			default-state = "off";
		};

		led@3 {
			label = "apq8016-sbc:green:user3";
			gpios = <&pm8916_gpios 1 GPIO_ACTIVE_HIGH>;
			linux,default-trigger = "mmc1";
			default-state = "off";
		};

		led@4 {
			label = "apq8016-sbc:green:user4";
			gpios = <&pm8916_gpios 2 GPIO_ACTIVE_HIGH>;
			linux,default-trigger = "none";
			panic-indicator;
			default-state = "off";
		};

		led@5 {
			label = "apq8016-sbc:yellow:wlan";
			gpios = <&pm8916_mpps 2 GPIO_ACTIVE_HIGH>;
			linux,default-trigger = "phy0tx";
			default-state = "off";
		};

		led@6 {
			label = "apq8016-sbc:blue:bt";
			gpios = <&pm8916_mpps 3 GPIO_ACTIVE_HIGH>;
			linux,default-trigger = "bluetooth-power";
			default-state = "off";
		};
	};
};

&camss {
-- 
2.27.0

[PATCH 04/10] arm64: dts: qcom: msm8916: Add more labels Export this patch

Stephan Gerhold
Add a few more labels to device nodes declared in msm8916.dtsi
so that we can set all needed properties using labels in the
board-specific device tree part.

Also rename the "otg" label to "usb" to allow grouping it with
the USB PHY (usb_hs_phy) node when ordering referenced labels
alphabetically.

Signed-off-by: Stephan Gerhold <stephan@gerhold.net>
---
 arch/arm64/boot/dts/qcom/msm8916.dtsi | 40 +++++++++++++--------------
 1 file changed, 20 insertions(+), 20 deletions(-)

diff --git a/arch/arm64/boot/dts/qcom/msm8916.dtsi b/arch/arm64/boot/dts/qcom/msm8916.dtsi
index 8b12961f3269..acbaed23bbdd 100644
--- a/arch/arm64/boot/dts/qcom/msm8916.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm8916.dtsi
@@ -781,7 +781,7 @@ sdhc_2: sdhci@7864000 {
			status = "disabled";
		};

		otg: usb@78d9000 {
		usb: usb@78d9000 {
			compatible = "qcom,ci-hdrc";
			reg = <0x78d9000 0x200>,
			      <0x78d9200 0x200>;
@@ -809,7 +809,7 @@ usb_hs_phy: phy {
					#phy-cells = <0>;
					clocks = <&xo_board>, <&gcc GCC_USB2A_PHY_SLEEP_CLK>;
					clock-names = "ref", "sleep";
					resets = <&gcc GCC_USB2A_PHY_BCR>, <&otg 0>;
					resets = <&gcc GCC_USB2A_PHY_BCR>, <&usb 0>;
					reset-names = "phy", "por";
					qcom,init-seq = /bits/ 8 <0x0 0x44
						0x1 0x6b 0x2 0x24 0x3 0x13>;
@@ -1151,7 +1151,7 @@ dsi_phy0: dsi-phy@1a98300 {
		};


		hexagon@4080000 {
		mpss: hexagon@4080000 {
			compatible = "qcom,q6v5-pil";
			reg = <0x04080000 0x100>,
			      <0x04020000 0x040>;
@@ -1289,7 +1289,7 @@ wifi {
			};
		};

		tpiu@820000 {
		tpiu: tpiu@820000 {
			compatible = "arm,coresight-tpiu", "arm,primecell";
			reg = <0x820000 0x1000>;

@@ -1307,7 +1307,7 @@ tpiu_in: endpoint {
			};
		};

		funnel@821000 {
		funnel0: funnel@821000 {
			compatible = "arm,coresight-dynamic-funnel", "arm,primecell";
			reg = <0x821000 0x1000>;

@@ -1348,7 +1348,7 @@ funnel0_out: endpoint {
			};
		};

		replicator@824000 {
		replicator: replicator@824000 {
			compatible = "arm,coresight-dynamic-replicator", "arm,primecell";
			reg = <0x824000 0x1000>;

@@ -1384,7 +1384,7 @@ replicator_in: endpoint {
			};
		};

		etf@825000 {
		etf: etf@825000 {
			compatible = "arm,coresight-tmc", "arm,primecell";
			reg = <0x825000 0x1000>;

@@ -1410,7 +1410,7 @@ etf_out: endpoint {
			};
		};

		etr@826000 {
		etr: etr@826000 {
			compatible = "arm,coresight-tmc", "arm,primecell";
			reg = <0x826000 0x1000>;

@@ -1428,7 +1428,7 @@ etr_in: endpoint {
			};
		};

		funnel@841000 {	/* APSS funnel only 4 inputs are used */
		funnel1: funnel@841000 {	/* APSS funnel only 4 inputs are used */
			compatible = "arm,coresight-dynamic-funnel", "arm,primecell";
			reg = <0x841000 0x1000>;

@@ -1476,7 +1476,7 @@ funnel1_out: endpoint {
			};
		};

		debug@850000 {
		debug0: debug@850000 {
			compatible = "arm,coresight-cpu-debug","arm,primecell";
			reg = <0x850000 0x1000>;
			clocks = <&rpmcc RPM_QDSS_CLK>;
@@ -1485,7 +1485,7 @@ debug@850000 {
			status = "disabled";
		};

		debug@852000 {
		debug1: debug@852000 {
			compatible = "arm,coresight-cpu-debug","arm,primecell";
			reg = <0x852000 0x1000>;
			clocks = <&rpmcc RPM_QDSS_CLK>;
@@ -1494,7 +1494,7 @@ debug@852000 {
			status = "disabled";
		};

		debug@854000 {
		debug2: debug@854000 {
			compatible = "arm,coresight-cpu-debug","arm,primecell";
			reg = <0x854000 0x1000>;
			clocks = <&rpmcc RPM_QDSS_CLK>;
@@ -1503,7 +1503,7 @@ debug@854000 {
			status = "disabled";
		};

		debug@856000 {
		debug3: debug@856000 {
			compatible = "arm,coresight-cpu-debug","arm,primecell";
			reg = <0x856000 0x1000>;
			clocks = <&rpmcc RPM_QDSS_CLK>;
@@ -1598,7 +1598,7 @@ etm3_out: endpoint {

		/* System CTIs */
		/* CTI 0 - TMC connections */
		cti@810000 {
		cti0: cti@810000 {
			compatible = "arm,coresight-cti", "arm,primecell";
			reg = <0x810000 0x1000>;

@@ -1609,7 +1609,7 @@ cti@810000 {
		};

		/* CTI 1 - TPIU connections */
		cti@811000 {
		cti1: cti@811000 {
			compatible = "arm,coresight-cti", "arm,primecell";
			reg = <0x811000 0x1000>;

@@ -1623,7 +1623,7 @@ cti@811000 {

		/* Core CTIs; CTIs 12-15 */
		/* CTI - CPU-0 */
		cti@858000 {
		cti12: cti@858000 {
			compatible = "arm,coresight-cti-v8-arch", "arm,coresight-cti",
				     "arm,primecell";
			reg = <0x858000 0x1000>;
@@ -1638,7 +1638,7 @@ cti@858000 {
		};

		/* CTI - CPU-1 */
		cti@859000 {
		cti13: cti@859000 {
			compatible = "arm,coresight-cti-v8-arch", "arm,coresight-cti",
				     "arm,primecell";
			reg = <0x859000 0x1000>;
@@ -1653,7 +1653,7 @@ cti@859000 {
		};

		/* CTI - CPU-2 */
		cti@85a000 {
		cti14: cti@85a000 {
			compatible = "arm,coresight-cti-v8-arch", "arm,coresight-cti",
				     "arm,primecell";
			reg = <0x85a000 0x1000>;
@@ -1668,7 +1668,7 @@ cti@85a000 {
		};

		/* CTI - CPU-3 */
		cti@85b000 {
		cti15: cti@85b000 {
			compatible = "arm,coresight-cti-v8-arch", "arm,coresight-cti",
				     "arm,primecell";
			reg = <0x85b000 0x1000>;
@@ -1821,7 +1821,7 @@ rpm {
			qcom,ipc = <&apcs 8 0>;
			qcom,smd-edge = <15>;

			rpm-requests {
			rpm_requests: rpm-requests {
				compatible = "qcom,rpm-msm8916";
				qcom,smd-channels = "rpm_requests";

-- 
2.27.0

[PATCH 05/10] arm64: dts: qcom: msm8916: Use labels in board device trees Export this patch

Stephan Gerhold
Device trees for newer SoCs avoid replicating the entire device
hierarchy in the board-specific device tree part. Instead,
they set additional properties only by referencing labels,
sorted alphabetically.

Now that we have labels for all relevant nodes, convert the MSM8916
board device trees to use the same style and remove the "soc" node
entirely.

Note: There is a large block of coresight nodes in apq8016-sbc.dtsi,
which are enabled by setting status = "okay". I kept them grouped
together (not alphabetically sorted with everything else),
since that would be just unnecessarily verbose and hard to see.

This commit only moves all existing properties to nodes that reference
the respective label. The resulting binary DTBs are exactly the same.

Signed-off-by: Stephan Gerhold <stephan@gerhold.net>
---
Sorry for the large diff! I hope the fact that the resulting binary DTBs
are exactly the same (same checksum) simplifies review a bit.
Would just need to check that the resulting style looks good. :)
---
 arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi     | 800 +++++++++---------
 .../boot/dts/qcom/msm8916-longcheer-l8150.dts | 107 ++-
 arch/arm64/boot/dts/qcom/msm8916-mtp.dtsi     |  14 +-
 .../qcom/msm8916-samsung-a2015-common.dtsi    | 139 ++-
 4 files changed, 514 insertions(+), 546 deletions(-)

diff --git a/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi b/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
index 47a4ebd86bee..89cc53ddf6b5 100644
--- a/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
+++ b/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
@@ -11,30 +11,6 @@
#include <dt-bindings/pinctrl/qcom,pmic-mpp.h>
#include <dt-bindings/sound/apq8016-lpass.h>

/*
 * GPIO name legend: proper name = the GPIO line is used as GPIO
 *         NC = not connected (pin out but not routed from the chip to
 *              anything the board)
 *         "[PER]" = pin is muxed for [peripheral] (not GPIO)
 *         LSEC = Low Speed External Connector
 *         HSEC = High Speed External Connector
 *
 * Line names are taken from the schematic "DragonBoard410c"
 * dated monday, august 31, 2015. Page 5 in particular.
 *
 * For the lines routed to the external connectors the
 * lines are named after the 96Boards CE Specification 1.0,
 * Appendix "Expansion Connector Signal Description".
 *
 * When the 96Board naming of a line and the schematic name of
 * the same line are in conflict, the 96Board specification
 * takes precedence, which means that the external UART on the
 * LSEC is named UART0 while the schematic and SoC names this
 * UART3. This is only for the informational lines i.e. "[FOO]",
 * the GPIO named lines "GPIO-A" thru "GPIO-L" are the only
 * ones actually used for GPIO.
 */

/ {
	aliases {
		serial0 = &blsp1_uart2;
@@ -76,7 +52,7 @@ camera_vddd_1v5: camera-vddd-1v5 {
	};

	reserved-memory {
		ramoops@bff00000{
		ramoops@bff00000 {
			compatible = "ramoops";
			reg = <0x0 0xbff00000 0x0 0x100000>;

@@ -86,392 +62,6 @@ ramoops@bff00000{
		};
	};

	soc {
		pinctrl@1000000 {
			gpio-line-names =
				"[UART0_TX]", /* GPIO_0, LSEC pin 5 */
				"[UART0_RX]", /* GPIO_1, LSEC pin 7 */
				"[UART0_CTS_N]", /* GPIO_2, LSEC pin 3 */
				"[UART0_RTS_N]", /* GPIO_3, LSEC pin 9 */
				"[UART1_TX]", /* GPIO_4, LSEC pin 11 */
				"[UART1_RX]", /* GPIO_5, LSEC pin 13 */
				"[I2C0_SDA]", /* GPIO_8, LSEC pin 17 */
				"[I2C0_SCL]", /* GPIO_7, LSEC pin 15 */
				"[SPI1_DOUT]", /* SPI1_MOSI, HSEC pin 1 */
				"[SPI1_DIN]", /* SPI1_MISO, HSEC pin 11 */
				"[SPI1_CS]", /* SPI1_CS_N, HSEC pin 7 */
				"[SPI1_SCLK]", /* SPI1_CLK, HSEC pin 9 */
				"GPIO-B", /* LS_EXP_GPIO_B, LSEC pin 24 */
				"GPIO-C", /* LS_EXP_GPIO_C, LSEC pin 25 */
				"[I2C3_SDA]", /* HSEC pin 38 */
				"[I2C3_SCL]", /* HSEC pin 36 */
				"[SPI0_MOSI]", /* LSEC pin 14 */
				"[SPI0_MISO]", /* LSEC pin 10 */
				"[SPI0_CS_N]", /* LSEC pin 12 */
				"[SPI0_CLK]", /* LSEC pin 8 */
				"HDMI_HPD_N", /* GPIO 20 */
				"USR_LED_1_CTRL",
				"[I2C1_SDA]", /* GPIO_22, LSEC pin 21 */
				"[I2C1_SCL]", /* GPIO_23, LSEC pin 19 */
				"GPIO-G", /* LS_EXP_GPIO_G, LSEC pin 29 */
				"GPIO-H", /* LS_EXP_GPIO_H, LSEC pin 30 */
				"[CSI0_MCLK]", /* HSEC pin 15 */
				"[CSI1_MCLK]", /* HSEC pin 17 */
				"GPIO-K", /* LS_EXP_GPIO_K, LSEC pin 33 */
				"[I2C2_SDA]", /* HSEC pin 34 */
				"[I2C2_SCL]", /* HSEC pin 32 */
				"DSI2HDMI_INT_N",
				"DSI_SW_SEL_APQ",
				"GPIO-L", /* LS_EXP_GPIO_L, LSEC pin 34 */
				"GPIO-J", /* LS_EXP_GPIO_J, LSEC pin 32 */
				"GPIO-I", /* LS_EXP_GPIO_I, LSEC pin 31 */
				"GPIO-A", /* LS_EXP_GPIO_A, LSEC pin 23 */
				"FORCED_USB_BOOT",
				"SD_CARD_DET_N",
				"[WCSS_BT_SSBI]",
				"[WCSS_WLAN_DATA_2]", /* GPIO 40 */
				"[WCSS_WLAN_DATA_1]",
				"[WCSS_WLAN_DATA_0]",
				"[WCSS_WLAN_SET]",
				"[WCSS_WLAN_CLK]",
				"[WCSS_FM_SSBI]",
				"[WCSS_FM_SDI]",
				"[WCSS_BT_DAT_CTL]",
				"[WCSS_BT_DAT_STB]",
				"NC",
				"NC", /* GPIO 50 */
				"NC",
				"NC",
				"NC",
				"NC",
				"NC",
				"NC",
				"NC",
				"NC",
				"NC",
				"NC", /* GPIO 60 */
				"NC",
				"NC",
				"[CDC_PDM0_CLK]",
				"[CDC_PDM0_SYNC]",
				"[CDC_PDM0_TX0]",
				"[CDC_PDM0_RX0]",
				"[CDC_PDM0_RX1]",
				"[CDC_PDM0_RX2]",
				"GPIO-D", /* LS_EXP_GPIO_D, LSEC pin 26 */
				"NC", /* GPIO 70 */
				"NC",
				"NC",
				"NC",
				"NC", /* GPIO 74 */
				"NC",
				"NC",
				"NC",
				"NC",
				"NC",
				"BOOT_CONFIG_0", /* GPIO 80 */
				"BOOT_CONFIG_1",
				"BOOT_CONFIG_2",
				"BOOT_CONFIG_3",
				"NC",
				"NC",
				"BOOT_CONFIG_5",
				"NC",
				"NC",
				"NC",
				"NC", /* GPIO 90 */
				"NC",
				"NC",
				"NC",
				"NC",
				"NC",
				"NC",
				"NC",
				"NC",
				"NC",
				"NC", /* GPIO 100 */
				"NC",
				"NC",
				"NC",
				"SSBI_GPS",
				"NC",
				"NC",
				"KEY_VOLP_N",
				"NC",
				"NC",
				"[LS_EXP_MI2S_WS]", /* GPIO 110 */
				"NC",
				"NC",
				"[LS_EXP_MI2S_SCK]",
				"[LS_EXP_MI2S_DATA0]",
				"GPIO-E", /* LS_EXP_GPIO_E, LSEC pin 27 */
				"NC",
				"[DSI2HDMI_MI2S_WS]",
				"[DSI2HDMI_MI2S_SCK]",
				"[DSI2HDMI_MI2S_DATA0]",
				"USR_LED_2_CTRL", /* GPIO 120 */
				"SB_HS_ID";
		};

		dma@7884000 {
			status = "okay";
		};

		serial@78af000 {
			label = "LS-UART0";
			status = "okay";
			pinctrl-names = "default", "sleep";
			pinctrl-0 = <&blsp1_uart1_default>;
			pinctrl-1 = <&blsp1_uart1_sleep>;
		};

		serial@78b0000 {
			label = "LS-UART1";
			status = "okay";
			pinctrl-names = "default", "sleep";
			pinctrl-0 = <&blsp1_uart2_default>;
			pinctrl-1 = <&blsp1_uart2_sleep>;
		};

		i2c@78b6000 {
		/* On Low speed expansion */
			label = "LS-I2C0";
			status = "okay";
		};

		i2c@78b8000 {
		/* On High speed expansion */
			label = "HS-I2C2";
			status = "okay";

			adv_bridge: bridge@39 {
				status = "okay";

				compatible = "adi,adv7533";
				reg = <0x39>;

				interrupt-parent = <&msmgpio>;
				interrupts = <31 2>;

				adi,dsi-lanes = <4>;
				clocks = <&rpmcc RPM_SMD_BB_CLK2>;
				clock-names = "cec";

				pd-gpios = <&msmgpio 32 0>;

				avdd-supply = <&pm8916_l6>;
				v1p2-supply = <&pm8916_l6>;
				v3p3-supply = <&pm8916_l17>;

				pinctrl-names = "default","sleep";
				pinctrl-0 = <&adv7533_int_active &adv7533_switch_active>;
				pinctrl-1 = <&adv7533_int_suspend &adv7533_switch_suspend>;
				#sound-dai-cells = <1>;

				ports {
					#address-cells = <1>;
					#size-cells = <0>;

					port@0 {
						reg = <0>;
						adv7533_in: endpoint {
							remote-endpoint = <&dsi0_out>;
						};
					};

					port@1 {
						reg = <1>;
						adv7533_out: endpoint {
							remote-endpoint = <&hdmi_con>;
						};
					};
				};
			};
		};

		i2c@78ba000 {
		/* On Low speed expansion */
			label = "LS-I2C1";
			status = "okay";
		};

		spi@78b7000 {
		/* On High speed expansion */
			label = "HS-SPI1";
			status = "okay";
		};

		spi@78b9000 {
		/* On Low speed expansion */
			label = "LS-SPI0";
			status = "okay";
		};

		sdhci@7824000 {
			vmmc-supply = <&pm8916_l8>;
			vqmmc-supply = <&pm8916_l5>;

			pinctrl-names = "default", "sleep";
			pinctrl-0 = <&sdc1_clk_on &sdc1_cmd_on &sdc1_data_on>;
			pinctrl-1 = <&sdc1_clk_off &sdc1_cmd_off &sdc1_data_off>;
			status = "okay";
		};

		sdhci@7864000 {
			vmmc-supply = <&pm8916_l11>;
			vqmmc-supply = <&pm8916_l12>;

			pinctrl-names = "default", "sleep";
			pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdc2_cd_on>;
			pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off &sdc2_cd_off>;

			cd-gpios = <&msmgpio 38 0x1>;
			status = "okay";
		};

		usb@78d9000 {
			extcon = <&usb_id>, <&usb_id>;
			status = "okay";
			adp-disable;
			hnp-disable;
			srp-disable;
			pinctrl-names = "default", "device";
			pinctrl-0 = <&usb_sw_sel_pm &usb_hub_reset_pm>;
			pinctrl-1 = <&usb_sw_sel_pm_device &usb_hub_reset_pm_device>;
			ulpi {
				phy {
					v1p8-supply = <&pm8916_l7>;
					v3p3-supply = <&pm8916_l13>;
					extcon = <&usb_id>;
				};
			};
		};

		lpass@7708000 {
			status = "okay";
		};

		mdss@1a00000 {
			dsi@1a98000 {
				vdda-supply = <&pm8916_l2>;
				vddio-supply = <&pm8916_l6>;

				ports {
					port@1 {
						endpoint {
							remote-endpoint = <&adv7533_in>;
							data-lanes = <0 1 2 3>;
						};
					};
				};
			};

			dsi-phy@1a98300 {
				vddio-supply = <&pm8916_l6>;
			};
		};

		/*
		Internal Codec
			playback - Primary MI2S
			capture - Ter MI2S

		External Primary:
			playback - secondary MI2S
			capture - Quat MI2S

		External Secondary:
			playback - Quat MI2S
			capture - Quat MI2S

		*/

		sound: sound@7702000 {
			status = "okay";
			pinctrl-0 = <&cdc_pdm_lines_act &ext_sec_tlmm_lines_act &ext_mclk_tlmm_lines_act>;
			pinctrl-1 = <&cdc_pdm_lines_sus &ext_sec_tlmm_lines_sus &ext_mclk_tlmm_lines_sus>;
			pinctrl-names = "default", "sleep";
			qcom,model = "DB410c";
			qcom,audio-routing =
				"AMIC2", "MIC BIAS Internal2",
				"AMIC3", "MIC BIAS External1";

			external-dai-link@0 {
				link-name = "ADV7533";
				cpu {
					sound-dai = <&lpass MI2S_QUATERNARY>;
				};
				codec {
					sound-dai = <&adv_bridge 0>;
				};
			};

			internal-codec-playback-dai-link@0 {
				link-name = "WCD";
				cpu {
					sound-dai = <&lpass MI2S_PRIMARY>;
				};
				codec {
					sound-dai = <&lpass_codec 0>, <&wcd_codec 0>;
				};
			};

			internal-codec-capture-dai-link@0 {
				link-name = "WCD-Capture";
				cpu {
					sound-dai = <&lpass MI2S_TERTIARY>;
				};
				codec {
					sound-dai = <&lpass_codec 1>, <&wcd_codec 1>;
				};
			};
		};

		spmi@200f000 {
			pm8916@0 {
				gpios@c000 {
					gpio-line-names =
						"USR_LED_3_CTRL",
						"USR_LED_4_CTRL",
						"USB_HUB_RESET_N_PM",
						"USB_SW_SEL_PM";
				};
				mpps@a000 {
					gpio-line-names =
						"VDD_PX_BIAS",
						"WLAN_LED_CTRL",
						"BT_LED_CTRL",
						"GPIO-F"; /* LS_EXP_GPIO_F, LSEC pin 28 */
				};
			};
		};

		wcnss@a21b000 {
			status = "okay";
		};

		tpiu@820000 { status = "okay"; };
		funnel@821000 { status = "okay"; };
		replicator@824000 { status = "okay"; };
		etf@825000 { status = "okay"; };
		etr@826000 { status = "okay"; };
		funnel@841000 { status = "okay"; };
		debug@850000 { status = "okay"; };
		debug@852000 { status = "okay"; };
		debug@854000 { status = "okay"; };
		debug@856000 { status = "okay"; };
		etm@85c000 { status = "okay"; };
		etm@85d000 { status = "okay"; };
		etm@85e000 { status = "okay"; };
		etm@85f000 { status = "okay"; };
		cti@810000 { status = "okay"; };
		cti@811000 { status = "okay"; };
		cti@858000 { status = "okay"; };
		cti@859000 { status = "okay"; };
		cti@85a000 { status = "okay"; };
		cti@85b000 { status = "okay"; };
	};

	usb2513 {
		compatible = "smsc,usb3503";
		reset-gpios = <&pm8916_gpios 3 GPIO_ACTIVE_LOW>;
@@ -565,6 +155,102 @@ led@6 {
	};
};

&blsp_dma {
	status = "okay";
};

&blsp_i2c2 {
	/* On Low speed expansion */
	status = "okay";
	label = "LS-I2C0";
};

&blsp_i2c4 {
	/* On High speed expansion */
	status = "okay";
	label = "HS-I2C2";

	adv_bridge: bridge@39 {
		status = "okay";

		compatible = "adi,adv7533";
		reg = <0x39>;

		interrupt-parent = <&msmgpio>;
		interrupts = <31 IRQ_TYPE_EDGE_FALLING>;

		adi,dsi-lanes = <4>;
		clocks = <&rpmcc RPM_SMD_BB_CLK2>;
		clock-names = "cec";

		pd-gpios = <&msmgpio 32 GPIO_ACTIVE_HIGH>;

		avdd-supply = <&pm8916_l6>;
		v1p2-supply = <&pm8916_l6>;
		v3p3-supply = <&pm8916_l17>;

		pinctrl-names = "default","sleep";
		pinctrl-0 = <&adv7533_int_active &adv7533_switch_active>;
		pinctrl-1 = <&adv7533_int_suspend &adv7533_switch_suspend>;
		#sound-dai-cells = <1>;

		ports {
			#address-cells = <1>;
			#size-cells = <0>;

			port@0 {
				reg = <0>;
				adv7533_in: endpoint {
					remote-endpoint = <&dsi0_out>;
				};
			};

			port@1 {
				reg = <1>;
				adv7533_out: endpoint {
					remote-endpoint = <&hdmi_con>;
				};
			};
		};
	};
};

&blsp_i2c6 {
	/* On Low speed expansion */
	status = "okay";
	label = "LS-I2C1";
};

&blsp_spi3 {
	/* On High speed expansion */
	status = "okay";
	label = "HS-SPI1";
};

&blsp_spi5 {
	/* On Low speed expansion */
	status = "okay";
	label = "LS-SPI0";
};

&blsp1_uart1 {
	status = "okay";
	label = "LS-UART0";

	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&blsp1_uart1_default>;
	pinctrl-1 = <&blsp1_uart1_sleep>;
};

&blsp1_uart2 {
	status = "okay";
	label = "LS-UART1";

	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&blsp1_uart2_default>;
	pinctrl-1 = <&blsp1_uart2_sleep>;
};

&camss {
	status = "ok";
	ports {
@@ -615,6 +301,98 @@ ov5640_ep: endpoint {
	};
};

&dsi0 {
	vdda-supply = <&pm8916_l2>;
	vddio-supply = <&pm8916_l6>;

	ports {
		port@1 {
			endpoint {
				remote-endpoint = <&adv7533_in>;
				data-lanes = <0 1 2 3>;
			};
		};
	};
};

&dsi_phy0 {
	vddio-supply = <&pm8916_l6>;
};

&lpass {
	status = "okay";
};

&pronto {
	status = "okay";
};

&sdhc_1 {
	status = "okay";

	vmmc-supply = <&pm8916_l8>;
	vqmmc-supply = <&pm8916_l5>;

	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&sdc1_clk_on &sdc1_cmd_on &sdc1_data_on>;
	pinctrl-1 = <&sdc1_clk_off &sdc1_cmd_off &sdc1_data_off>;
};

&sdhc_2 {
	status = "okay";

	vmmc-supply = <&pm8916_l11>;
	vqmmc-supply = <&pm8916_l12>;

	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdc2_cd_on>;
	pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off &sdc2_cd_off>;

	cd-gpios = <&msmgpio 38 GPIO_ACTIVE_LOW>;
};

&sound {
	status = "okay";

	pinctrl-0 = <&cdc_pdm_lines_act &ext_sec_tlmm_lines_act &ext_mclk_tlmm_lines_act>;
	pinctrl-1 = <&cdc_pdm_lines_sus &ext_sec_tlmm_lines_sus &ext_mclk_tlmm_lines_sus>;
	pinctrl-names = "default", "sleep";
	qcom,model = "DB410c";
	qcom,audio-routing =
		"AMIC2", "MIC BIAS Internal2",
		"AMIC3", "MIC BIAS External1";

	external-dai-link@0 {
		link-name = "ADV7533";
		cpu {
			sound-dai = <&lpass MI2S_QUATERNARY>;
		};
		codec {
			sound-dai = <&adv_bridge 0>;
		};
	};

	internal-codec-playback-dai-link@0 {
		link-name = "WCD";
		cpu {
			sound-dai = <&lpass MI2S_PRIMARY>;
		};
		codec {
			sound-dai = <&lpass_codec 0>, <&wcd_codec 0>;
		};
	};

	internal-codec-capture-dai-link@0 {
		link-name = "WCD-Capture";
		cpu {
			sound-dai = <&lpass MI2S_TERTIARY>;
		};
		codec {
			sound-dai = <&lpass_codec 1>, <&wcd_codec 1>;
		};
	};
};

&spmi_bus {
	pm8916_0: pm8916@0 {
		pon@800 {
@@ -629,6 +407,24 @@ resin {
	};
};

&usb {
	status = "okay";
	extcon = <&usb_id>, <&usb_id>;
	adp-disable;
	hnp-disable;
	srp-disable;

	pinctrl-names = "default", "device";
	pinctrl-0 = <&usb_sw_sel_pm &usb_hub_reset_pm>;
	pinctrl-1 = <&usb_sw_sel_pm_device &usb_hub_reset_pm_device>;
};

&usb_hs_phy {
	v1p8-supply = <&pm8916_l7>;
	v3p3-supply = <&pm8916_l13>;
	extcon = <&usb_id>;
};

&wcd_codec {
	clocks = <&gcc GCC_CODEC_DIGCODEC_CLK>;
	clock-names = "mclk";
@@ -636,6 +432,28 @@ &wcd_codec {
	qcom,mbhc-vthreshold-high = <75 150 237 450 500>;
};

/* Enable CoreSight */
&cti0 { status = "okay"; };
&cti1 { status = "okay"; };
&cti12 { status = "okay"; };
&cti13 { status = "okay"; };
&cti14 { status = "okay"; };
&cti15 { status = "okay"; };
&debug0 { status = "okay"; };
&debug1 { status = "okay"; };
&debug2 { status = "okay"; };
&debug3 { status = "okay"; };
&etf { status = "okay"; };
&etm0 { status = "okay"; };
&etm1 { status = "okay"; };
&etm2 { status = "okay"; };
&etm3 { status = "okay"; };
&etr { status = "okay"; };
&funnel0 { status = "okay"; };
&funnel1 { status = "okay"; };
&replicator { status = "okay"; };
&tpiu { status = "okay"; };

&smd_rpm_regulators {
	vdd_l1_l2_l3-supply = <&pm8916_s3>;
	vdd_l4_l5_l6-supply = <&pm8916_s4>;
@@ -773,7 +591,155 @@ &i2c6_default {
	drive-strength = <16>;
};

/*
 * GPIO name legend: proper name = the GPIO line is used as GPIO
 *         NC = not connected (pin out but not routed from the chip to
 *              anything the board)
 *         "[PER]" = pin is muxed for [peripheral] (not GPIO)
 *         LSEC = Low Speed External Connector
 *         HSEC = High Speed External Connector
 *
 * Line names are taken from the schematic "DragonBoard410c"
 * dated monday, august 31, 2015. Page 5 in particular.
 *
 * For the lines routed to the external connectors the
 * lines are named after the 96Boards CE Specification 1.0,
 * Appendix "Expansion Connector Signal Description".
 *
 * When the 96Board naming of a line and the schematic name of
 * the same line are in conflict, the 96Board specification
 * takes precedence, which means that the external UART on the
 * LSEC is named UART0 while the schematic and SoC names this
 * UART3. This is only for the informational lines i.e. "[FOO]",
 * the GPIO named lines "GPIO-A" thru "GPIO-L" are the only
 * ones actually used for GPIO.
 */

&msmgpio {
	gpio-line-names =
		"[UART0_TX]", /* GPIO_0, LSEC pin 5 */
		"[UART0_RX]", /* GPIO_1, LSEC pin 7 */
		"[UART0_CTS_N]", /* GPIO_2, LSEC pin 3 */
		"[UART0_RTS_N]", /* GPIO_3, LSEC pin 9 */
		"[UART1_TX]", /* GPIO_4, LSEC pin 11 */
		"[UART1_RX]", /* GPIO_5, LSEC pin 13 */
		"[I2C0_SDA]", /* GPIO_8, LSEC pin 17 */
		"[I2C0_SCL]", /* GPIO_7, LSEC pin 15 */
		"[SPI1_DOUT]", /* SPI1_MOSI, HSEC pin 1 */
		"[SPI1_DIN]", /* SPI1_MISO, HSEC pin 11 */
		"[SPI1_CS]", /* SPI1_CS_N, HSEC pin 7 */
		"[SPI1_SCLK]", /* SPI1_CLK, HSEC pin 9 */
		"GPIO-B", /* LS_EXP_GPIO_B, LSEC pin 24 */
		"GPIO-C", /* LS_EXP_GPIO_C, LSEC pin 25 */
		"[I2C3_SDA]", /* HSEC pin 38 */
		"[I2C3_SCL]", /* HSEC pin 36 */
		"[SPI0_MOSI]", /* LSEC pin 14 */
		"[SPI0_MISO]", /* LSEC pin 10 */
		"[SPI0_CS_N]", /* LSEC pin 12 */
		"[SPI0_CLK]", /* LSEC pin 8 */
		"HDMI_HPD_N", /* GPIO 20 */
		"USR_LED_1_CTRL",
		"[I2C1_SDA]", /* GPIO_22, LSEC pin 21 */
		"[I2C1_SCL]", /* GPIO_23, LSEC pin 19 */
		"GPIO-G", /* LS_EXP_GPIO_G, LSEC pin 29 */
		"GPIO-H", /* LS_EXP_GPIO_H, LSEC pin 30 */
		"[CSI0_MCLK]", /* HSEC pin 15 */
		"[CSI1_MCLK]", /* HSEC pin 17 */
		"GPIO-K", /* LS_EXP_GPIO_K, LSEC pin 33 */
		"[I2C2_SDA]", /* HSEC pin 34 */
		"[I2C2_SCL]", /* HSEC pin 32 */
		"DSI2HDMI_INT_N",
		"DSI_SW_SEL_APQ",
		"GPIO-L", /* LS_EXP_GPIO_L, LSEC pin 34 */
		"GPIO-J", /* LS_EXP_GPIO_J, LSEC pin 32 */
		"GPIO-I", /* LS_EXP_GPIO_I, LSEC pin 31 */
		"GPIO-A", /* LS_EXP_GPIO_A, LSEC pin 23 */
		"FORCED_USB_BOOT",
		"SD_CARD_DET_N",
		"[WCSS_BT_SSBI]",
		"[WCSS_WLAN_DATA_2]", /* GPIO 40 */
		"[WCSS_WLAN_DATA_1]",
		"[WCSS_WLAN_DATA_0]",
		"[WCSS_WLAN_SET]",
		"[WCSS_WLAN_CLK]",
		"[WCSS_FM_SSBI]",
		"[WCSS_FM_SDI]",
		"[WCSS_BT_DAT_CTL]",
		"[WCSS_BT_DAT_STB]",
		"NC",
		"NC", /* GPIO 50 */
		"NC",
		"NC",
		"NC",
		"NC",
		"NC",
		"NC",
		"NC",
		"NC",
		"NC",
		"NC", /* GPIO 60 */
		"NC",
		"NC",
		"[CDC_PDM0_CLK]",
		"[CDC_PDM0_SYNC]",
		"[CDC_PDM0_TX0]",
		"[CDC_PDM0_RX0]",
		"[CDC_PDM0_RX1]",
		"[CDC_PDM0_RX2]",
		"GPIO-D", /* LS_EXP_GPIO_D, LSEC pin 26 */
		"NC", /* GPIO 70 */
		"NC",
		"NC",
		"NC",
		"NC", /* GPIO 74 */
		"NC",
		"NC",
		"NC",
		"NC",
		"NC",
		"BOOT_CONFIG_0", /* GPIO 80 */
		"BOOT_CONFIG_1",
		"BOOT_CONFIG_2",
		"BOOT_CONFIG_3",
		"NC",
		"NC",
		"BOOT_CONFIG_5",
		"NC",
		"NC",
		"NC",
		"NC", /* GPIO 90 */
		"NC",
		"NC",
		"NC",
		"NC",
		"NC",
		"NC",
		"NC",
		"NC",
		"NC",
		"NC", /* GPIO 100 */
		"NC",
		"NC",
		"NC",
		"SSBI_GPS",
		"NC",
		"NC",
		"KEY_VOLP_N",
		"NC",
		"NC",
		"[LS_EXP_MI2S_WS]", /* GPIO 110 */
		"NC",
		"NC",
		"[LS_EXP_MI2S_SCK]",
		"[LS_EXP_MI2S_DATA0]",
		"GPIO-E", /* LS_EXP_GPIO_E, LSEC pin 27 */
		"NC",
		"[DSI2HDMI_MI2S_WS]",
		"[DSI2HDMI_MI2S_SCK]",
		"[DSI2HDMI_MI2S_DATA0]",
		"USR_LED_2_CTRL", /* GPIO 120 */
		"SB_HS_ID";

	msmgpio_leds: msmgpio-leds {
		pins = "gpio21", "gpio120";
		function = "gpio";
@@ -833,6 +799,12 @@ msm_key_volp_n_default: msm-key-volp-n-default {
};

&pm8916_gpios {
	gpio-line-names =
		"USR_LED_3_CTRL",
		"USR_LED_4_CTRL",
		"USB_HUB_RESET_N_PM",
		"USB_SW_SEL_PM";

	usb_hub_reset_pm: usb-hub-reset-pm {
		pins = "gpio3";
		function = PMIC_GPIO_FUNC_NORMAL;
@@ -875,6 +847,12 @@ pm8916_gpios_leds: pm8916-gpios-leds {
};

&pm8916_mpps {
	gpio-line-names =
		"VDD_PX_BIAS",
		"WLAN_LED_CTRL",
		"BT_LED_CTRL",
		"GPIO-F"; /* LS_EXP_GPIO_F, LSEC pin 28 */

	pinctrl-names = "default";
	pinctrl-0 = <&ls_exp_gpio_f>;

diff --git a/arch/arm64/boot/dts/qcom/msm8916-longcheer-l8150.dts b/arch/arm64/boot/dts/qcom/msm8916-longcheer-l8150.dts
index 9f2c8e94fd26..68d89a8acbcf 100644
--- a/arch/arm64/boot/dts/qcom/msm8916-longcheer-l8150.dts
+++ b/arch/arm64/boot/dts/qcom/msm8916-longcheer-l8150.dts
@@ -29,61 +29,6 @@ wcnss_mem: wcnss@8b600000 {
		};
	};

	soc {
		sdhci@7824000 {
			status = "okay";

			vmmc-supply = <&pm8916_l8>;
			vqmmc-supply = <&pm8916_l5>;

			pinctrl-names = "default", "sleep";
			pinctrl-0 = <&sdc1_clk_on &sdc1_cmd_on &sdc1_data_on>;
			pinctrl-1 = <&sdc1_clk_off &sdc1_cmd_off &sdc1_data_off>;
		};

		sdhci@7864000 {
			status = "okay";

			vmmc-supply = <&pm8916_l11>;
			vqmmc-supply = <&pm8916_l12>;

			pinctrl-names = "default", "sleep";
			pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on>;
			pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off>;

			non-removable;
		};

		serial@78b0000 {
			status = "okay";
			pinctrl-names = "default", "sleep";
			pinctrl-0 = <&blsp1_uart2_default>;
			pinctrl-1 = <&blsp1_uart2_sleep>;
		};

		usb@78d9000 {
			status = "okay";
			dr_mode = "peripheral";
			extcon = <&usb_vbus>;

			hnp-disable;
			srp-disable;
			adp-disable;

			ulpi {
				phy {
					extcon = <&usb_vbus>;
					v1p8-supply = <&pm8916_l7>;
					v3p3-supply = <&pm8916_l13>;
				};
			};
		};

		wcnss@a21b000 {
			status = "okay";
		};
	};

	// FIXME: Use extcon device provided by charger driver when available
	usb_vbus: usb-vbus {
		compatible = "linux,extcon-usb-gpio";
@@ -108,6 +53,42 @@ volume-up {
	};
};

&blsp1_uart2 {
	status = "okay";

	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&blsp1_uart2_default>;
	pinctrl-1 = <&blsp1_uart2_sleep>;
};

&pronto {
	status = "okay";
};

&sdhc_1 {
	status = "okay";

	vmmc-supply = <&pm8916_l8>;
	vqmmc-supply = <&pm8916_l5>;

	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&sdc1_clk_on &sdc1_cmd_on &sdc1_data_on>;
	pinctrl-1 = <&sdc1_clk_off &sdc1_cmd_off &sdc1_data_off>;
};

&sdhc_2 {
	status = "okay";

	vmmc-supply = <&pm8916_l11>;
	vqmmc-supply = <&pm8916_l12>;

	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on>;
	pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off>;

	non-removable;
};

&spmi_bus {
	pm8916@0 {
		pon@800 {
@@ -121,6 +102,22 @@ volume-down {
	};
};

&usb {
	status = "okay";
	dr_mode = "peripheral";
	extcon = <&usb_vbus>;

	hnp-disable;
	srp-disable;
	adp-disable;
};

&usb_hs_phy {
	extcon = <&usb_vbus>;
	v1p8-supply = <&pm8916_l7>;
	v3p3-supply = <&pm8916_l13>;
};

&smd_rpm_regulators {
	vdd_l1_l2_l3-supply = <&pm8916_s3>;
	vdd_l4_l5_l6-supply = <&pm8916_s4>;
diff --git a/arch/arm64/boot/dts/qcom/msm8916-mtp.dtsi b/arch/arm64/boot/dts/qcom/msm8916-mtp.dtsi
index 0c6e81fb8c01..453e6acb5203 100644
--- a/arch/arm64/boot/dts/qcom/msm8916-mtp.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm8916-mtp.dtsi
@@ -15,13 +15,11 @@ aliases {
	chosen {
		stdout-path = "serial0";
	};
};

	soc {
		serial@78b0000 {
			status = "okay";
			pinctrl-names = "default", "sleep";
			pinctrl-0 = <&blsp1_uart2_default>;
			pinctrl-1 = <&blsp1_uart2_sleep>;
		};
	};
&blsp1_uart2 {
	status = "okay";
	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&blsp1_uart2_default>;
	pinctrl-1 = <&blsp1_uart2_sleep>;
};
diff --git a/arch/arm64/boot/dts/qcom/msm8916-samsung-a2015-common.dtsi b/arch/arm64/boot/dts/qcom/msm8916-samsung-a2015-common.dtsi
index a0c00d9d62c4..89b1418eeeb4 100644
--- a/arch/arm64/boot/dts/qcom/msm8916-samsung-a2015-common.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm8916-samsung-a2015-common.dtsi
@@ -23,78 +23,6 @@ tz-apps@85500000 {
		};
	};

	soc {
		sdhci@7824000 {
			status = "okay";

			vmmc-supply = <&pm8916_l8>;
			vqmmc-supply = <&pm8916_l5>;

			pinctrl-names = "default", "sleep";
			pinctrl-0 = <&sdc1_clk_on &sdc1_cmd_on &sdc1_data_on>;
			pinctrl-1 = <&sdc1_clk_off &sdc1_cmd_off &sdc1_data_off>;
		};

		sdhci@7864000 {
			status = "okay";

			vmmc-supply = <&pm8916_l11>;
			vqmmc-supply = <&pm8916_l12>;

			pinctrl-names = "default", "sleep";
			pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdc2_cd_on>;
			pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off &sdc2_cd_off>;

			cd-gpios = <&msmgpio 38 GPIO_ACTIVE_LOW>;
		};

		serial@78b0000 {
			status = "okay";
			pinctrl-names = "default", "sleep";
			pinctrl-0 = <&blsp1_uart2_default>;
			pinctrl-1 = <&blsp1_uart2_sleep>;
		};

		usb@78d9000 {
			status = "okay";
			extcon = <&muic>, <&muic>;

			hnp-disable;
			srp-disable;
			adp-disable;

			ulpi {
				phy {
					extcon = <&muic>;
					v1p8-supply = <&pm8916_l7>;
					v3p3-supply = <&pm8916_l13>;
				};
			};
		};

		mdss@1a00000 {
			dsi@1a98000 {
				#address-cells = <1>;
				#size-cells = <0>;

				vdda-supply = <&pm8916_l2>;
				vddio-supply = <&pm8916_l6>;

				pinctrl-names = "default", "sleep";
				pinctrl-0 = <&mdss_default>;
				pinctrl-1 = <&mdss_sleep>;
			};

			dsi-phy@1a98300 {
				vddio-supply = <&pm8916_l6>;
			};
		};

		wcnss@a21b000 {
			status = "okay";
		};
	};

	gpio-keys {
		compatible = "gpio-keys";

@@ -186,6 +114,58 @@ magnetometer@12 {
	};
};

&blsp1_uart2 {
	status = "okay";

	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&blsp1_uart2_default>;
	pinctrl-1 = <&blsp1_uart2_sleep>;
};

&dsi0 {
	#address-cells = <1>;
	#size-cells = <0>;

	vdda-supply = <&pm8916_l2>;
	vddio-supply = <&pm8916_l6>;

	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&mdss_default>;
	pinctrl-1 = <&mdss_sleep>;
};

&dsi_phy0 {
	vddio-supply = <&pm8916_l6>;
};

&pronto {
	status = "okay";
};

&sdhc_1 {
	status = "okay";

	vmmc-supply = <&pm8916_l8>;
	vqmmc-supply = <&pm8916_l5>;

	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&sdc1_clk_on &sdc1_cmd_on &sdc1_data_on>;
	pinctrl-1 = <&sdc1_clk_off &sdc1_cmd_off &sdc1_data_off>;
};

&sdhc_2 {
	status = "okay";

	vmmc-supply = <&pm8916_l11>;
	vqmmc-supply = <&pm8916_l12>;

	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdc2_cd_on>;
	pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off &sdc2_cd_off>;

	cd-gpios = <&msmgpio 38 GPIO_ACTIVE_LOW>;
};

&spmi_bus {
	pm8916@0 {
		pon@800 {
@@ -199,6 +179,21 @@ volume-down {
	};
};

&usb {
	status = "okay";
	extcon = <&muic>, <&muic>;

	hnp-disable;
	srp-disable;
	adp-disable;
};

&usb_hs_phy {
	extcon = <&muic>;
	v1p8-supply = <&pm8916_l7>;
	v3p3-supply = <&pm8916_l13>;
};

&smd_rpm_regulators {
	vdd_l1_l2_l3-supply = <&pm8916_s3>;
	vdd_l4_l5_l6-supply = <&pm8916_s4>;
-- 
2.27.0

[PATCH 06/10] arm64: dts: qcom: pm8916: Add resin node Export this patch

Stephan Gerhold
Right now we define the entire pm8916 resin node separately in
the board-specific device tree part, including the interrupt that
belongs to PM8916.

As a feature of the PMIC it should be declared in pm8916.dtsi,
disabled by default. Like all other optional components it can then
by enabled and configured in the board-specific device tree part.

Signed-off-by: Stephan Gerhold <stephan@gerhold.net>
---
 arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi     | 19 +++++--------------
 .../boot/dts/qcom/msm8916-longcheer-l8150.dts | 18 +++++-------------
 .../qcom/msm8916-samsung-a2015-common.dtsi    | 18 +++++-------------
 arch/arm64/boot/dts/qcom/pm8916.dtsi          |  8 ++++++++
 4 files changed, 23 insertions(+), 40 deletions(-)

diff --git a/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi b/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
index 89cc53ddf6b5..0627ef9bd54a 100644
--- a/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
+++ b/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
@@ -323,6 +323,11 @@ &lpass {
	status = "okay";
};

&pm8916_resin {
	status = "okay";
	linux,code = <KEY_VOLUMEDOWN>;
};

&pronto {
	status = "okay";
};
@@ -393,20 +398,6 @@ codec {
	};
};

&spmi_bus {
	pm8916_0: pm8916@0 {
		pon@800 {
			resin {
				compatible = "qcom,pm8941-resin";
				interrupts = <0x0 0x8 1 IRQ_TYPE_EDGE_BOTH>;
				debounce = <15625>;
				bias-pull-up;
				linux,code = <KEY_VOLUMEDOWN>;
			};
		};
	};
};

&usb {
	status = "okay";
	extcon = <&usb_id>, <&usb_id>;
diff --git a/arch/arm64/boot/dts/qcom/msm8916-longcheer-l8150.dts b/arch/arm64/boot/dts/qcom/msm8916-longcheer-l8150.dts
index 68d89a8acbcf..90ce0f96eda4 100644
--- a/arch/arm64/boot/dts/qcom/msm8916-longcheer-l8150.dts
+++ b/arch/arm64/boot/dts/qcom/msm8916-longcheer-l8150.dts
@@ -61,6 +61,11 @@ &blsp1_uart2 {
	pinctrl-1 = <&blsp1_uart2_sleep>;
};

&pm8916_resin {
	status = "okay";
	linux,code = <KEY_VOLUMEDOWN>;
};

&pronto {
	status = "okay";
};
@@ -89,19 +94,6 @@ &sdhc_2 {
	non-removable;
};

&spmi_bus {
	pm8916@0 {
		pon@800 {
			volume-down {
				compatible = "qcom,pm8941-resin";
				interrupts = <0x0 0x8 1 IRQ_TYPE_EDGE_BOTH>;
				bias-pull-up;
				linux,code = <KEY_VOLUMEDOWN>;
			};
		};
	};
};

&usb {
	status = "okay";
	dr_mode = "peripheral";
diff --git a/arch/arm64/boot/dts/qcom/msm8916-samsung-a2015-common.dtsi b/arch/arm64/boot/dts/qcom/msm8916-samsung-a2015-common.dtsi
index 89b1418eeeb4..c6eb0b0cd849 100644
--- a/arch/arm64/boot/dts/qcom/msm8916-samsung-a2015-common.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm8916-samsung-a2015-common.dtsi
@@ -138,6 +138,11 @@ &dsi_phy0 {
	vddio-supply = <&pm8916_l6>;
};

&pm8916_resin {
	status = "okay";
	linux,code = <KEY_VOLUMEDOWN>;
};

&pronto {
	status = "okay";
};
@@ -166,19 +171,6 @@ &sdhc_2 {
	cd-gpios = <&msmgpio 38 GPIO_ACTIVE_LOW>;
};

&spmi_bus {
	pm8916@0 {
		pon@800 {
			volume-down {
				compatible = "qcom,pm8941-resin";
				interrupts = <0x0 0x8 1 IRQ_TYPE_EDGE_BOTH>;
				bias-pull-up;
				linux,code = <KEY_VOLUMEDOWN>;
			};
		};
	};
};

&usb {
	status = "okay";
	extcon = <&muic>, <&muic>;
diff --git a/arch/arm64/boot/dts/qcom/pm8916.dtsi b/arch/arm64/boot/dts/qcom/pm8916.dtsi
index 0bcdf0471107..c3f62090aff7 100644
--- a/arch/arm64/boot/dts/qcom/pm8916.dtsi
+++ b/arch/arm64/boot/dts/qcom/pm8916.dtsi
@@ -33,6 +33,14 @@ pwrkey {
				linux,code = <KEY_POWER>;
			};

			pm8916_resin: resin {
				compatible = "qcom,pm8941-resin";
				interrupts = <0x0 0x8 1 IRQ_TYPE_EDGE_BOTH>;
				debounce = <15625>;
				bias-pull-up;
				status = "disabled";
			};

			watchdog {
				compatible = "qcom,pm8916-wdt";
				interrupts = <0x0 0x8 6 IRQ_TYPE_EDGE_RISING>;
-- 
2.27.0

[PATCH 07/10] arm64: dts: qcom: msm8916: Move PM8916-specific parts to msm8916-pm8916.dtsi Export this patch

Stephan Gerhold
Device trees for newer SoCs avoid defining the regulator nodes directly
in the SoC device tree (here: msm8916.dtsi). The reason for this is that
theoretically it is possible to combine the SoC with a different PMIC,
or to use all the regulators in a board-specific way.

Therefore let's remove those from the SoC include (msm8916.dtsi).

In practice, pretty much all MSM8916 boards were combined with PM8916,
and use the regulators in similar ways. After looking at many different
MSM8916 boards (mostly smartphones and tablets), I haven't seen a single
device that isn't using the same regulators for components integrated
into the SoC.

If all boards end up defining all regulators and supplies in the same way
then it is useful to have an include for that, so we can avoid duplicating
it everywhere. If there is really a super special board that does it
differently it could just override some properties or avoid using the
include altogether.

This patch moves the regulator and common supply definitions to
a new include called "msm8916-pm8916.dtsi".

This is also going to be useful when introducing CPR (Core Power
Reduction) later because we can configure the CPU regulator
(pm8916_spmi_s2) for all devices in this common include.

Signed-off-by: Stephan Gerhold <stephan@gerhold.net>
---
arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi     |  3 +-
.../boot/dts/qcom/msm8916-longcheer-l8150.dts |  3 +-
arch/arm64/boot/dts/qcom/msm8916-mtp.dtsi     |  3 +-
arch/arm64/boot/dts/qcom/msm8916-pm8916.dtsi  | 55 +++++++++++++++++++
.../qcom/msm8916-samsung-a2015-common.dtsi    |  3 +-
arch/arm64/boot/dts/qcom/msm8916.dtsi         | 40 --------------
6 files changed, 59 insertions(+), 48 deletions(-)
create mode 100644 arch/arm64/boot/dts/qcom/msm8916-pm8916.dtsi

diff --git a/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi b/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
index 0627ef9bd54a..e07308cca447 100644
--- a/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
+++ b/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
@@ -3,8 +3,7 @@
 * Copyright (c) 2015, The Linux Foundation. All rights reserved.
 */

#include "msm8916.dtsi"
#include "pm8916.dtsi"
#include "msm8916-pm8916.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/pinctrl/qcom,pmic-gpio.h>
diff --git a/arch/arm64/boot/dts/qcom/msm8916-longcheer-l8150.dts b/arch/arm64/boot/dts/qcom/msm8916-longcheer-l8150.dts
index 90ce0f96eda4..0b72da1bb6ca 100644
--- a/arch/arm64/boot/dts/qcom/msm8916-longcheer-l8150.dts
+++ b/arch/arm64/boot/dts/qcom/msm8916-longcheer-l8150.dts
@@ -2,8 +2,7 @@

/dts-v1/;

#include "msm8916.dtsi"
#include "pm8916.dtsi"
#include "msm8916-pm8916.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>

diff --git a/arch/arm64/boot/dts/qcom/msm8916-mtp.dtsi b/arch/arm64/boot/dts/qcom/msm8916-mtp.dtsi
index 453e6acb5203..9c4926326f21 100644
--- a/arch/arm64/boot/dts/qcom/msm8916-mtp.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm8916-mtp.dtsi
@@ -3,8 +3,7 @@
 * Copyright (c) 2014-2015, The Linux Foundation. All rights reserved.
 */

#include "msm8916.dtsi"
#include "pm8916.dtsi"
#include "msm8916-pm8916.dtsi"

/ {
	aliases {
diff --git a/arch/arm64/boot/dts/qcom/msm8916-pm8916.dtsi b/arch/arm64/boot/dts/qcom/msm8916-pm8916.dtsi
new file mode 100644
index 000000000000..d416fe354f82
--- /dev/null
+++ b/arch/arm64/boot/dts/qcom/msm8916-pm8916.dtsi
@@ -0,0 +1,55 @@
// SPDX-License-Identifier: GPL-2.0-only

#include "msm8916.dtsi"
#include "pm8916.dtsi"

&camss {
	vdda-supply = <&pm8916_l2>;
};

&mpss {
	cx-supply = <&pm8916_s1>;
	mx-supply = <&pm8916_l3>;
	pll-supply = <&pm8916_l7>;
};

&pronto {
	vddmx-supply = <&pm8916_l3>;
	vddpx-supply = <&pm8916_l7>;

	iris {
		vddxo-supply = <&pm8916_l7>;
		vddrfa-supply = <&pm8916_s3>;
		vddpa-supply = <&pm8916_l9>;
		vdddig-supply = <&pm8916_l5>;
	};
};

&rpm_requests {
	smd_rpm_regulators: pm8916-regulators {
		compatible = "qcom,rpm-pm8916-regulators";

		pm8916_s1: s1 {};
		pm8916_s3: s3 {};
		pm8916_s4: s4 {};

		pm8916_l1: l1 {};
		pm8916_l2: l2 {};
		pm8916_l3: l3 {};
		pm8916_l4: l4 {};
		pm8916_l5: l5 {};
		pm8916_l6: l6 {};
		pm8916_l7: l7 {};
		pm8916_l8: l8 {};
		pm8916_l9: l9 {};
		pm8916_l10: l10 {};
		pm8916_l11: l11 {};
		pm8916_l12: l12 {};
		pm8916_l13: l13 {};
		pm8916_l14: l14 {};
		pm8916_l15: l15 {};
		pm8916_l16: l16 {};
		pm8916_l17: l17 {};
		pm8916_l18: l18 {};
	};
};
diff --git a/arch/arm64/boot/dts/qcom/msm8916-samsung-a2015-common.dtsi b/arch/arm64/boot/dts/qcom/msm8916-samsung-a2015-common.dtsi
index c6eb0b0cd849..64e9c73953bb 100644
--- a/arch/arm64/boot/dts/qcom/msm8916-samsung-a2015-common.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm8916-samsung-a2015-common.dtsi
@@ -1,7 +1,6 @@
// SPDX-License-Identifier: GPL-2.0-only

#include "msm8916.dtsi"
#include "pm8916.dtsi"
#include "msm8916-pm8916.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/interrupt-controller/irq.h>
diff --git a/arch/arm64/boot/dts/qcom/msm8916.dtsi b/arch/arm64/boot/dts/qcom/msm8916.dtsi
index acbaed23bbdd..141348a92788 100644
--- a/arch/arm64/boot/dts/qcom/msm8916.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm8916.dtsi
@@ -1178,10 +1178,6 @@ mpss: hexagon@4080000 {
			resets = <&scm 0>;
			reset-names = "mss_restart";

			cx-supply = <&pm8916_s1>;
			mx-supply = <&pm8916_l3>;
			pll-supply = <&pm8916_l7>;

			qcom,halt-regs = <&tcsr 0x18000 0x19000 0x1a000>;

			status = "disabled";
@@ -1233,9 +1229,6 @@ pronto: wcnss@a21b000 {
					      <&wcnss_smp2p_in 3 IRQ_TYPE_EDGE_RISING>;
			interrupt-names = "wdog", "fatal", "ready", "handover", "stop-ack";

			vddmx-supply = <&pm8916_l3>;
			vddpx-supply = <&pm8916_l7>;

			qcom,state = <&wcnss_smp2p_out 0>;
			qcom,state-names = "stop";

@@ -1249,11 +1242,6 @@ iris {

				clocks = <&rpmcc RPM_SMD_RF_CLK2>;
				clock-names = "xo";

				vddxo-supply = <&pm8916_l7>;
				vddrfa-supply = <&pm8916_s3>;
				vddpa-supply = <&pm8916_l9>;
				vdddig-supply = <&pm8916_l5>;
			};

			smd-edge {
@@ -1776,7 +1764,6 @@ camss: camss@1b00000 {
				"csi_vfe0",
				"vfe_ahb",
				"vfe_axi";
			vdda-supply = <&pm8916_l2>;
			iommus = <&apps_iommu 3>;
			status = "disabled";
			ports {
@@ -1829,33 +1816,6 @@ rpmcc: qcom,rpmcc {
					compatible = "qcom,rpmcc-msm8916";
					#clock-cells = <1>;
				};

				smd_rpm_regulators: pm8916-regulators {
					compatible = "qcom,rpm-pm8916-regulators";

					pm8916_s1: s1 {};
					pm8916_s3: s3 {};
					pm8916_s4: s4 {};

					pm8916_l1: l1 {};
					pm8916_l2: l2 {};
					pm8916_l3: l3 {};
					pm8916_l4: l4 {};
					pm8916_l5: l5 {};
					pm8916_l6: l6 {};
					pm8916_l7: l7 {};
					pm8916_l8: l8 {};
					pm8916_l9: l9 {};
					pm8916_l10: l10 {};
					pm8916_l11: l11 {};
					pm8916_l12: l12 {};
					pm8916_l13: l13 {};
					pm8916_l14: l14 {};
					pm8916_l15: l15 {};
					pm8916_l16: l16 {};
					pm8916_l17: l17 {};
					pm8916_l18: l18 {};
				};
			};
		};
	};
-- 
2.27.0

[PATCH 08/10] arm64: dts: qcom: msm8916: Move more supplies to msm8916-pm8916.dtsi Export this patch

Stephan Gerhold
So far we had some supplies defined for all boards in msm8916.dtsi,
while others were duplicated into every board-specific device tree.

Now that we have msm8916-pm8916.dtsi as a common include for all
standard MSM8916 devices using PM8916, move the remaining common
supplies to msm8916-pm8916.dtsi to reduce duplication a bit.

Signed-off-by: Stephan Gerhold <stephan@gerhold.net>
---
 arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi     | 15 ------------
 .../boot/dts/qcom/msm8916-longcheer-l8150.dts |  8 -------
 arch/arm64/boot/dts/qcom/msm8916-pm8916.dtsi  | 24 +++++++++++++++++++
 .../qcom/msm8916-samsung-a2015-common.dtsi    | 15 ------------
 4 files changed, 24 insertions(+), 38 deletions(-)

diff --git a/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi b/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
index e07308cca447..91852f929141 100644
--- a/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
+++ b/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
@@ -301,9 +301,6 @@ ov5640_ep: endpoint {
};

&dsi0 {
	vdda-supply = <&pm8916_l2>;
	vddio-supply = <&pm8916_l6>;

	ports {
		port@1 {
			endpoint {
@@ -314,10 +311,6 @@ endpoint {
	};
};

&dsi_phy0 {
	vddio-supply = <&pm8916_l6>;
};

&lpass {
	status = "okay";
};
@@ -334,9 +327,6 @@ &pronto {
&sdhc_1 {
	status = "okay";

	vmmc-supply = <&pm8916_l8>;
	vqmmc-supply = <&pm8916_l5>;

	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&sdc1_clk_on &sdc1_cmd_on &sdc1_data_on>;
	pinctrl-1 = <&sdc1_clk_off &sdc1_cmd_off &sdc1_data_off>;
@@ -345,9 +335,6 @@ &sdhc_1 {
&sdhc_2 {
	status = "okay";

	vmmc-supply = <&pm8916_l11>;
	vqmmc-supply = <&pm8916_l12>;

	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdc2_cd_on>;
	pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off &sdc2_cd_off>;
@@ -410,8 +397,6 @@ &usb {
};

&usb_hs_phy {
	v1p8-supply = <&pm8916_l7>;
	v3p3-supply = <&pm8916_l13>;
	extcon = <&usb_id>;
};

diff --git a/arch/arm64/boot/dts/qcom/msm8916-longcheer-l8150.dts b/arch/arm64/boot/dts/qcom/msm8916-longcheer-l8150.dts
index 0b72da1bb6ca..8a6a9cd4a3fe 100644
--- a/arch/arm64/boot/dts/qcom/msm8916-longcheer-l8150.dts
+++ b/arch/arm64/boot/dts/qcom/msm8916-longcheer-l8150.dts
@@ -72,9 +72,6 @@ &pronto {
&sdhc_1 {
	status = "okay";

	vmmc-supply = <&pm8916_l8>;
	vqmmc-supply = <&pm8916_l5>;

	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&sdc1_clk_on &sdc1_cmd_on &sdc1_data_on>;
	pinctrl-1 = <&sdc1_clk_off &sdc1_cmd_off &sdc1_data_off>;
@@ -83,9 +80,6 @@ &sdhc_1 {
&sdhc_2 {
	status = "okay";

	vmmc-supply = <&pm8916_l11>;
	vqmmc-supply = <&pm8916_l12>;

	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on>;
	pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off>;
@@ -105,8 +99,6 @@ &usb {

&usb_hs_phy {
	extcon = <&usb_vbus>;
	v1p8-supply = <&pm8916_l7>;
	v3p3-supply = <&pm8916_l13>;
};

&smd_rpm_regulators {
diff --git a/arch/arm64/boot/dts/qcom/msm8916-pm8916.dtsi b/arch/arm64/boot/dts/qcom/msm8916-pm8916.dtsi
index d416fe354f82..cd626e7db599 100644
--- a/arch/arm64/boot/dts/qcom/msm8916-pm8916.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm8916-pm8916.dtsi
@@ -7,6 +7,15 @@ &camss {
	vdda-supply = <&pm8916_l2>;
};

&dsi0 {
	vdda-supply = <&pm8916_l2>;
	vddio-supply = <&pm8916_l6>;
};

&dsi_phy0 {
	vddio-supply = <&pm8916_l6>;
};

&mpss {
	cx-supply = <&pm8916_s1>;
	mx-supply = <&pm8916_l3>;
@@ -25,6 +34,21 @@ iris {
	};
};

&sdhc_1 {
	vmmc-supply = <&pm8916_l8>;
	vqmmc-supply = <&pm8916_l5>;
};

&sdhc_2 {
	vmmc-supply = <&pm8916_l11>;
	vqmmc-supply = <&pm8916_l12>;
};

&usb_hs_phy {
	v1p8-supply = <&pm8916_l7>;
	v3p3-supply = <&pm8916_l13>;
};

&rpm_requests {
	smd_rpm_regulators: pm8916-regulators {
		compatible = "qcom,rpm-pm8916-regulators";
diff --git a/arch/arm64/boot/dts/qcom/msm8916-samsung-a2015-common.dtsi b/arch/arm64/boot/dts/qcom/msm8916-samsung-a2015-common.dtsi
index 64e9c73953bb..f1ddb23ac3c3 100644
--- a/arch/arm64/boot/dts/qcom/msm8916-samsung-a2015-common.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm8916-samsung-a2015-common.dtsi
@@ -125,18 +125,11 @@ &dsi0 {
	#address-cells = <1>;
	#size-cells = <0>;

	vdda-supply = <&pm8916_l2>;
	vddio-supply = <&pm8916_l6>;

	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&mdss_default>;
	pinctrl-1 = <&mdss_sleep>;
};

&dsi_phy0 {
	vddio-supply = <&pm8916_l6>;
};

&pm8916_resin {
	status = "okay";
	linux,code = <KEY_VOLUMEDOWN>;
@@ -149,9 +142,6 @@ &pronto {
&sdhc_1 {
	status = "okay";

	vmmc-supply = <&pm8916_l8>;
	vqmmc-supply = <&pm8916_l5>;

	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&sdc1_clk_on &sdc1_cmd_on &sdc1_data_on>;
	pinctrl-1 = <&sdc1_clk_off &sdc1_cmd_off &sdc1_data_off>;
@@ -160,9 +150,6 @@ &sdhc_1 {
&sdhc_2 {
	status = "okay";

	vmmc-supply = <&pm8916_l11>;
	vqmmc-supply = <&pm8916_l12>;

	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdc2_cd_on>;
	pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off &sdc2_cd_off>;
@@ -181,8 +168,6 @@ &usb {

&usb_hs_phy {
	extcon = <&muic>;
	v1p8-supply = <&pm8916_l7>;
	v3p3-supply = <&pm8916_l13>;
};

&smd_rpm_regulators {
-- 
2.27.0

[PATCH 09/10] arm64: dts: qcom: msm8916: Set default pinctrl for blsp1_uart1/2 Export this patch

Stephan Gerhold
Right now some device nodes set default pinctrl within msm8916.dtsi
(e.g. I2C, SPI), but for others it needs to be explicitly set in the
board-specific device tree (e.g. UART).

While it is theoretically possible that some super special board
needs different pinctrl for these, in practice pretty much every
board ends up using the common pinctrl definitions.

Make this consistent by also defining the common pinctrl properties
for blsp1_uart1 and blsp1_uart2 so we don't need to copy this for every
board. If there is really such a super special board it could just
override these properties with custom pinctrl or make minor modifications
to the common pinctrl configurations provided by msm8916-pins.dtsi.

Also move #address-cells/#size-cells for &dsi0 to msm8916.dtsi
since this is specific to the DSI node, not the board.

Signed-off-by: Stephan Gerhold <stephan@gerhold.net>
---
 arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi                | 8 --------
 arch/arm64/boot/dts/qcom/msm8916-longcheer-l8150.dts     | 4 ----
 arch/arm64/boot/dts/qcom/msm8916-mtp.dtsi                | 3 ---
 .../boot/dts/qcom/msm8916-samsung-a2015-common.dtsi      | 7 -------
 arch/arm64/boot/dts/qcom/msm8916.dtsi                    | 9 +++++++++
 5 files changed, 9 insertions(+), 22 deletions(-)

diff --git a/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi b/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
index 91852f929141..1ecc49e36319 100644
--- a/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
+++ b/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
@@ -235,19 +235,11 @@ &blsp_spi5 {
&blsp1_uart1 {
	status = "okay";
	label = "LS-UART0";

	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&blsp1_uart1_default>;
	pinctrl-1 = <&blsp1_uart1_sleep>;
};

&blsp1_uart2 {
	status = "okay";
	label = "LS-UART1";

	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&blsp1_uart2_default>;
	pinctrl-1 = <&blsp1_uart2_sleep>;
};

&camss {
diff --git a/arch/arm64/boot/dts/qcom/msm8916-longcheer-l8150.dts b/arch/arm64/boot/dts/qcom/msm8916-longcheer-l8150.dts
index 8a6a9cd4a3fe..dec5e3ba7df4 100644
--- a/arch/arm64/boot/dts/qcom/msm8916-longcheer-l8150.dts
+++ b/arch/arm64/boot/dts/qcom/msm8916-longcheer-l8150.dts
@@ -54,10 +54,6 @@ volume-up {

&blsp1_uart2 {
	status = "okay";

	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&blsp1_uart2_default>;
	pinctrl-1 = <&blsp1_uart2_sleep>;
};

&pm8916_resin {
diff --git a/arch/arm64/boot/dts/qcom/msm8916-mtp.dtsi b/arch/arm64/boot/dts/qcom/msm8916-mtp.dtsi
index 9c4926326f21..1bd05046cdeb 100644
--- a/arch/arm64/boot/dts/qcom/msm8916-mtp.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm8916-mtp.dtsi
@@ -18,7 +18,4 @@ chosen {

&blsp1_uart2 {
	status = "okay";
	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&blsp1_uart2_default>;
	pinctrl-1 = <&blsp1_uart2_sleep>;
};
diff --git a/arch/arm64/boot/dts/qcom/msm8916-samsung-a2015-common.dtsi b/arch/arm64/boot/dts/qcom/msm8916-samsung-a2015-common.dtsi
index f1ddb23ac3c3..eb667f4b0e05 100644
--- a/arch/arm64/boot/dts/qcom/msm8916-samsung-a2015-common.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm8916-samsung-a2015-common.dtsi
@@ -115,16 +115,9 @@ magnetometer@12 {

&blsp1_uart2 {
	status = "okay";

	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&blsp1_uart2_default>;
	pinctrl-1 = <&blsp1_uart2_sleep>;
};

&dsi0 {
	#address-cells = <1>;
	#size-cells = <0>;

	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&mdss_default>;
	pinctrl-1 = <&mdss_sleep>;
diff --git a/arch/arm64/boot/dts/qcom/msm8916.dtsi b/arch/arm64/boot/dts/qcom/msm8916.dtsi
index 141348a92788..273faffab369 100644
--- a/arch/arm64/boot/dts/qcom/msm8916.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm8916.dtsi
@@ -487,6 +487,9 @@ blsp1_uart1: serial@78af000 {
			clock-names = "core", "iface";
			dmas = <&blsp_dma 1>, <&blsp_dma 0>;
			dma-names = "rx", "tx";
			pinctrl-names = "default", "sleep";
			pinctrl-0 = <&blsp1_uart1_default>;
			pinctrl-1 = <&blsp1_uart1_sleep>;
			status = "disabled";
		};

@@ -513,6 +516,9 @@ blsp1_uart2: serial@78b0000 {
			clock-names = "core", "iface";
			dmas = <&blsp_dma 3>, <&blsp_dma 2>;
			dma-names = "rx", "tx";
			pinctrl-names = "default", "sleep";
			pinctrl-0 = <&blsp1_uart2_default>;
			pinctrl-1 = <&blsp1_uart2_sleep>;
			status = "disabled";
		};

@@ -1113,6 +1119,9 @@ dsi0: dsi@1a98000 {
				phys = <&dsi_phy0>;
				phy-names = "dsi-phy";

				#address-cells = <1>;
				#size-cells = <0>;

				ports {
					#address-cells = <1>;
					#size-cells = <0>;
-- 
2.27.0

[PATCH 10/10] arm64: dts: qcom: msm8916: Move common USB properties to msm8916.dtsi Export this patch

Stephan Gerhold
Right now we define "hnp-disable", "srp-disable", "adp-disable"
separately for every MSM8916 board that has USB working.

They are needed for USB to work properly if CONFIG_USB_OTG_FSM
is enabled. This is because the chipidea OTG FSM code waits for
interrupts regarding the VBUS state (AVVIS). Those never happen
on MSM8916 because VBUS is always connected to the PMIC instead
of the USB controller.

There was a patch [1] to work around this but ultimately it was
decided that it's easier to disable the OTG FSM altogether using
these properties. This works fine for most use cases, because the
OTG FSM isn't needed for simple dual role host/gadget operation.

Given that these properties are needed for every MSM8916 device,
move them to msm8916.dtsi so we can avoid some more duplication.

[1]: https://lore.kernel.org/lkml/20160707222114.1673-10-stephen.boyd@linaro.org/

Signed-off-by: Stephan Gerhold <stephan@gerhold.net>
---
 arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi                  | 3 ---
 arch/arm64/boot/dts/qcom/msm8916-longcheer-l8150.dts       | 4 ----
 arch/arm64/boot/dts/qcom/msm8916-samsung-a2015-common.dtsi | 4 ----
 arch/arm64/boot/dts/qcom/msm8916.dtsi                      | 3 +++
 4 files changed, 3 insertions(+), 11 deletions(-)

diff --git a/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi b/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
index 1ecc49e36319..e4b655eb153b 100644
--- a/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
+++ b/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
@@ -379,9 +379,6 @@ codec {
&usb {
	status = "okay";
	extcon = <&usb_id>, <&usb_id>;
	adp-disable;
	hnp-disable;
	srp-disable;

	pinctrl-names = "default", "device";
	pinctrl-0 = <&usb_sw_sel_pm &usb_hub_reset_pm>;
diff --git a/arch/arm64/boot/dts/qcom/msm8916-longcheer-l8150.dts b/arch/arm64/boot/dts/qcom/msm8916-longcheer-l8150.dts
index dec5e3ba7df4..b9d3c5d98dd0 100644
--- a/arch/arm64/boot/dts/qcom/msm8916-longcheer-l8150.dts
+++ b/arch/arm64/boot/dts/qcom/msm8916-longcheer-l8150.dts
@@ -87,10 +87,6 @@ &usb {
	status = "okay";
	dr_mode = "peripheral";
	extcon = <&usb_vbus>;

	hnp-disable;
	srp-disable;
	adp-disable;
};

&usb_hs_phy {
diff --git a/arch/arm64/boot/dts/qcom/msm8916-samsung-a2015-common.dtsi b/arch/arm64/boot/dts/qcom/msm8916-samsung-a2015-common.dtsi
index eb667f4b0e05..2ba649bffd4e 100644
--- a/arch/arm64/boot/dts/qcom/msm8916-samsung-a2015-common.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm8916-samsung-a2015-common.dtsi
@@ -153,10 +153,6 @@ &sdhc_2 {
&usb {
	status = "okay";
	extcon = <&muic>, <&muic>;

	hnp-disable;
	srp-disable;
	adp-disable;
};

&usb_hs_phy {
diff --git a/arch/arm64/boot/dts/qcom/msm8916.dtsi b/arch/arm64/boot/dts/qcom/msm8916.dtsi
index 273faffab369..d6a5b60846d9 100644
--- a/arch/arm64/boot/dts/qcom/msm8916.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm8916.dtsi
@@ -802,6 +802,9 @@ usb: usb@78d9000 {
			reset-names = "core";
			phy_type = "ulpi";
			dr_mode = "otg";
			hnp-disable;
			srp-disable;
			adp-disable;
			ahb-burst-config = <0>;
			phy-names = "usb-phy";
			phys = <&usb_hs_phy>;
-- 
2.27.0