diff mbox series

[3/3] ARM: dts: qcom: basic HP TouchPad support

Message ID 9f19df2a0017b71547445ac34df221e827c45bd0.1643075547.git.benwolsieffer@gmail.com
State New
Headers show
Series Add support for the HP TouchPad | expand

Commit Message

Ben Wolsieffer Jan. 25, 2022, 2:07 a.m. UTC
Modify the Dragonboard device tree to support the most basic hardware on
the HP TouchPad. The headphone UART port and eMMC are supported.

Signed-off-by: Ben Wolsieffer <benwolsieffer@gmail.com>
---
 arch/arm/boot/dts/qcom-apq8060-tenderloin.dts | 549 ++----------------
 1 file changed, 45 insertions(+), 504 deletions(-)

Comments

Bjorn Andersson Jan. 26, 2022, 4:13 a.m. UTC | #1
On Mon 24 Jan 20:07 CST 2022, Ben Wolsieffer wrote:

> Modify the Dragonboard device tree to support the most basic hardware on
> the HP TouchPad. The headphone UART port and eMMC are supported.
> 

We typically don't have one commit for the cloning and then one to
update the content, in particular since your diffstat became rather
weird.

That said, got some comments below, things that I wouldn't have spotted
if you sent this as just a new file.

> Signed-off-by: Ben Wolsieffer <benwolsieffer@gmail.com>
> ---

@Linus, please take a look at the regulator question below.

>  arch/arm/boot/dts/qcom-apq8060-tenderloin.dts | 549 ++----------------
>  1 file changed, 45 insertions(+), 504 deletions(-)
> 
> diff --git a/arch/arm/boot/dts/qcom-apq8060-tenderloin.dts b/arch/arm/boot/dts/qcom-apq8060-tenderloin.dts
> index 996e73aa0b0b..e294f3920b9f 100644
> --- a/arch/arm/boot/dts/qcom-apq8060-tenderloin.dts
> +++ b/arch/arm/boot/dts/qcom-apq8060-tenderloin.dts
> @@ -14,6 +14,8 @@ aliases {
>  	};
>  
>  	chosen {
> +		/* Bootloader passes console=tty1, which overrides stdout-path */
> +		bootargs = "console=ttyMSM0,115200 earlycon";
>  		stdout-path = "serial0:115200n8";
>  	};
[..]
>  
>  	soc {
>  		pinctrl@800000 {
> -			/* eMMMC pins, all 8 data lines connected */

It would be nice if you could throw a separate patch on the list that
fixes this spelling mistake in the original as well.

> -			dragon_sdcc1_pins: sdcc1 {
> +			/* eMMC pins, all 8 data lines connected */
> +			emmc_pins: sdcc1 {
>  				mux {
>  					pins = "gpio159", "gpio160", "gpio161",
>  					     "gpio162", "gpio163", "gpio164",
>  					     "gpio165", "gpio166", "gpio167",
>  					     "gpio168";
> -					     function = "sdc1";
> +					function = "sdc1";
>  				};
>  				clk {
>  					pins = "gpio167"; /* SDC1 CLK */
[..]
> @@ -171,205 +77,33 @@ pinconf {
>  				};
>  			};
>  
> -			dragon_gsbi12_i2c_pins: gsbi12_i2c {
> -				mux {
> -					pins = "gpio115", "gpio116";
> -					function = "gsbi12";
> -				};
> -				pinconf {
> -					pins = "gpio115", "gpio116";
> -					drive-strength = <16>;
> -					/* These have external pull-up 4.7kOhm to 1.8V */
> -					bias-disable;
> -				};
> -			};
> -
> -			/* Primary serial port uart 0 pins */
> -			dragon_gsbi12_serial_pins: gsbi12_serial {
> +			/* Headphone UART pins */
> +			headphone_uart_pins: gsbi12_serial {
>  				mux {
>  					pins = "gpio117", "gpio118";
>  					function = "gsbi12";
>  				};
> -				tx {
> -					pins = "gpio117";
> -					drive-strength = <8>;
> -					bias-disable;
> -				};
>  				rx {
> -					pins = "gpio118";
> +					pins = "gpio117";
>  					drive-strength = <2>;
>  					bias-pull-up;
>  				};
> -			};

I find it hard to conclude what the resulting snippet is from this
chunk, did rx swap place from gpio118 to gpio117?

[..]
> @@ -814,14 +378,16 @@ l20 {
>  					bias-pull-down;
>  				};
>  				l21 {
> -					// 1.1 V according to schematic
>  					regulator-min-microvolt = <1200000>;
>  					regulator-max-microvolt = <1200000>;
>  					bias-pull-down;
> -					regulator-always-on;
> +					/*
> +					 * RPM driver can't handle always-on regulators that are
> +					 * supplied by regulators initialized after them.
> +					 */

That looks like an oversight that should be corrected, perhaps it needs
similar attention that was given to the smd-rpm driver recently?

But this makes me wonder, how can this work on the other board? Linus?

> +					// regulator-always-on;
>  				};
>  				l22 {
> -					// 1.2 V according to schematic
>  					regulator-min-microvolt = <1150000>;
>  					regulator-max-microvolt = <1150000>;
>  					bias-pull-down;
> @@ -845,7 +411,7 @@ l25 {
>  				};
>  
>  				s0 {
> -					// regulator-min-microvolt = <500000>;
> +					// regulator-min-microvolt = <800000>;
>  					// regulator-max-microvolt = <1325000>;

This looks like the full range the regulator could do, do you see a
reason for documenting that here? Unless there's a good reason I think
you should leave the commented min/max out.

>  					regulator-min-microvolt = <1100000>;
>  					regulator-max-microvolt = <1100000>;

Regards,
Bjorn
Ben Wolsieffer Jan. 27, 2022, 2:33 a.m. UTC | #2
On Tue, Jan 25, 2022 at 10:13:00PM -0600, Bjorn Andersson wrote:
> On Mon 24 Jan 20:07 CST 2022, Ben Wolsieffer wrote:
> 
> > Modify the Dragonboard device tree to support the most basic hardware on
> > the HP TouchPad. The headphone UART port and eMMC are supported.
> > 
> 
> We typically don't have one commit for the cloning and then one to
> update the content, in particular since your diffstat became rather
> weird.
> 
> That said, got some comments below, things that I wouldn't have spotted
> if you sent this as just a new file.

Ok, I'll squash those for v2.

> > -			dragon_sdcc1_pins: sdcc1 {
> > +			/* eMMC pins, all 8 data lines connected */
> > +			emmc_pins: sdcc1 {
> >  				mux {
> >  					pins = "gpio159", "gpio160", "gpio161",
> >  					     "gpio162", "gpio163", "gpio164",
> >  					     "gpio165", "gpio166", "gpio167",
> >  					     "gpio168";
> > -					     function = "sdc1";
> > +					function = "sdc1";
> >  				};
> >  				clk {
> >  					pins = "gpio167"; /* SDC1 CLK */
> [..]
> > @@ -171,205 +77,33 @@ pinconf {
> >  				};
> >  			};
> >  
> > -			dragon_gsbi12_i2c_pins: gsbi12_i2c {
> > -				mux {
> > -					pins = "gpio115", "gpio116";
> > -					function = "gsbi12";
> > -				};
> > -				pinconf {
> > -					pins = "gpio115", "gpio116";
> > -					drive-strength = <16>;
> > -					/* These have external pull-up 4.7kOhm to 1.8V */
> > -					bias-disable;
> > -				};
> > -			};
> > -
> > -			/* Primary serial port uart 0 pins */
> > -			dragon_gsbi12_serial_pins: gsbi12_serial {
> > +			/* Headphone UART pins */
> > +			headphone_uart_pins: gsbi12_serial {
> >  				mux {
> >  					pins = "gpio117", "gpio118";
> >  					function = "gsbi12";
> >  				};
> > -				tx {
> > -					pins = "gpio117";
> > -					drive-strength = <8>;
> > -					bias-disable;
> > -				};
> >  				rx {
> > -					pins = "gpio118";
> > +					pins = "gpio117";
> >  					drive-strength = <2>;
> >  					bias-pull-up;
> >  				};
> > -			};
> 
> I find it hard to conclude what the resulting snippet is from this
> chunk, did rx swap place from gpio118 to gpio117?

Yes, I made that swap based on comments in the downstream kernel, but,
now that I think about it, there's a good chance those comments are
wrong. The downstream kernel configures both pins as 8 mA drive with no
bias, so no one would ever notice that they were swapped. I think I'll
swap them back in v2. In practice I think the pin configuration makes
little difference, but should I keep the config from the Dragonboard or
match the downstream kernel?

> [..]
> > @@ -814,14 +378,16 @@ l20 {
> >  					bias-pull-down;
> >  				};
> >  				l21 {
> > -					// 1.1 V according to schematic
> >  					regulator-min-microvolt = <1200000>;
> >  					regulator-max-microvolt = <1200000>;
> >  					bias-pull-down;
> > -					regulator-always-on;
> > +					/*
> > +					 * RPM driver can't handle always-on regulators that are
> > +					 * supplied by regulators initialized after them.
> > +					 */
> 
> That looks like an oversight that should be corrected, perhaps it needs
> similar attention that was given to the smd-rpm driver recently?
> 
> But this makes me wonder, how can this work on the other board? Linus?

It probably doesn't work as intended, but doesn't cause a major
problem either. I only noticed the failure while looking through dmesg.
As soon as the RPM driver probe gets to an always on regulator with a not
yet initialized supply, devm_regulator_register() returns -EAGAIN, it
breaks out of the loop, and the rest of the regulators don't get
initialized. The initialization is retried several times during boot
(because of -EAGAIN), but always fails at the same spot. This doesn't
actually seem to cause any visible problem, other than errors in dmesg.

I tried making the driver continue to initialize the rest of the
regulators even if one fails with -EAGAIN, but still return -EAGAIN from
probe(). My thought was that this would cause probe to be retried later,
and initialization would succeed now that the supply regulators were
available, but instead it seems to hang before any console output.

I don't know if the regulator supplies are correct either, because the
downstream kernel doesn't specify them. I also know next to nothing about
the RPM, so I would definitely appreciate a review from someone familiar
with it.

> > +					// regulator-always-on;
> >  				};
> >  				l22 {
> > -					// 1.2 V according to schematic
> >  					regulator-min-microvolt = <1150000>;
> >  					regulator-max-microvolt = <1150000>;
> >  					bias-pull-down;
> > @@ -845,7 +411,7 @@ l25 {
> >  				};
> >  
> >  				s0 {
> > -					// regulator-min-microvolt = <500000>;
> > +					// regulator-min-microvolt = <800000>;
> >  					// regulator-max-microvolt = <1325000>;
> 
> This looks like the full range the regulator could do, do you see a
> reason for documenting that here? Unless there's a good reason I think
> you should leave the commented min/max out.

That was just copied from the Dragonboard DTS, with updated values from
the downstream kernel. I assume some kind of voltage/frequency scaling
driver is needed to actually support a range of voltages here, so I
guess the comments could serve as a reference if that was ever
implemented.
Linus Walleij Jan. 29, 2022, 1:53 a.m. UTC | #3
On Wed, Jan 26, 2022 at 5:13 AM Bjorn Andersson
<bjorn.andersson@linaro.org> wrote:

> @Linus, please take a look at the regulator question below.

OK!

> >  arch/arm/boot/dts/qcom-apq8060-tenderloin.dts | 549 ++----------------

Nice to see some use of all the work put into the APQ8060 support!

FYI: if you want graphics, this work may need to get finished:
https://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-integrator.git/log/?h=apq8060-dragonboard-graphics
(mainly the MMCC)

> >               pinctrl@800000 {
> > -                     /* eMMMC pins, all 8 data lines connected */
>
> It would be nice if you could throw a separate patch on the list that
> fixes this spelling mistake in the original as well.

Yes pls.

> >                               l21 {
> > -                                     // 1.1 V according to schematic
> >                                       regulator-min-microvolt = <1200000>;
> >                                       regulator-max-microvolt = <1200000>;
> >                                       bias-pull-down;
> > -                                     regulator-always-on;
> > +                                     /*
> > +                                      * RPM driver can't handle always-on regulators that are
> > +                                      * supplied by regulators initialized after them.
> > +                                      */
>
> That looks like an oversight that should be corrected, perhaps it needs
> similar attention that was given to the smd-rpm driver recently?

Indeed

> But this makes me wonder, how can this work on the other board? Linus?

I suppose these don't supply anything vital?

I know I have seen some regulators switch off and on but I
may have been confused.


> >                               s0 {
> > -                                     // regulator-min-microvolt = <500000>;
> > +                                     // regulator-min-microvolt = <800000>;
> >                                       // regulator-max-microvolt = <1325000>;
>
> This looks like the full range the regulator could do, do you see a
> reason for documenting that here? Unless there's a good reason I think
> you should leave the commented min/max out.

Yours,
Linus Walleij
diff mbox series

Patch

diff --git a/arch/arm/boot/dts/qcom-apq8060-tenderloin.dts b/arch/arm/boot/dts/qcom-apq8060-tenderloin.dts
index 996e73aa0b0b..e294f3920b9f 100644
--- a/arch/arm/boot/dts/qcom-apq8060-tenderloin.dts
+++ b/arch/arm/boot/dts/qcom-apq8060-tenderloin.dts
@@ -14,6 +14,8 @@  aliases {
 	};
 
 	chosen {
+		/* Bootloader passes console=tty1, which overrides stdout-path */
+		bootargs = "console=ttyMSM0,115200 earlycon";
 		stdout-path = "serial0:115200n8";
 	};
 
@@ -30,67 +32,18 @@  vph: regulator-fixed {
 			regulator-always-on;
 			regulator-boot-on;
 		};
-
-		/* GPIO controlled ethernet power regulator */
-		dragon_veth: xc622a331mrg {
-			compatible = "regulator-fixed";
-			regulator-name = "XC6222A331MR-G";
-			regulator-min-microvolt = <3300000>;
-			regulator-max-microvolt = <3300000>;
-			vin-supply = <&vph>;
-			gpio = <&pm8058_gpio 40 GPIO_ACTIVE_HIGH>;
-			enable-active-high;
-			pinctrl-names = "default";
-			pinctrl-0 = <&dragon_veth_gpios>;
-			regulator-always-on;
-		};
-
-		/* VDDvario fixed regulator */
-		dragon_vario: nds332p {
-			compatible = "regulator-fixed";
-			regulator-name = "NDS332P";
-			regulator-min-microvolt = <1800000>;
-			regulator-max-microvolt = <1800000>;
-			vin-supply = <&pm8058_s3>;
-		};
-
-		/* This is a levelshifter for SDCC5 */
-		dragon_vio_txb: txb0104rgyr {
-			compatible = "regulator-fixed";
-			regulator-name = "Dragon SDCC levelshifter";
-			vin-supply = <&pm8058_l14>;
-			regulator-always-on;
-		};
-	};
-
-	/*
-	 * Capella CM3605 light and proximity sensor mounted directly
-	 * on the sensor board.
-	 */
-	cm3605 {
-		compatible = "capella,cm3605";
-		vdd-supply = <&pm8058_l14>; // 2.85V
-		aset-gpios = <&pm8058_gpio 35 GPIO_ACTIVE_LOW>;
-		capella,aset-resistance-ohms = <100000>;
-		/* Trig on both edges - getting close or far away */
-		interrupts-extended = <&pm8058_gpio 34 IRQ_TYPE_EDGE_BOTH>;
-		/* MPP05 analog input to the XOADC */
-		io-channels = <&xoadc 0x00 0x05>;
-		io-channel-names = "aout";
-		pinctrl-names = "default";
-		pinctrl-0 = <&dragon_cm3605_gpios>, <&dragon_cm3605_mpps>;
 	};
 
 	soc {
 		pinctrl@800000 {
-			/* eMMMC pins, all 8 data lines connected */
-			dragon_sdcc1_pins: sdcc1 {
+			/* eMMC pins, all 8 data lines connected */
+			emmc_pins: sdcc1 {
 				mux {
 					pins = "gpio159", "gpio160", "gpio161",
 					     "gpio162", "gpio163", "gpio164",
 					     "gpio165", "gpio166", "gpio167",
 					     "gpio168";
-					     function = "sdc1";
+					function = "sdc1";
 				};
 				clk {
 					pins = "gpio167"; /* SDC1 CLK */
@@ -111,54 +64,7 @@  data {
 				};
 			};
 
-			/*
-			 * The SDCC3 pins are hardcoded (non-muxable) but need some pin
-			 * configuration.
-			 */
-			dragon_sdcc3_pins: sdcc3 {
-				clk {
-					pins = "sdc3_clk";
-					drive-strength = <8>;
-					bias-disable;
-				};
-				cmd {
-					pins = "sdc3_cmd";
-					drive-strength = <8>;
-					bias-pull-up;
-				};
-				data {
-					pins = "sdc3_data";
-					drive-strength = <8>;
-					bias-pull-up;
-				};
-			};
-
-			/* Second SD card slot pins */
-			dragon_sdcc5_pins: sdcc5 {
-				mux {
-					pins = "gpio95", "gpio96", "gpio97",
-					    "gpio98", "gpio99", "gpio100";
-					function = "sdc5";
-				};
-				clk {
-					pins = "gpio97"; /* SDC5 CLK */
-					drive-strength = <16>;
-					bias-disable;
-				};
-				cmd {
-					pins = "gpio95"; /* SDC5 CMD */
-					drive-strength = <10>;
-					bias-pull-up;
-				};
-				data {
-					/* SDC5 D0 to D3 */
-					pins = "gpio96", "gpio98", "gpio99", "gpio100";
-					drive-strength = <10>;
-					bias-pull-up;
-				};
-			};
-
-			dragon_gsbi8_i2c_pins: gsbi8_i2c {
+			gsbi8_i2c_pins: gsbi8_i2c {
 				mux {
 					pins = "gpio64", "gpio65";
 					function = "gsbi8";
@@ -171,205 +77,33 @@  pinconf {
 				};
 			};
 
-			dragon_gsbi12_i2c_pins: gsbi12_i2c {
-				mux {
-					pins = "gpio115", "gpio116";
-					function = "gsbi12";
-				};
-				pinconf {
-					pins = "gpio115", "gpio116";
-					drive-strength = <16>;
-					/* These have external pull-up 4.7kOhm to 1.8V */
-					bias-disable;
-				};
-			};
-
-			/* Primary serial port uart 0 pins */
-			dragon_gsbi12_serial_pins: gsbi12_serial {
+			/* Headphone UART pins */
+			headphone_uart_pins: gsbi12_serial {
 				mux {
 					pins = "gpio117", "gpio118";
 					function = "gsbi12";
 				};
-				tx {
-					pins = "gpio117";
-					drive-strength = <8>;
-					bias-disable;
-				};
 				rx {
-					pins = "gpio118";
+					pins = "gpio117";
 					drive-strength = <2>;
 					bias-pull-up;
 				};
-			};
-
-			dragon_ebi2_pins: ebi2 {
-				/*
-				 * Pins used by EBI2 on the Dragonboard, actually only
-				 * CS2 is used by a real peripheral. CS0 is just
-				 * routed to a test point.
-				 */
-				mux0 {
-					pins =
-					    /* "gpio39", CS1A_N this is not good to mux */
-					    "gpio40", /* CS2A_N */
-					    "gpio134"; /* CS0_N testpoint TP29 */
-					function = "ebi2cs";
-				};
-				mux1 {
-					pins =
-					    /* EBI2_ADDR_7 downto EBI2_ADDR_0 address bus */
-					    "gpio123", "gpio124", "gpio125", "gpio126",
-					    "gpio127", "gpio128", "gpio129", "gpio130",
-					    /* EBI2_DATA_15 downto EBI2_DATA_0 data bus */
-					    "gpio135", "gpio136", "gpio137", "gpio138",
-					    "gpio139", "gpio140", "gpio141", "gpio142",
-					    "gpio143", "gpio144", "gpio145", "gpio146",
-					    "gpio147", "gpio148", "gpio149", "gpio150",
-					    "gpio151", /* EBI2_OE_N */
-					    "gpio153", /* EBI2_ADV */
-					    "gpio157"; /* EBI2_WE_N */
-					function = "ebi2";
+				tx {
+					pins = "gpio118";
+					drive-strength = <8>;
+					bias-disable;
 				};
-			};
-
-			/* Interrupt line for the KXSD9 accelerometer */
-			dragon_kxsd9_gpios: kxsd9 {
-				irq {
-					pins = "gpio57"; /* IRQ line */
-					bias-pull-up;
+				/* Connect headphone jack to UART rather than audio */
+				enable {
+					pins = "gpio58";
+					function = "gpio";
+					output-high;
 				};
 			};
 		};
 
 		qcom,ssbi@500000 {
 			pmic@0 {
-				keypad@148 {
-					linux,keymap = <
-					MATRIX_KEY(0, 0, KEY_MENU)
-					MATRIX_KEY(0, 2, KEY_1)
-					MATRIX_KEY(0, 3, KEY_4)
-					MATRIX_KEY(0, 4, KEY_7)
-					MATRIX_KEY(1, 0, KEY_UP)
-					MATRIX_KEY(1, 1, KEY_LEFT)
-					MATRIX_KEY(1, 2, KEY_DOWN)
-					MATRIX_KEY(1, 3, KEY_5)
-					MATRIX_KEY(1, 3, KEY_8)
-					MATRIX_KEY(2, 0, KEY_HOME)
-					MATRIX_KEY(2, 1, KEY_REPLY)
-					MATRIX_KEY(2, 2, KEY_2)
-					MATRIX_KEY(2, 3, KEY_6)
-					MATRIX_KEY(3, 0, KEY_VOLUMEUP)
-					MATRIX_KEY(3, 1, KEY_RIGHT)
-					MATRIX_KEY(3, 2, KEY_3)
-					MATRIX_KEY(3, 3, KEY_9)
-					MATRIX_KEY(3, 4, KEY_SWITCHVIDEOMODE)
-					MATRIX_KEY(4, 0, KEY_VOLUMEDOWN)
-					MATRIX_KEY(4, 1, KEY_BACK)
-					MATRIX_KEY(4, 2, KEY_CAMERA)
-					MATRIX_KEY(4, 3, KEY_KBDILLUMTOGGLE)
-					>;
-					keypad,num-rows = <6>;
-					keypad,num-columns = <5>;
-				};
-
-				gpio@150 {
-					dragon_ethernet_gpios: ethernet-gpios {
-						pinconf {
-							pins = "gpio7";
-							function = "normal";
-							input-enable;
-							bias-disable;
-							power-source = <PM8058_GPIO_S3>;
-						};
-					};
-					dragon_bmp085_gpios: bmp085-gpios {
-						pinconf {
-							pins = "gpio16";
-							function = "normal";
-							input-enable;
-							bias-disable;
-							power-source = <PM8058_GPIO_S3>;
-						};
-					};
-					dragon_mpu3050_gpios: mpu3050-gpios {
-						pinconf {
-							pins = "gpio17";
-							function = "normal";
-							input-enable;
-							bias-disable;
-							power-source = <PM8058_GPIO_S3>;
-						};
-					};
-					dragon_sdcc3_gpios: sdcc3-gpios {
-						pinconf {
-							pins = "gpio22";
-							function = "normal";
-							input-enable;
-							bias-disable;
-							power-source = <PM8058_GPIO_S3>;
-						};
-					};
-					dragon_sdcc5_gpios: sdcc5-gpios {
-						pinconf {
-							pins = "gpio26";
-							function = "normal";
-							input-enable;
-							bias-pull-up;
-							qcom,pull-up-strength = <PMIC_GPIO_PULL_UP_30>;
-							power-source = <PM8058_GPIO_S3>;
-						};
-					};
-					dragon_ak8975_gpios: ak8975-gpios {
-						pinconf {
-							pins = "gpio33";
-							function = "normal";
-							input-enable;
-							bias-disable;
-							power-source = <PM8058_GPIO_S3>;
-						};
-					};
-					dragon_cm3605_gpios: cm3605-gpios {
-						/* Pin 34 connected to the proxy IRQ */
-						pinconf_gpio34 {
-							pins = "gpio34";
-							function = "normal";
-							input-enable;
-							bias-disable;
-							power-source = <PM8058_GPIO_S3>;
-						};
-						/* Pin 35 connected to ASET */
-						pinconf_gpio35 {
-							pins = "gpio35";
-							function = "normal";
-							output-high;
-							bias-disable;
-							power-source = <PM8058_GPIO_S3>;
-						};
-					};
-					dragon_veth_gpios: veth-gpios {
-						pinconf {
-							pins = "gpio40";
-							function = "normal";
-							bias-disable;
-							drive-push-pull;
-						};
-					};
-				};
-
-				mpps@50 {
-					dragon_cm3605_mpps: cm3605-mpps-state {
-						pinconf {
-							pins = "mpp5";
-							function = "analog";
-							input-enable;
-							bias-high-impedance;
-							/* Let's use channel 5 */
-							qcom,amux-route = <PMIC_MPP_AMUX_ROUTE_CH5>;
-							power-source = <PM8058_GPIO_S3>;
-						};
-					};
-				};
-
 				xoadc@197 {
 					/* Reference voltage 2.2 V */
 					xoadc-ref-supply = <&pm8058_l18>;
@@ -396,46 +130,6 @@  mpp9@9 {
 						reg = <0x00 0x09>;
 					};
 				};
-
-				led@48 {
-					/*
-					 * The keypad LED @0x48 is routed to
-					 * the sensor board where it is
-					 * connected to an infrared LED
-					 * SFH4650 (60mW, @850nm) next to the
-					 * ambient light and proximity sensor
-					 * Capella Microsystems CM3605.
-					 */
-					compatible = "qcom,pm8058-keypad-led";
-					reg = <0x48>;
-					label = "pm8058:infrared:proximitysensor";
-					default-state = "off";
-					linux,default-trigger = "cm3605";
-				};
-				led@131 {
-					compatible = "qcom,pm8058-led";
-					reg = <0x131>;
-					label = "pm8058:red";
-					default-state = "off";
-				};
-				led@132 {
-					/*
-					 * This is actually green too on my
-					 * board, but documented as yellow.
-					 */
-					compatible = "qcom,pm8058-led";
-					reg = <0x132>;
-					label = "pm8058:yellow";
-					default-state = "off";
-					linux,default-trigger = "mmc0";
-				};
-				led@133 {
-					compatible = "qcom,pm8058-led";
-					reg = <0x133>;
-					label = "pm8058:green";
-					default-state = "on";
-					linux,default-trigger = "heartbeat";
-				};
 			};
 		};
 
@@ -446,151 +140,18 @@  gsbi@19800000 {
 			i2c@19880000 {
 				status = "okay";
 				pinctrl-names = "default";
-				pinctrl-0 = <&dragon_gsbi8_i2c_pins>;
-
-				eeprom@52 {
-					/* A 16KiB Platform ID EEPROM on the CPU carrier board */
-					compatible = "atmel,24c128";
-					reg = <0x52>;
-					vcc-supply = <&pm8058_s3>;
-					pagesize = <64>;
-				};
-				wm8903: wm8903@1a {
-					/* This Woolfson Micro device has an unrouted interrupt line */
-					compatible = "wlf,wm8903";
-					reg = <0x1a>;
-
-					AVDD-supply = <&pm8058_l16>;
-					CPVDD-supply = <&pm8058_l16>;
-					DBVDD-supply = <&pm8058_s3>;
-					DCVDD-supply = <&pm8058_l0>;
-
-					gpio-controller;
-					#gpio-cells = <2>;
-
-					micdet-cfg = <0>;
-					micdet-delay = <100>;
-					gpio-cfg = <0xffffffff 0xffffffff 0 0xffffffff 0xffffffff>;
-				};
+				pinctrl-0 = <&gsbi8_i2c_pins>;
 			};
 		};
 
 		gsbi@19c00000 {
 			status = "okay";
-			qcom,mode = <GSBI_PROT_I2C_UART>;
+			qcom,mode = <GSBI_PROT_UART_W_FC>;
 
 			serial@19c40000 {
 				status = "okay";
 				pinctrl-names = "default";
-				pinctrl-0 = <&dragon_gsbi12_serial_pins>;
-			};
-
-			i2c@19c80000 {
-				status = "okay";
-				pinctrl-names = "default";
-				pinctrl-0 = <&dragon_gsbi12_i2c_pins>;
-
-				ak8975@c {
-					compatible = "asahi-kasei,ak8975";
-					reg = <0x0c>;
-					interrupt-parent = <&pm8058_gpio>;
-					interrupts = <33 IRQ_TYPE_EDGE_RISING>;
-					pinctrl-names = "default";
-					pinctrl-0 = <&dragon_ak8975_gpios>;
-					vid-supply = <&pm8058_lvs0>; // 1.8V
-					vdd-supply = <&pm8058_l14>; // 2.85V
-				};
-				bmp085@77 {
-					compatible = "bosch,bmp085";
-					reg = <0x77>;
-					interrupt-parent = <&pm8058_gpio>;
-					interrupts = <16 IRQ_TYPE_EDGE_RISING>;
-					reset-gpios = <&tlmm 86 GPIO_ACTIVE_LOW>;
-					pinctrl-names = "default";
-					pinctrl-0 = <&dragon_bmp085_gpios>;
-					vddd-supply = <&pm8058_lvs0>; // 1.8V
-					vdda-supply = <&pm8058_l14>; // 2.85V
-				};
-				mpu3050@68 {
-					compatible = "invensense,mpu3050";
-					reg = <0x68>;
-					/*
-					 * GPIO17 is pulled high by a 10k
-					 * resistor to VLOGIC so needs to be
-					 * active low/falling edge.
-					 */
-					interrupts-extended = <&pm8058_gpio 17 IRQ_TYPE_EDGE_FALLING>;
-					pinctrl-names = "default";
-					pinctrl-0 = <&dragon_mpu3050_gpios>;
-					vlogic-supply = <&pm8058_lvs0>; // 1.8V
-					vdd-supply = <&pm8058_l14>; // 2.85V
-
-					/*
-					 * The MPU-3050 acts as a hub for the
-					 * accelerometer.
-					 */
-					i2c-gate {
-						#address-cells = <1>;
-						#size-cells = <0>;
-
-						kxsd9@18 {
-							compatible = "kionix,kxsd9";
-							reg = <0x18>;
-							interrupt-parent = <&tlmm>;
-							interrupts = <57 IRQ_TYPE_EDGE_FALLING>;
-							pinctrl-names = "default";
-							pinctrl-0 = <&dragon_kxsd9_gpios>;
-							iovdd-supply = <&pm8058_lvs0>; // 1.8V
-							vdd-supply = <&pm8058_l14>; // 2.85V
-						};
-					};
-				};
-			};
-		};
-
-		external-bus@1a100000 {
-			/* The EBI2 will instantiate first, then populate its children */
-			status = "okay";
-			pinctrl-names = "default";
-			pinctrl-0 = <&dragon_ebi2_pins>;
-
-			/*
-			 * An on-board SMSC LAN9221 chip for "debug ethernet",
-			 * which is actually just an ordinary ethernet on the
-			 * EBI2. This has a 25MHz chrystal next to it, so no
-			 * clocking is needed.
-			 */
-			ethernet@2,0 {
-				compatible = "smsc,lan9221", "smsc,lan9115";
-				reg = <2 0x0 0x100>;
-				/*
-				 * The second interrupt is the PME interrupt
-				 * for network wakeup, connected to the TLMM.
-				 */
-				interrupts-extended = <&pm8058_gpio 7 IRQ_TYPE_EDGE_FALLING>,
-						    <&tlmm 29 IRQ_TYPE_EDGE_RISING>;
-				reset-gpios = <&tlmm 30 GPIO_ACTIVE_LOW>;
-				vdd33a-supply = <&dragon_veth>;
-				vddvario-supply = <&dragon_vario>;
-				pinctrl-names = "default";
-				pinctrl-0 = <&dragon_ethernet_gpios>;
-				phy-mode = "mii";
-				reg-io-width = <2>;
-				smsc,force-external-phy;
-				smsc,irq-push-pull;
-
-				/*
-				 * SLOW chipselect config
-				 * Delay 9 cycles (140ns@64MHz) between SMSC
-				 * LAN9221 Ethernet controller reads and writes
-				 * on CS2.
-				 */
-				qcom,xmem-recovery-cycles = <0>;
-				qcom,xmem-write-hold-cycles = <3>;
-				qcom,xmem-write-delta-cycles = <31>;
-				qcom,xmem-read-delta-cycles = <28>;
-				qcom,xmem-write-wait-cycles = <9>;
-				qcom,xmem-read-wait-cycles = <9>;
+				pinctrl-0 = <&headphone_uart_pins>;
 			};
 		};
 
@@ -758,13 +319,13 @@  l9 {
 					bias-pull-down;
 				};
 				l10 {
-					regulator-min-microvolt = <2600000>;
-					regulator-max-microvolt = <2600000>;
+					regulator-min-microvolt = <3050000>;
+					regulator-max-microvolt = <3050000>;
 					bias-pull-down;
 				};
 				l11 {
-					regulator-min-microvolt = <1500000>;
-					regulator-max-microvolt = <1500000>;
+					regulator-min-microvolt = <2850000>;
+					regulator-max-microvolt = <2850000>;
 					bias-pull-down;
 				};
 				l12 {
@@ -790,10 +351,13 @@  l16 {
 					regulator-min-microvolt = <1800000>;
 					regulator-max-microvolt = <1800000>;
 					bias-pull-down;
-					regulator-always-on;
+					/*
+					 * RPM driver can't handle always-on regulators that are
+					 * supplied by regulators initialized after them.
+					 */
+					// regulator-always-on;
 				};
 				l17 {
-					// 1.5V according to schematic
 					regulator-min-microvolt = <2600000>;
 					regulator-max-microvolt = <2600000>;
 					bias-pull-down;
@@ -804,8 +368,8 @@  l18 {
 					bias-pull-down;
 				};
 				l19 {
-					regulator-min-microvolt = <2500000>;
-					regulator-max-microvolt = <2500000>;
+					regulator-min-microvolt = <1800000>;
+					regulator-max-microvolt = <1800000>;
 					bias-pull-down;
 				};
 				l20 {
@@ -814,14 +378,16 @@  l20 {
 					bias-pull-down;
 				};
 				l21 {
-					// 1.1 V according to schematic
 					regulator-min-microvolt = <1200000>;
 					regulator-max-microvolt = <1200000>;
 					bias-pull-down;
-					regulator-always-on;
+					/*
+					 * RPM driver can't handle always-on regulators that are
+					 * supplied by regulators initialized after them.
+					 */
+					// regulator-always-on;
 				};
 				l22 {
-					// 1.2 V according to schematic
 					regulator-min-microvolt = <1150000>;
 					regulator-max-microvolt = <1150000>;
 					bias-pull-down;
@@ -845,7 +411,7 @@  l25 {
 				};
 
 				s0 {
-					// regulator-min-microvolt = <500000>;
+					// regulator-min-microvolt = <800000>;
 					// regulator-max-microvolt = <1325000>;
 					regulator-min-microvolt = <1100000>;
 					regulator-max-microvolt = <1100000>;
@@ -853,8 +419,8 @@  s0 {
 					bias-pull-down;
 				};
 				s1 {
-					// regulator-min-microvolt = <500000>;
-					// regulator-max-microvolt = <1250000>;
+					// regulator-min-microvolt = <800000>;
+					// regulator-max-microvolt = <1325000>;
 					regulator-min-microvolt = <1100000>;
 					regulator-max-microvolt = <1100000>;
 					qcom,switch-mode-frequency = <1600000>;
@@ -871,15 +437,15 @@  s3 {
 					regulator-min-microvolt = <1800000>;
 					regulator-max-microvolt = <1800000>;
 					qcom,switch-mode-frequency = <1600000>;
-					regulator-always-on;
 					bias-pull-down;
+					regulator-always-on;
 				};
 				s4 {
 					regulator-min-microvolt = <2200000>;
 					regulator-max-microvolt = <2200000>;
 					qcom,switch-mode-frequency = <1600000>;
-					regulator-always-on;
 					bias-pull-down;
+					regulator-always-on;
 				};
 
 				/* LVS0 and LVS1 are just switches */
@@ -897,41 +463,16 @@  ncp {
 				};
 			};
 		};
+
 		amba {
-			/* Internal 3.69 GiB eMMC */
+			/* Internal 16/32 GiB eMMC */
 			mmc@12400000 {
 				status = "okay";
 				pinctrl-names = "default";
-				pinctrl-0 = <&dragon_sdcc1_pins>;
+				pinctrl-0 = <&emmc_pins>;
 				vmmc-supply = <&pm8901_l5>;
 				vqmmc-supply = <&pm8901_lvs0>;
 			};
-
-			/* External micro SD card, directly connected, pulled up to 2.85 V */
-			mmc@12180000 {
-				status = "okay";
-				/* Enable SSBI GPIO 22 as input, use for card detect */
-				pinctrl-names = "default";
-				pinctrl-0 = <&dragon_sdcc3_pins>, <&dragon_sdcc3_gpios>;
-				cd-gpios = <&pm8058_gpio 22 GPIO_ACTIVE_LOW>;
-				wp-gpios = <&tlmm 110 GPIO_ACTIVE_HIGH>;
-				vmmc-supply = <&pm8058_l14>;
-			};
-
-			/*
-			 * Second external micro SD card, using two TXB104RGYR levelshifters
-			 * to lift from 1.8 V to 2.85 V
-			 */
-			mmc@12200000 {
-				status = "okay";
-				/* Enable SSBI GPIO 26 as input, use for card detect */
-				pinctrl-names = "default";
-				pinctrl-0 = <&dragon_sdcc5_pins>, <&dragon_sdcc5_gpios>;
-				cd-gpios = <&pm8058_gpio 26 GPIO_ACTIVE_LOW>;
-				wp-gpios = <&tlmm 106 GPIO_ACTIVE_HIGH>;
-				vmmc-supply = <&pm8058_l14>;
-				vqmmc-supply = <&dragon_vio_txb>;
-			};
 		};
 	};
 };