diff mbox series

[5/5] arm64: dts: qcom: sm8350-lemonade(p): new devices

Message ID 20231016-nia-sm8350-for-upstream-v1-5-bb557a0af2e9@igalia.com (mailing list archive)
State Handled Elsewhere
Headers show
Series support oneplus-lemonade(p) devices | expand

Commit Message

Nia Espera Oct. 16, 2023, 12:47 p.m. UTC
Device tree files for OnePlus 9 and 9 Pro. Details of supported features
mentioned in the cover letter for this patch series, but for
accessibility also repeated here:

- USB OTG
- UFS
- Framebuffer display
- Touchscreen (for lemonade)
- Power & volume down keys
- Battery reading
- Modem, IPA, and remoteproc bringup

Steps to get booting:

- Wipe dtbo partition
- Flash vbmeta with disabled verity bit
- Flash kernel and initfs to boot partition with CLI args pd_ignore_unused
and clk_ignore_unused
- Flash rootfs to some other partition (probably super or userdata)

Signed-off-by: Nia Espera <nespera@igalia.com>
---
 arch/arm64/boot/dts/qcom/Makefile                  |    2 +
 .../arm64/boot/dts/qcom/sm8350-oneplus-common.dtsi | 1247 ++++++++++++++++++++
 .../boot/dts/qcom/sm8350-oneplus-lemonade.dts      |   82 ++
 .../boot/dts/qcom/sm8350-oneplus-lemonadep.dts     |   37 +
 4 files changed, 1368 insertions(+)

Comments

Caleb Connolly Oct. 16, 2023, 1:02 p.m. UTC | #1
On 16/10/2023 13:47, Nia Espera wrote:
> Device tree files for OnePlus 9 and 9 Pro. Details of supported features
> mentioned in the cover letter for this patch series, but for
> accessibility also repeated here:
> 
> - USB OTG
> - UFS
> - Framebuffer display
> - Touchscreen (for lemonade)
> - Power & volume down keys
> - Battery reading
> - Modem, IPA, and remoteproc bringup
> 
> Steps to get booting:
> 
> - Wipe dtbo partition
> - Flash vbmeta with disabled verity bit
> - Flash kernel and initfs to boot partition with CLI args pd_ignore_unused
> and clk_ignore_unused
> - Flash rootfs to some other partition (probably super or userdata)
> 
> Signed-off-by: Nia Espera <nespera@igalia.com>

Small comment below, for the next revision:

Reviewed-by: Caleb Connolly <caleb.connolly@linaro.org>
> ---
>  arch/arm64/boot/dts/qcom/Makefile                  |    2 +
>  .../arm64/boot/dts/qcom/sm8350-oneplus-common.dtsi | 1247 ++++++++++++++++++++
>  .../boot/dts/qcom/sm8350-oneplus-lemonade.dts      |   82 ++
>  .../boot/dts/qcom/sm8350-oneplus-lemonadep.dts     |   37 +
>  4 files changed, 1368 insertions(+)
> 
> diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
> index 2cca20563a1d..369ad4721b29 100644
> --- a/arch/arm64/boot/dts/qcom/Makefile
> +++ b/arch/arm64/boot/dts/qcom/Makefile
> @@ -211,6 +211,8 @@ dtb-$(CONFIG_ARCH_QCOM)	+= sm8250-xiaomi-elish-csot.dtb
>  dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-hdk.dtb
>  dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-microsoft-surface-duo2.dtb
>  dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-mtp.dtb
> +dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-oneplus-lemonade.dtb
> +dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-oneplus-lemonadep.dtb
>  dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-sony-xperia-sagami-pdx214.dtb
>  dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-sony-xperia-sagami-pdx215.dtb
>  dtb-$(CONFIG_ARCH_QCOM)	+= sm8450-hdk.dtb
> diff --git a/arch/arm64/boot/dts/qcom/sm8350-oneplus-common.dtsi b/arch/arm64/boot/dts/qcom/sm8350-oneplus-common.dtsi
> new file mode 100644
> index 000000000000..2f6768f35259
> --- /dev/null
> +++ b/arch/arm64/boot/dts/qcom/sm8350-oneplus-common.dtsi
> @@ -0,0 +1,1247 @@
> +// SPDX-License-Identifier: BSD-3-Clause
> +/*
> + * Copyright (c) 2023 Caleb Connolly <caleb.connolly@linaro.org>

This is loosely based on some initial work I did, but not to the degree
where this copyright is necessary, feel free to drop it on the next
revision.
> + *
> + * Copyright (c) 2023 Igalia S.L.
> + * Authors:
> + *	Nia Espera <nespera@igalia.com>
> + */
> +
> +#include <dt-bindings/iio/qcom,spmi-adc7-pm8350.h>
> +#include <dt-bindings/iio/qcom,spmi-adc7-pm8350b.h>
> +#define SMB139x_1_SID 0x0b
> +#define SMB139x_2_SID 0x0c
> +#include <dt-bindings/iio/qcom,spmi-adc7-smb139x.h>
> +#include <dt-bindings/pinctrl/qcom,pmic-gpio.h>
> +#include <dt-bindings/regulator/qcom,rpmh-regulator.h>
> +#include "sm8350.dtsi"
> +#include "pm8350.dtsi"
> +#include "pm8350b.dtsi"
> +#include "pm8350c.dtsi"
> +#include "pmk8350.dtsi"
> +#include "pmr735a.dtsi"
> +#include "pmr735b.dtsi"
> +
> +/ {
> +	/* As with the Sony devices, msm-id and board-id aren't needed here */
> +	chassis-type = "handset";
> +	interrupt-parent = <&intc>;
> +

[...]

> +
> +	/*
> +	 * Hack; OP9 bootloader specifically checks that the timer node has
> +	 * this label.
> +	 */
> +	arch_timer: timer {};

For this to work you also need to build the DTB with labels (the -@ flag
to dtc), otherwise this board won't boot. You can add the following to
the Makefile:

DTC_FLAGS_sm8350-oneplus-lemonade := -@
DTC_FLAGS_sm8350-oneplus-lemonadep := -@

See for reference:
https://lore.kernel.org/linux-arm-msm/20231009172717.2695854-1-dmitry.baryshkov@linaro.org/

Regards,
Nia Espera Oct. 16, 2023, 1:14 p.m. UTC | #2
Hey,

On 10/16/23 15:02, Caleb Connolly wrote:
>
> On 16/10/2023 13:47, Nia Espera wrote:
>> Device tree files for OnePlus 9 and 9 Pro. Details of supported features
>> mentioned in the cover letter for this patch series, but for
>> accessibility also repeated here:
>>
>> - USB OTG
>> - UFS
>> - Framebuffer display
>> - Touchscreen (for lemonade)
>> - Power & volume down keys
>> - Battery reading
>> - Modem, IPA, and remoteproc bringup
>>
>> Steps to get booting:
>>
>> - Wipe dtbo partition
>> - Flash vbmeta with disabled verity bit
>> - Flash kernel and initfs to boot partition with CLI args pd_ignore_unused
>> and clk_ignore_unused
>> - Flash rootfs to some other partition (probably super or userdata)
>>
>> Signed-off-by: Nia Espera <nespera@igalia.com>
> Small comment below, for the next revision:
>
> Reviewed-by: Caleb Connolly <caleb.connolly@linaro.org>
>> ---
>>   arch/arm64/boot/dts/qcom/Makefile                  |    2 +
>>   .../arm64/boot/dts/qcom/sm8350-oneplus-common.dtsi | 1247 ++++++++++++++++++++
>>   .../boot/dts/qcom/sm8350-oneplus-lemonade.dts      |   82 ++
>>   .../boot/dts/qcom/sm8350-oneplus-lemonadep.dts     |   37 +
>>   4 files changed, 1368 insertions(+)
>>
>> diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
>> index 2cca20563a1d..369ad4721b29 100644
>> --- a/arch/arm64/boot/dts/qcom/Makefile
>> +++ b/arch/arm64/boot/dts/qcom/Makefile
>> @@ -211,6 +211,8 @@ dtb-$(CONFIG_ARCH_QCOM)	+= sm8250-xiaomi-elish-csot.dtb
>>   dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-hdk.dtb
>>   dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-microsoft-surface-duo2.dtb
>>   dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-mtp.dtb
>> +dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-oneplus-lemonade.dtb
>> +dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-oneplus-lemonadep.dtb
>>   dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-sony-xperia-sagami-pdx214.dtb
>>   dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-sony-xperia-sagami-pdx215.dtb
>>   dtb-$(CONFIG_ARCH_QCOM)	+= sm8450-hdk.dtb
>> diff --git a/arch/arm64/boot/dts/qcom/sm8350-oneplus-common.dtsi b/arch/arm64/boot/dts/qcom/sm8350-oneplus-common.dtsi
>> new file mode 100644
>> index 000000000000..2f6768f35259
>> --- /dev/null
>> +++ b/arch/arm64/boot/dts/qcom/sm8350-oneplus-common.dtsi
>> @@ -0,0 +1,1247 @@
>> +// SPDX-License-Identifier: BSD-3-Clause
>> +/*
>> + * Copyright (c) 2023 Caleb Connolly <caleb.connolly@linaro.org>
> This is loosely based on some initial work I did, but not to the degree
> where this copyright is necessary, feel free to drop it on the next
> revision.
Will do!
>> + *
>> + * Copyright (c) 2023 Igalia S.L.
>> + * Authors:
>> + *	Nia Espera <nespera@igalia.com>
>> + */
>> +
>> +#include <dt-bindings/iio/qcom,spmi-adc7-pm8350.h>
>> +#include <dt-bindings/iio/qcom,spmi-adc7-pm8350b.h>
>> +#define SMB139x_1_SID 0x0b
>> +#define SMB139x_2_SID 0x0c
>> +#include <dt-bindings/iio/qcom,spmi-adc7-smb139x.h>
>> +#include <dt-bindings/pinctrl/qcom,pmic-gpio.h>
>> +#include <dt-bindings/regulator/qcom,rpmh-regulator.h>
>> +#include "sm8350.dtsi"
>> +#include "pm8350.dtsi"
>> +#include "pm8350b.dtsi"
>> +#include "pm8350c.dtsi"
>> +#include "pmk8350.dtsi"
>> +#include "pmr735a.dtsi"
>> +#include "pmr735b.dtsi"
>> +
>> +/ {
>> +	/* As with the Sony devices, msm-id and board-id aren't needed here */
>> +	chassis-type = "handset";
>> +	interrupt-parent = <&intc>;
>> +
> [...]
>
>> +
>> +	/*
>> +	 * Hack; OP9 bootloader specifically checks that the timer node has
>> +	 * this label.
>> +	 */
>> +	arch_timer: timer {};
> For this to work you also need to build the DTB with labels (the -@ flag
> to dtc), otherwise this board won't boot. You can add the following to
> the Makefile:
>
> DTC_FLAGS_sm8350-oneplus-lemonade := -@
> DTC_FLAGS_sm8350-oneplus-lemonadep := -@
This actually isn't necessary if building the image as an Android version 1
image; it will boot fine without, since it won't try to append to the DTB. I
should probably mention to do that in the patch, though.
> See for reference:
> https://lore.kernel.org/linux-arm-msm/20231009172717.2695854-1-dmitry.baryshkov@linaro.org/
>
> Regards,
>
Luca Weiss Oct. 16, 2023, 1:50 p.m. UTC | #3
Hi Nia,

On Mon Oct 16, 2023 at 2:47 PM CEST, Nia Espera wrote:
> Device tree files for OnePlus 9 and 9 Pro. Details of supported features
> mentioned in the cover letter for this patch series, but for
> accessibility also repeated here:
>
> - USB OTG
> - UFS
> - Framebuffer display
> - Touchscreen (for lemonade)
> - Power & volume down keys
> - Battery reading
> - Modem, IPA, and remoteproc bringup
>
> Steps to get booting:
>
> - Wipe dtbo partition
> - Flash vbmeta with disabled verity bit
> - Flash kernel and initfs to boot partition with CLI args pd_ignore_unused
> and clk_ignore_unused
> - Flash rootfs to some other partition (probably super or userdata)
>
> Signed-off-by: Nia Espera <nespera@igalia.com>
> ---
>  arch/arm64/boot/dts/qcom/Makefile                  |    2 +
>  .../arm64/boot/dts/qcom/sm8350-oneplus-common.dtsi | 1247 ++++++++++++++++++++
>  .../boot/dts/qcom/sm8350-oneplus-lemonade.dts      |   82 ++
>  .../boot/dts/qcom/sm8350-oneplus-lemonadep.dts     |   37 +
>  4 files changed, 1368 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
> index 2cca20563a1d..369ad4721b29 100644
> --- a/arch/arm64/boot/dts/qcom/Makefile
> +++ b/arch/arm64/boot/dts/qcom/Makefile
> @@ -211,6 +211,8 @@ dtb-$(CONFIG_ARCH_QCOM)	+= sm8250-xiaomi-elish-csot.dtb
>  dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-hdk.dtb
>  dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-microsoft-surface-duo2.dtb
>  dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-mtp.dtb
> +dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-oneplus-lemonade.dtb
> +dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-oneplus-lemonadep.dtb
>  dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-sony-xperia-sagami-pdx214.dtb
>  dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-sony-xperia-sagami-pdx215.dtb
>  dtb-$(CONFIG_ARCH_QCOM)	+= sm8450-hdk.dtb
> diff --git a/arch/arm64/boot/dts/qcom/sm8350-oneplus-common.dtsi b/arch/arm64/boot/dts/qcom/sm8350-oneplus-common.dtsi
> new file mode 100644
> index 000000000000..2f6768f35259
> --- /dev/null
> +++ b/arch/arm64/boot/dts/qcom/sm8350-oneplus-common.dtsi
> @@ -0,0 +1,1247 @@
> +// SPDX-License-Identifier: BSD-3-Clause
> +/*
> + * Copyright (c) 2023 Caleb Connolly <caleb.connolly@linaro.org>
> + *
> + * Copyright (c) 2023 Igalia S.L.
> + * Authors:
> + *	Nia Espera <nespera@igalia.com>
> + */
> +
> +#include <dt-bindings/iio/qcom,spmi-adc7-pm8350.h>
> +#include <dt-bindings/iio/qcom,spmi-adc7-pm8350b.h>
> +#define SMB139x_1_SID 0x0b
> +#define SMB139x_2_SID 0x0c
> +#include <dt-bindings/iio/qcom,spmi-adc7-smb139x.h>
> +#include <dt-bindings/pinctrl/qcom,pmic-gpio.h>
> +#include <dt-bindings/regulator/qcom,rpmh-regulator.h>
> +#include "sm8350.dtsi"
> +#include "pm8350.dtsi"
> +#include "pm8350b.dtsi"
> +#include "pm8350c.dtsi"
> +#include "pmk8350.dtsi"
> +#include "pmr735a.dtsi"
> +#include "pmr735b.dtsi"
> +
> +/ {
> +	/* As with the Sony devices, msm-id and board-id aren't needed here */
> +	chassis-type = "handset";
> +	interrupt-parent = <&intc>;
> +
> +	chosen {
> +		#address-cells = <2>;
> +		#size-cells = <2>;
> +		ranges;
> +
> +		framebuffer: framebuffer@e4d00000 {
> +			compatible = "simple-framebuffer";
> +			reg = <0 0xe4d00000 0 0x2400000>;
> +			width = <1080>;
> +			height = <2412>;
> +			stride = <(1080 * 4)>;
> +			format = "a8r8g8b8";
> +			/*
> +			 * That's (going to be) a lot of clocks, but it's
> +			 * necessary due to unused clk cleanup & no panel
> +			 * driver yet.
> +			 */
> +			clocks = <&gcc GCC_DISP_HF_AXI_CLK>,
> +				 <&gcc GCC_DISP_SF_AXI_CLK>;
> +		};
> +	};
> +
> +	gpio-keys {
> +		compatible = "gpio-keys";
> +
> +		pinctrl-names = "default";
> +		pinctrl-0 = <&vol_down_n>;
> +
> +		key-vol-up {
> +			label = "Volume Up";
> +			linux,code = <KEY_VOLUMEUP>;
> +			gpios = <&pmk8350_gpios 6 GPIO_ACTIVE_LOW>;
> +			debounce-interval = <15>;
> +			linux,can-disable;
> +			wakeup-source;
> +		};
> +	};
> +
> +	bat: battery {
> +		compatible = "simple-battery";
> +		device-chemistry = "lithium-ion";
> +		voltage-min-design-microvolt = <3200000>;
> +		energy-full-design-microwatt-hours = <15840000>;
> +		charge-full-design-microamp-hours = <2225000>;
> +	};
> +
> +	vph_pwr: vph-pwr-regulator {
> +		compatible = "regulator-fixed";
> +		regulator-name = "vph_pwr";
> +		regulator-min-microvolt = <3700000>;
> +		regulator-max-microvolt = <3700000>;
> +
> +		regulator-always-on;
> +		regulator-boot-on;
> +	};
> +
> +	display_panel_avdd: display_regulator@1 {
> +		compatible = "regulator-fixed";
> +		regulator-name = "display_panel_avdd";
> +		regulator-min-microvolt = <5500000>;
> +		regulator-max-microvolt = <5500000>;
> +		regulator-enable-ramp-delay = <233>;
> +
> +		enable-active-high;
> +		regulator-boot-on;
> +	};
> +
> +	/*
> +	 * Hack; OP9 bootloader specifically checks that the timer node has
> +	 * this label.
> +	 */
> +	arch_timer: timer {};
> +};
> +
> +&reserved_memory {
> +	/* EFI splash screen */
> +	memory@e1000000 {

Don't use memory@ names, this was decided a while ago to not be correct.
I think other devices here use e.g. splash@[..] or something.

> +		reg = <0 0xe4d00000 0 0x02400000>;
> +		no-map;
> +		label = "cont_splash_region";
> +	};
> +
> +	ramoops: ramoops@E9700000 {
> +		compatible = "ramoops";
> +		reg = <0 0xe9700000 0 0x05b8000>;
> +		record-size =	<0x40000>;
> +		console-size =	<0x40000>;
> +		ftrace-size =	<0x200000>;
> +		pmsg-size =	<0x200000>;
> +		devinfo-size =	<0x08000>;
> +		dumpinfo-size =	<0x08000>;
> +		rsv01info-size=	<0x08000>;
> +		rsv02info-size=	<0x08000>;
> +		rsv03info-size=	<0x08000>;
> +		rsv04info-size=	<0x08000>;
> +		rsv05info-size=	<0x08000>;
> +		ecc-size=	<0x0>;

Half of these flags don't exist. Did you run dtbs_check? Also
indentation normally doesn't get padded out in mainline, just do e.g.
record-size = <0x40000>; without the tab.

> +	};
> +
> +	/* bootloader log buffer */
> +	memory@9fff7000 {
> +		reg = <0x00 0x9fff7000 0x00 0x8000>;
> +	};
> +
> +	/* unknown; "param_mem" downstream */
> +	memory@ea700000 {
> +		reg = <0x00 0xea700000 0x00 0x800000>;
> +	};
> +};
> +
> +&apps_rsc {
> +	regulators-0 {
> +		compatible = "qcom,pm8350-rpmh-regulators";
> +		qcom,pmic-id = "b";
> +
> +		vdd-s1-supply = <&vph_pwr>;
> +		vdd-s2-supply = <&vph_pwr>;
> +		vdd-s3-supply = <&vph_pwr>;
> +		vdd-s4-supply = <&vph_pwr>;
> +		vdd-s5-supply = <&vph_pwr>;
> +		vdd-s6-supply = <&vph_pwr>;
> +		vdd-s7-supply = <&vph_pwr>;
> +		vdd-s8-supply = <&vph_pwr>;
> +		vdd-s9-supply = <&vph_pwr>;
> +		vdd-s10-supply = <&vph_pwr>;
> +		vdd-s11-supply = <&vph_pwr>;
> +		vdd-s12-supply = <&vph_pwr>;
> +
> +		vdd-l1-l4-supply = <&pm8350_s11>;
> +		vdd-l2-l7-supply = <&vreg_bob>;
> +		vdd-l3-l5-supply = <&vreg_bob>;
> +		vdd-l6-l9-l10-supply = <&pm8350_s11>;
> +		vdd-l8-supply = <&pmr735a_s2>;
> +
> +		/*
> +		 * ARC regulators:
> +		 * S5 - mx.lvl
> +		 * S6 - gfx.lvl
> +		 * S9 - mxc.lvl
> +		 */
> +
> +		pm8350_s10: smps10 {
> +			regulator-name = "pm8350_s10";
> +			regulator-min-microvolt = <1800000>;
> +			regulator-max-microvolt = <1800000>;
> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> +		};
> +
> +		pm8350_s11: smps11 {
> +			regulator-name = "pm8350_s11";
> +			regulator-min-microvolt = <752000>;
> +			regulator-max-microvolt = <1012000>;
> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> +		};
> +
> +		pm8350_s12: smps12 {
> +			regulator-name = "pm8350_s12";
> +			regulator-min-microvolt = <1224000>;
> +			regulator-max-microvolt = <1360000>;
> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> +		};
> +
> +		pm8350_l1: ldo1 {
> +			regulator-name = "pm8350_l1";
> +			regulator-min-microvolt = <912000>;
> +			regulator-max-microvolt = <920000>;
> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> +		};
> +
> +		pm8350_l2: ldo2 {
> +			regulator-name = "pm8350_l2";
> +			regulator-min-microvolt = <3072000>;
> +			regulator-max-microvolt = <3072000>;
> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> +		};
> +
> +		pm8350_l3: ldo3 {
> +			regulator-name = "pm8350_l3";
> +			regulator-min-microvolt = <904000>;
> +			regulator-max-microvolt = <904000>;
> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> +		};
> +
> +		/* L4 - lmx.lvl (ARC) */
> +
> +		pm8350_l5: ldo5 {
> +			regulator-name = "pm8350_l5";
> +			regulator-min-microvolt = <880000>;
> +			regulator-max-microvolt = <888000>;
> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> +			regulator-allow-set-load;
> +			regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
> +						   RPMH_REGULATOR_MODE_HPM>;
> +		};
> +
> +		pm8350_l6: ldo6 {
> +			regulator-name = "pm8350_l6";
> +			regulator-min-microvolt = <1200000>;
> +			regulator-max-microvolt = <1208000>;
> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> +			regulator-allow-set-load;
> +			regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
> +						   RPMH_REGULATOR_MODE_HPM>;
> +		};
> +
> +		pm8350_l7: ldo7 {
> +			regulator-name = "pm8350_l7";
> +			regulator-min-microvolt = <2400000>;
> +			regulator-max-microvolt = <3008000>;
> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> +			regulator-allow-set-load;
> +			regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
> +						   RPMH_REGULATOR_MODE_HPM>;
> +		};
> +
> +		/* L8 - lcx.lvl (ARC) */
> +
> +		pm8350_l9: ldo9 {
> +			regulator-name = "pm8350_l9";
> +			regulator-min-microvolt = <1200000>;
> +			regulator-max-microvolt = <1200000>;
> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> +			regulator-allow-set-load;
> +			regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
> +						   RPMH_REGULATOR_MODE_HPM>;
> +		};
> +	};
> +
> +	regulators-1 {
> +		compatible = "qcom,pm8350c-rpmh-regulators";
> +		qcom,pmic-id = "c";
> +
> +		vdd-s1-supply = <&vph_pwr>;
> +		vdd-s2-supply = <&vph_pwr>;
> +		vdd-s3-supply = <&vph_pwr>;
> +		vdd-s4-supply = <&vph_pwr>;
> +		vdd-s5-supply = <&vph_pwr>;
> +		vdd-s6-supply = <&vph_pwr>;
> +		vdd-s7-supply = <&vph_pwr>;
> +		vdd-s8-supply = <&vph_pwr>;
> +		vdd-s9-supply = <&vph_pwr>;
> +		vdd-s10-supply = <&vph_pwr>;
> +
> +		vdd-l1-l12-supply = <&pm8350c_s1>;
> +		vdd-l2-l8-supply = <&pm8350c_s1>;
> +		vdd-l3-l4-l5-l7-l13-supply = <&vreg_bob>;
> +		vdd-l6-l9-l11-supply = <&vreg_bob>;
> +		vdd-l10-supply = <&pm8350_s12>;
> +
> +		vdd-bob-supply = <&vph_pwr>;
> +
> +		pm8350c_s1: smps1 {
> +			regulator-name = "pm8350c_s1";
> +			regulator-min-microvolt = <1800000>;
> +			regulator-max-microvolt = <1952000>;
> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> +		};
> +
> +		/* S2 - ebi.lvl (ARC) */
> +
> +		pm8350c_s3: smps3 {
> +			regulator-name = "pm8350c_s3";
> +			regulator-min-microvolt = <300000>;
> +			regulator-max-microvolt = <704000>;
> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> +		};
> +
> +		/*
> +		 * ARC regulators:
> +		 * S4 - mss.lvl
> +		 * S6 - cx.lvl
> +		 * S8 - mmcx.lvl
> +		 */
> +
> +		pm8350c_s10: smps10 {
> +			regulator-name = "pm8350c_s10";
> +			regulator-min-microvolt = <1048000>;
> +			regulator-max-microvolt = <1128000>;
> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> +		};
> +
> +		pm8350c_l1: ldo1 {
> +			regulator-name = "pm8350c_l1";
> +			regulator-min-microvolt = <1800000>;
> +			regulator-max-microvolt = <1800000>;
> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> +		};
> +
> +		pm8350c_l2: ldo2 {
> +			regulator-name = "pm8350c_l2";
> +			regulator-min-microvolt = <1800000>;
> +			regulator-max-microvolt = <1800000>;
> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> +		};
> +
> +		pm8350c_l3: ldo3 {
> +			regulator-name = "pm8350c_l3";
> +			regulator-min-microvolt = <3000000>;
> +			regulator-max-microvolt = <3300000>;
> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> +		};
> +
> +		pm8350c_l4: ldo4 {
> +			regulator-name = "pm8350c_l4";
> +			regulator-min-microvolt = <1704000>;
> +			regulator-max-microvolt = <3000000>;
> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> +		};
> +
> +		pm8350c_l5: ldo5 {
> +			regulator-name = "pm8350c_l5";
> +			regulator-min-microvolt = <1704000>;
> +			regulator-max-microvolt = <3000000>;
> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> +		};
> +
> +		pm8350c_l6: ldo6 {
> +			regulator-name = "pm8350c_l6";
> +			regulator-min-microvolt = <1800000>;
> +			regulator-max-microvolt = <2960000>;
> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> +		};
> +
> +		pm8350c_l7: ldo7 {
> +			regulator-name = "pm8350c_l7";
> +			regulator-min-microvolt = <3008000>;
> +			regulator-max-microvolt = <3008000>;
> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> +		};
> +
> +		pm8350c_l8: ldo8 {
> +			regulator-name = "pm8350c_l8";
> +			regulator-min-microvolt = <1800000>;
> +			regulator-max-microvolt = <1800000>;
> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> +		};
> +
> +		pm8350c_l9: ldo9 {
> +			regulator-name = "pm8350c_l9";
> +			regulator-min-microvolt = <2800000>;
> +			regulator-max-microvolt = <3008000>;
> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> +		};
> +
> +		pm8350c_l10: ldo10 {
> +			regulator-name = "pm8350c_l10";
> +			regulator-min-microvolt = <1200000>;
> +			regulator-max-microvolt = <1200000>;
> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> +		};
> +
> +		pm8350c_l11: ldo11 {
> +			regulator-name = "pm8350c_l11";
> +			regulator-min-microvolt = <2400000>;
> +			regulator-max-microvolt = <3008000>;
> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> +		};
> +
> +		pm8350c_l12: ldo12 {
> +			regulator-name = "pm8350c_l12";
> +			regulator-min-microvolt = <1800000>;
> +			regulator-max-microvolt = <2000000>;
> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> +		};
> +
> +		pm8350c_l13: ldo13 {
> +			regulator-name = "pm8350c_l13";
> +			regulator-min-microvolt = <3000000>;
> +			regulator-max-microvolt = <3200000>;
> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> +		};
> +
> +		vreg_bob: bob {
> +			regulator-name = "vreg_bob";
> +			regulator-min-microvolt = <3400000>;
> +			regulator-max-microvolt = <3960000>;
> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_AUTO>;
> +		};
> +	};
> +
> +	/* regulators-2 unused for now */

Is there some PMIC that will be here? Since it's just numbered I also
don't see a problem renaming regulators-2 to regulators-3 if anything
was added later here.

> +
> +	regulators-3 {
> +		compatible = "qcom,pmr735a-rpmh-regulators";
> +		qcom,pmic-id = "e";
> +
> +		vdd-s1-supply = <&vph_pwr>;
> +		vdd-s2-supply = <&vph_pwr>;
> +		vdd-s3-supply = <&vph_pwr>;
> +
> +		vdd-l1-l2-supply = <&pmr735a_s2>;
> +		vdd-l3-supply = <&pmr735a_s1>;
> +		vdd-l4-supply = <&pm8350c_s1>;
> +		vdd-l5-l6-supply = <&pm8350c_s1>;
> +		vdd-l7-bob-supply = <&vreg_bob>;
> +
> +		pmr735a_s1: smps1 {
> +			regulator-name = "pmr735a_s1";
> +			regulator-min-microvolt = <1200000>;
> +			regulator-max-microvolt = <1280000>;
> +		};
> +
> +		pmr735a_s2: smps2 {
> +			regulator-name = "pmr735a_s2";
> +			regulator-min-microvolt = <500000>;
> +			regulator-max-microvolt = <976000>;
> +		};
> +
> +		pmr735a_s3: smps3 {
> +			regulator-name = "pmr735a_s3";
> +			regulator-min-microvolt = <2208000>;
> +			regulator-max-microvolt = <2352000>;
> +		};
> +
> +		pmr735a_l1: ldo1 {
> +			regulator-name = "pmr735a_l1";
> +			regulator-min-microvolt = <912000>;
> +			regulator-max-microvolt = <912000>;
> +		};
> +
> +		pmr735a_l2: ldo2 {
> +			regulator-name = "pmr735a_l2";
> +			regulator-min-microvolt = <1200000>;
> +			regulator-max-microvolt = <1200000>;
> +		};
> +
> +		pmr735a_l3: ldo3 {
> +			regulator-name = "pmr735a_l3";
> +			regulator-min-microvolt = <1200000>;
> +			regulator-max-microvolt = <1200000>;
> +		};
> +
> +		pmr735a_l4: ldo4 {
> +			regulator-name = "pmr735a_l4";
> +			regulator-min-microvolt = <1776000>;
> +			regulator-max-microvolt = <1872000>;
> +		};
> +
> +		pmr735a_l5: ldo5 {
> +			regulator-name = "pmr735a_l5";
> +			regulator-min-microvolt = <800000>;
> +			regulator-max-microvolt = <800000>;
> +		};
> +
> +		pmr735a_l6: ldo6 {
> +			regulator-name = "pmr735a_l6";
> +			regulator-min-microvolt = <480000>;
> +			regulator-max-microvolt = <904000>;
> +		};
> +
> +		pmr735a_l7: ldo7 {
> +			regulator-name = "pmr735a_l7";
> +			regulator-min-microvolt = <2800000>;
> +			regulator-max-microvolt = <2800000>;
> +		};
> +	};
> +};
> +
> +&adsp {
> +	firmware-name = "qcom/OnePlus/lemonade/adsp.mbn";
> +	status = "okay";
> +};
> +
> +&cdsp {
> +	firmware-name = "qcom/OnePlus/lemonade/cdsp.mbn";
> +	status = "okay";
> +};
> +
> +&slpi {
> +	firmware-name = "qcom/OnePlus/lemonade/slpi.mbn";
> +	status = "okay";
> +};
> +
> +&ipa {
> +	qcom,gsi-loader = "self";
> +	memory-region = <&pil_ipa_fw_mem>;
> +	firmware-name = "qcom/OnePlus/lemonade/ipa_fws.mbn";
> +	status = "okay";
> +};
> +
> +&mpss {
> +	firmware-name = "qcom/OnePlus/lemonade/modem.mbn",
> +			"qcom/OnePlus/lemonade/mcfg_hw.mbn";

All these firmware-name attributes don't follow what's already in
mainline.

Use e.g. qcom/sm8350/lemonade/*

> +
> +	status = "okay";
> +};
> +
> +&i2c4 {
> +	clock-frequency = <400000>;
> +	status = "okay";
> +
> +	/* Touchscreens: Syna TCM oncell or Samsung s6sy761 */
> +};
> +
> +&i2c13 {
> +	clock-frequency = <100000>;
> +	status = "okay";
> +
> +	fsa4480@42 {
> +		compatible = "fcs,fsa4480";
> +		reg = <0x42>;
> +		mode-switch;
> +		orientation-switch;
> +	};
> +
> +	/* Qualcomm PM8008i/PM8008j (?) @ 8, 9, c, d */

Check again in downstream if the @c and @d are actually enabled, at
least they're not on my boards and the PM8008 is only addressable on @8
and @9.

> +};
> +
> +&i2c15 {
> +	clock-frequency = <400000>;
> +	status = "okay";
> +
> +	/* sn-nci NFC controller @ 28 */
> +};
> +
> +&pm8350_gpios {
> +	usb2_vbus_boost_default: usb2_vbus_boost_default {
> +		pins = "gpio8";
> +		function = "normal";
> +		output-low;
> +		power-source = <0x00>;
> +		phandle = <0x5e1>;
> +	};
> +
> +	usb2_vbus_det_default: usb2_vbus_det_default {
> +		pins = "gpio9";
> +		function = "normal";
> +		input-enable;
> +		bias-disable;
> +		power-source = <0x00>;
> +		phandle = <0x5e0>;
> +	};

Node name should not have underscores, use dashes.

Also here again I doubt you ran the dtbs_check, I think also the pmic
gpios need have have a -state suffix.

 => usb2_vbus_det_default: usb2-vbus-det-default-state {

> +
> +	gpio1_adc_default: gpio1-adc-default {
> +		pins = "gpio1";
> +		function = "normal";
> +		bias-high-impedance;
> +		bias-disable;
> +		phandle = <0x566>;
> +	};
> +
> +	gpio3_adc_default: gpio3-adc-default {
> +		pins = "gpio3";
> +		function = "normal";
> +		bias-high-impedance;
> +		bias-disable;
> +		phandle = <0x567>;

Drop the random phandles you copied from the decompiled dtb?

> +	};
> +};
> +
> +&pm8350b_gpios {
> +	vol_down_n: vol-down-n-state {
> +		pins = "gpio6";
> +		function = "normal";
> +		power-source = <1>;
> +		bias-pull-up;
> +		input-enable;
> +	};
> +};
> +
> +&pmk8350_rtc {
> +	status = "okay";
> +};
> +
> +&pmk8350_vadc {
> +	pinctrl-0 = <&gpio1_adc_default &gpio1_adc_default>;
> +	pinctrl-names = "default";
> +
> +	pmk8350_ref_gnd {

Doesn't follow the format in the docs.

> +		reg = <0x00>;
> +		label = "pmk8350_ref_gnd";
> +		qcom,pre-scaling = <0x01 0x01>;

Don't use hex here.

> +	};
> +
> +	pmk8350_vref_1p25 {
> +		reg = <0x01>;
> +		label = "pmk8350_vref_1p25";
> +		qcom,pre-scaling = <0x01 0x01>;
> +	};
> +
> +	pmk8350_die_temp {
> +		reg = <0x03>;
> +		label = "pmk8350_die_temp";
> +		qcom,pre-scaling = <0x01 0x01>;
> +	};
> +
> +	pmk8350_xo_therm {
> +		reg = <0x44>;
> +		label = "pmk8350_xo_therm";
> +		qcom,ratiometric;
> +		qcom,hw-settle-time = <0xc8>;

Make this also decimal.

> +		qcom,pre-scaling = <0x01 0x01>;
> +	};
> +
> +	pm8350_ref_gnd {
> +		reg = <0x100>;
> +		label = "pm8350_ref_gnd";
> +		qcom,pre-scaling = <0x01 0x01>;
> +	};
> +
> +	pm8350_vref_1p25 {
> +		reg = <0x101>;
> +		label = "pm8350_vref_1p25";
> +		qcom,pre-scaling = <0x01 0x01>;
> +	};
> +
> +	pm8350_die_temp {
> +		reg = <0x103>;
> +		label = "pm8350_die_temp";
> +		qcom,pre-scaling = <0x01 0x01>;
> +	};
> +
> +	pm8350_vph_pwr {
> +		reg = <0x18e>;
> +		label = "pm8350_vph_pwr";
> +		qcom,pre-scaling = <0x01 0x03>;
> +	};
> +
> +	pm8350b_ref_gnd {
> +		reg = <0x300>;
> +		label = "pm8350b_ref_gnd";
> +		qcom,pre-scaling = <0x01 0x01>;
> +	};
> +
> +	pm8350b_vref_1p25 {
> +		reg = <0x301>;
> +		label = "pm8350b_vref_1p25";
> +		qcom,pre-scaling = <0x01 0x01>;
> +	};
> +
> +	pm8350b_die_temp {
> +		reg = <0x303>;
> +		label = "pm8350b_die_temp";
> +		qcom,pre-scaling = <0x01 0x01>;
> +	};
> +
> +	pm8350b_vph_pwr {
> +		reg = <0x38e>;
> +		label = "pm8350b_vph_pwr";
> +		qcom,pre-scaling = <0x01 0x03>;
> +	};
> +
> +	pm8350b_vbat_sns {
> +		reg = <0x38f>;
> +		label = "pm8350b_vbat_sns";
> +		qcom,pre-scaling = <0x01 0x03>;
> +	};
> +
> +	pm8350_msm_therm {
> +		reg = <PM8350_ADC7_AMUX_THM1_100K_PU(1)>;
> +		label = "pm8350_msm_therm";
> +		qcom,ratiometric;
> +		qcom,hw-settle-time = <200>;
> +		qcom,pre-scaling = <1 1>;
> +	};
> +
> +	pm8350_cam_flash_therm {
> +		reg = <PM8350_ADC7_AMUX_THM2_100K_PU(1)>;
> +		label = "pm8350_cam_flash_therm";
> +		qcom,ratiometric;
> +		qcom,hw-settle-time = <200>;
> +		qcom,pre-scaling = <1 1>;
> +	};
> +
> +	pm8350_hot_pocket_therm {
> +		reg = <PM8350_ADC7_AMUX_THM3_100K_PU(1)>;
> +		label = "pm8350_hot_pocket_therm";
> +		qcom,ratiometric;
> +		qcom,hw-settle-time = <200>;
> +		qcom,pre-scaling = <1 1>;
> +	};
> +
> +	pm8350_wide_rfc_therm {
> +		reg = <PM8350_ADC7_AMUX_THM4_100K_PU(1)>;
> +		label = "pm8350_wide_rfc_therm";
> +		qcom,ratiometric;
> +		qcom,hw-settle-time = <200>;
> +		qcom,pre-scaling = <1 1>;
> +	};
> +
> +	pm8350_rear_tof_therm {
> +		reg = <PM8350_ADC7_AMUX_THM5_100K_PU(1)>;
> +		label = "pm8350_rear_tof_therm";
> +		qcom,ratiometric;
> +		qcom,hw-settle-time = <200>;
> +		qcom,pre-scaling = <1 1>;
> +	};
> +
> +	pm8350b_usb_conn_therm {
> +		reg = <PM8350B_ADC7_AMUX_THM4_100K_PU>;
> +		label = "pm8350b_usb_conn_therm";
> +		qcom,ratiometric;
> +		qcom,hw-settle-time = <200>;
> +		qcom,pre-scaling = <1 1>;
> +	};
> +
> +	pm8350b_wl_chg_therm {
> +		reg = <PM8350B_ADC7_GPIO2_100K_PU>;
> +		label = "pm8350b_wl_chg_therm";
> +		qcom,ratiometric;
> +		qcom,hw-settle-time = <200>;
> +		qcom,pre-scaling = <1 1>;
> +	};
> +
> +	pm8350b_chg_temp {
> +		reg = <PM8350B_ADC7_CHG_TEMP>;
> +		label = "pm8350b_chg_temp";
> +		qcom,pre-scaling = <1 1>;
> +	};
> +
> +	pmr735a_ref_gnd {
> +		reg = <0x400>;
> +		label = "pmr735a_ref_gnd";
> +		qcom,pre-scaling = <0x01 0x01>;
> +	};
> +
> +	pmr735a_vref_1p25 {
> +		reg = <0x401>;
> +		label = "pmr735a_vref_1p25";
> +		qcom,pre-scaling = <0x01 0x01>;
> +	};
> +
> +	pmr735a_die_temp {
> +		reg = <0x403>;
> +		label = "pmr735a_die_temp";
> +		qcom,pre-scaling = <0x01 0x01>;
> +	};
> +
> +	pmr735b_ref_gnd {
> +		reg = <0x500>;
> +		label = "pmr735b_ref_gnd";
> +		qcom,pre-scaling = <0x01 0x01>;
> +	};
> +
> +	pmr735b_vref_1p25 {
> +		reg = <0x501>;
> +		label = "pmr735b_vref_1p25";
> +		qcom,pre-scaling = <0x01 0x01>;
> +	};
> +
> +	pmr735b_die_temp {
> +		reg = <0x503>;
> +		label = "pmr735b_die_temp";
> +		qcom,pre-scaling = <0x01 0x01>;
> +	};
> +
> +	smb139x_1_smb_temp {
> +		reg = <SMB139x_1_ADC7_SMB_TEMP>;
> +		label = "smb139x_1_smb_temp";
> +		qcom,pre-scaling = <1 1>;
> +	};
> +
> +	smb139x_2_smb_temp {
> +		reg = <SMB139x_2_ADC7_SMB_TEMP>;
> +		label = "smb139x_2_smb_temp";
> +		qcom,pre-scaling = <1 1>;
> +	};
> +
> +	gpio1_v {
> +		reg = <0x128>;
> +		label = "gpio1_v";
> +		qcom,ratiometric;
> +		qcom,hw-settle-time = <0x2bc>;
> +		qcom,pre-scaling = <0x01 0x01>;
> +	};
> +
> +	gpio3_v {
> +		reg = <0x12b>;
> +		label = "gpio3_v";
> +		qcom,ratiometric;
> +		qcom,hw-settle-time = <0x2bc>;
> +		qcom,pre-scaling = <0x01 0x01>;
> +	};
> +};
> +
> +&pmk8350_adc_tm {
> +	status = "okay";
> +
> +	pm8350_msm_therm {
> +		reg = <0x144>;
> +		qcom,ratiometric;
> +		qcom,hw-settle-time = <0xc8>;

Here also. Node name doesn't follow docs, missing io-channels (used here
instead of reg), etc.

> +	};
> +
> +	pm8350_cam_flash_therm {
> +		reg = <0x145>;
> +		qcom,ratiometric;
> +		qcom,hw-settle-time = <0xc8>;
> +	};
> +
> +	pm8350_hot_pocket_therm {
> +		reg = <0x146>;
> +		qcom,ratiometric;
> +		qcom,hw-settle-time = <0xc8>;
> +	};
> +
> +	pm8350_wide_rfc_therm {
> +		reg = <0x147>;
> +		qcom,ratiometric;
> +		qcom,hw-settle-time = <0xc8>;
> +	};
> +
> +	pm8350_rear_tof_therm {
> +		reg = <0x148>;
> +		qcom,ratiometric;
> +		qcom,hw-settle-time = <0xc8>;
> +	};
> +
> +	pm8350b_usb_conn_therm {
> +		reg = <0x347>;
> +		qcom,ratiometric;
> +		qcom,hw-settle-time = <0xc8>;
> +	};
> +
> +	pm8350b_wl_chg_therm {
> +		reg = <0x34b>;
> +		qcom,ratiometric;
> +		qcom,hw-settle-time = <0xc8>;
> +	};
> +
> +	pmk8350_xo_therm {
> +		reg = <0x44>;
> +		qcom,ratiometric;
> +		qcom,hw-settle-time = <0xc8>;
> +	};
> +};
> +
> +&pon_pwrkey {
> +	status = "okay";
> +};
> +
> +&pon_resin {
> +	linux,code = <KEY_VOLUMEUP>;
> +	status = "okay";
> +};
> +
> +&qupv3_id_0 {
> +	status = "okay";
> +};
> +
> +&qupv3_id_1 {
> +	status = "okay";
> +};
> +
> +&qupv3_id_2 {
> +	status = "okay";
> +};
> +
> +&gpi_dma0 {
> +	status = "okay";
> +};
> +
> +&gpi_dma1 {
> +	status = "okay";
> +};
> +
> +&gpi_dma2 {
> +	status = "okay";
> +};
> +
> +&removed_mem {
> +	reg = <0x0 0xd8800000 0x0 0x8e00000>;
> +};
> +
> +&tlmm {
> +	gpio-reserved-ranges = <52 8>;
> +
> +	pcie0_default_state: pcie0-default-state {
> +		perst-pins {
> +			pins = "gpio94";
> +			function = "gpio";
> +			drive-strength = <2>;
> +			bias-pull-down;
> +		};
> +
> +		clkreq-pins {
> +			pins = "gpio95";
> +			function = "pcie0_clkreqn";
> +			drive-strength = <2>;
> +			bias-pull-up;
> +		};
> +
> +		wake-pins {
> +			pins = "gpio96";
> +			function = "gpio";
> +			drive-strength = <2>;
> +			bias-pull-up;
> +		};
> +
> +		sleep-pins {
> +			pins = "gpio95";
> +			function = "gpio";
> +			drive-strength = <2>;
> +			bias-pull-up;
> +		};
> +	};
> +
> +	pcie1_default_state: pcie1-default-state {
> +		perst-pins {
> +			pins = "gpio97";
> +			function = "gpio";
> +			drive-strength = <2>;
> +			bias-pull-down;
> +		};
> +
> +		clkreq-pins {
> +			pins = "gpio98";
> +			function = "pcie1_clkreqn";
> +			drive-strength = <2>;
> +			bias-pull-up;
> +		};
> +
> +		wake-pins {
> +			pins = "gpio99";
> +			function = "gpio";
> +			drive-strength = <2>;
> +			bias-pull-up;
> +			/* wil6210_refclk_en_pin lives here also */
> +		};
> +	};
> +
> +	tp_rst_active: tp_rst_active {

Wrong node name and more below.

> +		pins = "gpio22";
> +		function = "gpio";
> +		drive-strength = <8>;
> +		bias-pull-up;
> +	};
> +
> +	/* tp_rst_suspend pin is different per device, don't specify here */
> +
> +	tp_irq_active: tp_irq_active {
> +		pins = "gpio23";
> +		function = "gpio";
> +		drive-strength = <8>;
> +		bias-disable;
> +		input-enable;
> +	};
> +
> +	tp_irq_suspend: tp_irq_suspend {
> +		pins = "gpio23";
> +		function = "gpio";
> +		drive-strength = <2>;
> +		bias-pull-down;
> +	};
> +
> +	sde_dsi_active: sde-dsi-active {
> +		pins = "gpio24";
> +		function = "gpio";
> +		drive-strength = <8>;
> +		bias-disable = <0>;
> +	};
> +
> +	sde_dsi_suspend: sde-dsi-suspend {
> +		pins = "gpio24";
> +		function = "gpio";
> +		drive-strength = <2>;
> +		bias-pull-down;
> +	};
> +
> +	sde_te_active: sde-te-active {
> +		pins = "gpio82";
> +		function = "mdp_vsync";
> +		drive-strength = <2>;
> +		bias-pull-down;
> +	};
> +
> +	sde_te_suspend: sde-te-suspend {
> +		pins = "gpio82";
> +		function = "mdp_vsync";
> +		drive-strength = <2>;
> +		bias-pull-down;
> +	};
> +
> +	aw_irq: aw_irq {
> +		pins = "gpio14";
> +		function = "gpio";
> +		drive-strength = <2>;
> +		bias-pull-up;
> +	};
> +
> +	aw_reset: aw_reset {
> +		pins = "gpio75";
> +		function = "gpio";
> +		drive-strength = <2>;
> +		bias-disable;
> +	};

Skip unused pinctrl for now?

> +
> +	display_panel_avdd_default: display_panel_avdd_default {
> +		pins = "gpio12";
> +		function = "gpio";
> +		drive-strength = <8>;
> +		bias-disable = <0>;
> +		output-high;
> +	};
> +
> +	/* Modem-related pin common on both devices */
> +	rf_cable_ant0_active: rf_cable_ant0_active {
> +		pins = "gpio165";
> +		function = "gpio";
> +		drive-strength = <2>;
> +		bias-pull-up;
> +	};
> +
> +	usb_int_default: usb_int_default {
> +		pins = "gpio198";
> +		function = "gpio";
> +		drive-strength = <2>;
> +		bias-pull-down;
> +		input-enable;
> +	};
> +
> +	qupv3_se18_default_cts: qupv3_se18_default_cts {
> +		pins = "gpio68";
> +		function = "gpio";
> +		drive-strength = <2>;
> +		bias-disable;
> +	};
> +
> +	qupv3_se18_default_rtsrx: qupv3_se18_default_rtsrx {
> +		pins = "gpio69", "gpio71";
> +		function = "gpio";
> +		drive-strength = <2>;
> +		bias-pull-down;
> +	};
> +
> +	qupv3_se18_default_tx: qupv3_se18_default_tx {
> +		pins = "gpio70";
> +		function = "gpio";
> +		drive-strength = <2>;
> +		bias-pull-up;
> +	};
> +
> +	qupv3_se18_ctsrx: qupv3_se18_ctsrx {
> +		pins = "gpio68", "gpio71";
> +		function = "qup18";
> +		drive-strength = <2>;
> +		bias-disable;
> +	};
> +
> +	qupv3_se18_rts: qupv3_se18_rts {
> +		pins = "gpio69";
> +		function = "qup18";
> +		drive-strength = <2>;
> +		bias-pull-down;
> +	};
> +
> +	qupv3_se18_tx: qupv3_se18_tx {
> +		pins = "gpio70";
> +		function = "qup18";
> +		drive-strength = <2>;
> +		bias-pull-up;
> +	};
> +
> +	usb3phy_portselect_default: usb3phy_portselect_default {
> +		pins = "gpio81";
> +		function = "usb_phy";
> +		drive-strength = <2>;
> +		bias-disable;
> +	};
> +
> +	usb3phy_portselect_gpio: usb3phy_portselect_gpio {
> +		pins = "gpio81";
> +		function = "gpio";
> +		drive-strength = <2>;
> +		bias-disable;
> +	};
> +
> +	ext1_otg_default: ext1_otg_default {
> +		pins = "gpio8";
> +		function = "gpio";
> +		drive-strength = <16>;
> +		bias-pull-down;
> +		input-enable;
> +	};
> +
> +	cnss_wlan_en_active: cnss_wlan_en_active {
> +		pins = "gpio64";
> +		function = "gpio";
> +		drive-strength = <16>;
> +		output-high;
> +		bias-pull-up;
> +	};
> +
> +	cnss_wlan_en_sleep: cnss_wlan_en_sleep {
> +		pins = "gpio64";
> +		function = "gpio";
> +		drive-strength = <2>;
> +		output-low;
> +		bias-pull-down;
> +	};
> +
> +	bt_en_sleep: bt_en_sleep {
> +		pins = "gpio65";
> +		function = "gpio";
> +		drive-strength = <2>;
> +		output-low;
> +		bias-pull-down;
> +	};
> +};
> +
> +&ufs_mem_hc {
> +	reset-gpios = <&tlmm 203 GPIO_ACTIVE_LOW>;
> +
> +	vcc-supply = <&pm8350_l7>;
> +	vcc-voltage-level = <2504000 2950000>;
> +	vcc-max-microamp = <800000>;
> +	vccq-supply = <&pm8350_l9>;
> +	vccq-max-microamp = <900000>;
> +
> +	qcom,vddp-ref-clk-supply = <&pm8350_l9>;
> +	qcom,vddp-ref-clk-max-microamp = <100>;
> +
> +	qcom,vddp-ref-clk-supply = <&pm8350_s12>;
> +	qcom,vccq-parent-max-microamp = <210000>;
> +
> +	status = "okay";
> +};
> +
> +&ufs_mem_phy {
> +	vdda-phy-supply = <&pm8350_l5>;
> +	vdda-phy-always-on;

Property doesn't exist

> +	vdda-max-microamp = <91600>;
> +	vdda-pll-supply = <&pm8350_l6>;
> +	vdda-pll-max-microamp = <19000>;
> +
> +	status = "okay";
> +};
> +
> +&usb_1 {
> +	/* Bug in interconnect driver breaks USB */
> +	/delete-property/ interconnects;
> +	/delete-property/ interconnect-names;

Any chance on fixing this? Or add some extra explanation? Not sure how
liked such workarounds are in dts files.

> +
> +	/*
> +	 * USB3 is not tested (though it is enabled downstream) so limit to
> +	 * high-speed for now.
> +	 */
> +	qcom,select-utmi-as-pipe-clk;

You never plugged the device into a USB 3.0 port? Should be trivial to
test I think?

> +
> +	status = "okay";
> +};
> +
> +&usb_1_dwc3 {
> +	/* Mode switching is untested */
> +	dr_mode = "peripheral";
> +	maximum-speed = "high-speed";
> +	phys = <&usb_1_hsphy>;
> +	phy-names = "usb2-phy";
> +};
> +
> +&usb_1_hsphy {
> +	vdda-pll-supply = <&pm8350_l5>;
> +	vdda18-supply = <&pm8350c_l1>;
> +	vdda33-supply = <&pm8350_l2>;
> +
> +	status = "okay";
> +};
> +
> +/* Enabling this is necessary only for displayport */

Do you have displayport support with this dts? If not why enable it?

> +&usb_1_qmpphy {
> +	vdda-phy-supply = <&pm8350_l6>;
> +	vdda-pll-supply = <&pm8350_l1>;
> +
> +	status = "okay";
> +};
> +
> +&i2c2 {
> +	clock-frequency = <100000>;
> +	status = "okay";
> +
> +	bq27541: fuel-gauge@55 {
> +		compatible = "ti,bq27541";
> +		reg = <0x55>;
> +		monitored-battery = <&bat>;
> +	};
> +};
> +/* Crypto drivers currently fail & cause an XPU violation */

Missing newline between nodes.

> +&cryptobam {
> +	status = "disabled";
> +};
> +
> +&crypto {
> +	status = "disabled";
> +};

These disables are not useful since they're already disabled in
sm8350.dtsi because of that problem.

> +
> +&pcie0 {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&pcie0_default_state>;
> +
> +	perst-gpios = <&tlmm 94 GPIO_ACTIVE_HIGH>;
> +	wake-gpios = <&tlmm 96 GPIO_ACTIVE_HIGH>;
> +
> +	status = "okay";
> +};
> +
> +&pcie0_phy {
> +	vdda-phy-supply = <&pm8350_l5>;
> +	vdda-pll-supply = <&pm8350_l6>;
> +
> +	status = "okay";
> +};
> +
> +&pcie1 {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&pcie1_default_state>;
> +
> +	perst-gpios = <&tlmm 97 GPIO_ACTIVE_HIGH>;
> +	wake-gpios = <&tlmm 99 GPIO_ACTIVE_HIGH>;
> +
> +	status = "okay";
> +};
> +
> +&pcie1_phy {
> +	vdda-phy-supply = <&pm8350_l5>;
> +	vdda-pll-supply = <&pm8350_l6>;
> +
> +	status = "okay";
> +};

Everywhere in this file make sure the nodes are sorted alphabetically,
it's a wild west right now.

> diff --git a/arch/arm64/boot/dts/qcom/sm8350-oneplus-lemonade.dts b/arch/arm64/boot/dts/qcom/sm8350-oneplus-lemonade.dts
> new file mode 100644
> index 000000000000..f2c27894f3c4
> --- /dev/null
> +++ b/arch/arm64/boot/dts/qcom/sm8350-oneplus-lemonade.dts
> @@ -0,0 +1,82 @@
> +// SPDX-License-Identifier: BSD-3-Clause
> +/*
> + * Copyright (c) 2023 Igalia S.L.
> + * Authors:
> + *	Nia Espera <nespera@igalia.com>
> + */
> +
> +/dts-v1/;
> +
> +#include "sm8350-oneplus-common.dtsi"
> +
> +/ {
> +	model = "OnePlus 9";
> +	compatible = "oneplus,lemonade", "qcom,sm8350";
> +};
> +
> +&i2c4 {
> +	touchscreen@48 {
> +		compatible = "samsung,s6sy761";
> +		reg = <0x48>;
> +		interrupts-extended = <&tlmm 23 0x2008>;

Replace the 0x2008 with the GPIO_* flags from include/dt-bindings/gpio/gpio.h

> +
> +		vdd-supply = <&pm8350c_l8>;
> +		avdd-supply = <&pm8350c_l13>;
> +
> +		pinctrl-names = "default", "sleep";
> +		pinctrl-0 = <&tp_rst_active &tp_irq_active>;
> +		pinctrl-1 = <&tp_rst_suspend &tp_irq_suspend>;
> +	};
> +};
> +
> +&tlmm {
> +	tp_rst_suspend: tp_rst_suspend {
> +		pins = "gpio22";
> +		function = "gpio";
> +		drive-strength = <2>;
> +		bias-pull-down;
> +	};
> +
> +	tp_enable_2v8: tp_enable_2v8 {
> +		pins = "gpio74";
> +		function = "gpio";
> +		drive-strength = <8>;
> +		bias-pull-up;
> +		output-high;
> +	};

Some pinctrl comments as in the .dtsi file

> +
> +	/* Modem antenna pins exclusive to lemonade */
> +	rf_cable_ant1_active: rf_cable_ant1_active {
> +		pins = "gpio27";
> +		function = "gpio";
> +		drive-strength = <2>;
> +		bias-pull-up;
> +	};
> +	rf_cable_ant2_active: rf_cable_ant2_active {
> +		pins = "gpio92";
> +		function = "gpio";
> +		drive-strength = <2>;
> +		bias-pull-up;
> +	};
> +	rf_cable_ant3_active: rf_cable_ant3_active {
> +		pins = "gpio44";
> +		function = "gpio";
> +		drive-strength = <2>;
> +		bias-pull-up;
> +	};
> +	rf_cable_ant7_active: rf_cable_ant7_active {
> +		pins = "gpio155";
> +		function = "gpio";
> +		drive-strength = <2>;
> +		bias-pull-up;
> +	};
> +};
> +
> +&mpss {
> +	pinctrl-names = "default";
> +	pinctrl-1 = <&rf_cable_ant0_active
> +		     &rf_cable_ant1_active
> +		     &rf_cable_ant2_active
> +		     &rf_cable_ant3_active
> +		     &rf_cable_ant7_active>;
> +};
> diff --git a/arch/arm64/boot/dts/qcom/sm8350-oneplus-lemonadep.dts b/arch/arm64/boot/dts/qcom/sm8350-oneplus-lemonadep.dts
> new file mode 100644
> index 000000000000..de8597d26091
> --- /dev/null
> +++ b/arch/arm64/boot/dts/qcom/sm8350-oneplus-lemonadep.dts
> @@ -0,0 +1,37 @@
> +// SPDX-License-Identifier: BSD-3-Clause
> +/*
> + * Copyright (c) 2023 Igalia S.L.
> + * Authors:
> + *	Nia Espera <nespera@igalia.com>
> + */
> +
> +/dts-v1/;
> +
> +#include "sm8350-oneplus-common.dtsi"
> +
> +/ {
> +	model = "OnePlus 9 Pro";
> +	compatible = "oneplus,lemonadep", "qcom,sm8350";
> +};
> +
> +&tlmm {
> +	tp_rst_suspend: tp_rst_suspend {
> +		pins = "gpio22";
> +		function = "gpio";
> +		drive-strength = <8>;
> +		bias-pull-down;
> +	};
> +
> +	tp_enable_2v8: tp_enable_2v8 {
> +		pins = "gpio31";
> +		function = "gpio";
> +		drive-strength = <8>;
> +		bias-pull-up;
> +		output-high;
> +	};

And don't forget about fixing the nodes here. But why define them now if
you don't have any users of them?

> +};
> +
> +&mpss {
> +	pinctrl-names = "default";
> +	pinctrl-1 = <&rf_cable_ant0_active>;
> +};

I'm sure others will have more comments but fixing the comments I added
is a good step forward :)

Regards
Luca
Krzysztof Kozlowski Oct. 16, 2023, 2:33 p.m. UTC | #4
On 16/10/2023 14:47, Nia Espera wrote:
> Device tree files for OnePlus 9 and 9 Pro. Details of supported features
> mentioned in the cover letter for this patch series, but for
> accessibility also repeated here:
> 
> - USB OTG
> - UFS
> - Framebuffer display
> - Touchscreen (for lemonade)
> - Power & volume down keys
> - Battery reading
> - Modem, IPA, and remoteproc bringup
> 
> Steps to get booting:
> 

...

> +};
> +
> +&pmk8350_adc_tm {
> +	status = "okay";
> +
> +	pm8350_msm_therm {

No, underscores are not allowed. Do not usptream junky DTS from
downstream. Instead take upstream, good quality DTS and customize it.
Why do we need to point the issue fixed long, long time ago?


> +		reg = <0x144>;
> +		qcom,ratiometric;
> +		qcom,hw-settle-time = <0xc8>;
> +	};
> +
> +	pm8350_cam_flash_therm {
> +		reg = <0x145>;
> +		qcom,ratiometric;
> +		qcom,hw-settle-time = <0xc8>;
> +	};
> +
> +	pm8350_hot_pocket_therm {
> +		reg = <0x146>;
> +		qcom,ratiometric;
> +		qcom,hw-settle-time = <0xc8>;
> +	};
> +
> +	pm8350_wide_rfc_therm {
> +		reg = <0x147>;
> +		qcom,ratiometric;
> +		qcom,hw-settle-time = <0xc8>;
> +	};
> +
> +	pm8350_rear_tof_therm {
> +		reg = <0x148>;
> +		qcom,ratiometric;
> +		qcom,hw-settle-time = <0xc8>;
> +	};
> +
> +	pm8350b_usb_conn_therm {
> +		reg = <0x347>;
> +		qcom,ratiometric;
> +		qcom,hw-settle-time = <0xc8>;
> +	};
> +
> +	pm8350b_wl_chg_therm {
> +		reg = <0x34b>;
> +		qcom,ratiometric;
> +		qcom,hw-settle-time = <0xc8>;
> +	};
> +
> +	pmk8350_xo_therm {
> +		reg = <0x44>;
> +		qcom,ratiometric;
> +		qcom,hw-settle-time = <0xc8>;
> +	};
> +};
> +
> +&pon_pwrkey {
> +	status = "okay";
> +};
> +
> +&pon_resin {
> +	linux,code = <KEY_VOLUMEUP>;
> +	status = "okay";
> +};
> +
> +&qupv3_id_0 {
> +	status = "okay";
> +};
> +
> +&qupv3_id_1 {
> +	status = "okay";
> +};
> +
> +&qupv3_id_2 {
> +	status = "okay";
> +};
> +
> +&gpi_dma0 {
> +	status = "okay";
> +};
> +
> +&gpi_dma1 {
> +	status = "okay";
> +};
> +
> +&gpi_dma2 {
> +	status = "okay";
> +};
> +
> +&removed_mem {

Hm, what is removed_mem?

> +	reg = <0x0 0xd8800000 0x0 0x8e00000>;
> +};
> +
> +&tlmm {
> +	gpio-reserved-ranges = <52 8>;
> +
> +	pcie0_default_state: pcie0-default-state {

It does not look like you tested the DTS against bindings. Please run
`make dtbs_check W=1` (see
Documentation/devicetree/bindings/writing-schema.rst or
https://www.linaro.org/blog/tips-and-tricks-for-validating-devicetree-sources-with-the-devicetree-schema/
for instructions).

> +		perst-pins {
> +			pins = "gpio94";
> +			function = "gpio";
> +			drive-strength = <2>;
> +			bias-pull-down;
> +		};
> +


> diff --git a/arch/arm64/boot/dts/qcom/sm8350-oneplus-lemonade.dts b/arch/arm64/boot/dts/qcom/sm8350-oneplus-lemonade.dts
> new file mode 100644
> index 000000000000..f2c27894f3c4
> --- /dev/null
> +++ b/arch/arm64/boot/dts/qcom/sm8350-oneplus-lemonade.dts
> @@ -0,0 +1,82 @@
> +// SPDX-License-Identifier: BSD-3-Clause
> +/*
> + * Copyright (c) 2023 Igalia S.L.
> + * Authors:
> + *	Nia Espera <nespera@igalia.com>
> + */
> +
> +/dts-v1/;
> +
> +#include "sm8350-oneplus-common.dtsi"
> +
> +/ {
> +	model = "OnePlus 9";
> +	compatible = "oneplus,lemonade", "qcom,sm8350";
> +};
> +
> +&i2c4 {
> +	touchscreen@48 {
> +		compatible = "samsung,s6sy761";
> +		reg = <0x48>;
> +		interrupts-extended = <&tlmm 23 0x2008>;
> +
> +		vdd-supply = <&pm8350c_l8>;
> +		avdd-supply = <&pm8350c_l13>;
> +
> +		pinctrl-names = "default", "sleep";
> +		pinctrl-0 = <&tp_rst_active &tp_irq_active>;

Multiple phandles <>, not one.

> +		pinctrl-1 = <&tp_rst_suspend &tp_irq_suspend>;
> +	};
> +};
> +
> +&tlmm {
> +	tp_rst_suspend: tp_rst_suspend {

Ehh...
> +		pins = "gpio22";
> +		function = "gpio";
> +		drive-strength = <2>;
> +		bias-pull-down;
> +	};
> +
> +	tp_enable_2v8: tp_enable_2v8 {
> +		pins = "gpio74";
> +		function = "gpio";
> +		drive-strength = <8>;
> +		bias-pull-up;
> +		output-high;
> +	};
> +
> +	/* Modem antenna pins exclusive to lemonade */
> +	rf_cable_ant1_active: rf_cable_ant1_active {
> +		pins = "gpio27";
> +		function = "gpio";
> +		drive-strength = <2>;
> +		bias-pull-up;
> +	};
> +	rf_cable_ant2_active: rf_cable_ant2_active {
> +		pins = "gpio92";
> +		function = "gpio";
> +		drive-strength = <2>;
> +		bias-pull-up;
> +	};
> +	rf_cable_ant3_active: rf_cable_ant3_active {
> +		pins = "gpio44";
> +		function = "gpio";
> +		drive-strength = <2>;
> +		bias-pull-up;
> +	};
> +	rf_cable_ant7_active: rf_cable_ant7_active {
> +		pins = "gpio155";
> +		function = "gpio";
> +		drive-strength = <2>;
> +		bias-pull-up;
> +	};
> +};
> +
> +&mpss {

Wrong order. t is after m

> +	pinctrl-names = "default";
> +	pinctrl-1 = <&rf_cable_ant0_active

Same problem.

> +		     &rf_cable_ant1_active
> +		     &rf_cable_ant2_active
> +		     &rf_cable_ant3_active
> +		     &rf_cable_ant7_active>;
> +};
> diff --git a/arch/arm64/boot/dts/qcom/sm8350-oneplus-lemonadep.dts b/arch/arm64/boot/dts/qcom/sm8350-oneplus-lemonadep.dts
> new file mode 100644
> index 000000000000..de8597d26091
> --- /dev/null
> +++ b/arch/arm64/boot/dts/qcom/sm8350-oneplus-lemonadep.dts
> @@ -0,0 +1,37 @@
> +// SPDX-License-Identifier: BSD-3-Clause
> +/*
> + * Copyright (c) 2023 Igalia S.L.
> + * Authors:
> + *	Nia Espera <nespera@igalia.com>
> + */
> +
> +/dts-v1/;
> +
> +#include "sm8350-oneplus-common.dtsi"
> +
> +/ {
> +	model = "OnePlus 9 Pro";
> +	compatible = "oneplus,lemonadep", "qcom,sm8350";

Missing bindings.

> +};
> +
> +&tlmm {
> +	tp_rst_suspend: tp_rst_suspend {

No underscores in node names. This wasn't tested.

It does not look like you tested the DTS against bindings. Please run
`make dtbs_check W=1` (see
Documentation/devicetree/bindings/writing-schema.rst or
https://www.linaro.org/blog/tips-and-tricks-for-validating-devicetree-sources-with-the-devicetree-schema/
for instructions).



Best regards,
Krzysztof
Nia Espera Oct. 16, 2023, 9:41 p.m. UTC | #5
Hi,

On 10/16/23 15:50, Luca Weiss wrote:
> Hi Nia,
> 
> On Mon Oct 16, 2023 at 2:47 PM CEST, Nia Espera wrote:
>> Device tree files for OnePlus 9 and 9 Pro. Details of supported features
>> mentioned in the cover letter for this patch series, but for
>> accessibility also repeated here:
>>
>> - USB OTG
>> - UFS
>> - Framebuffer display
>> - Touchscreen (for lemonade)
>> - Power & volume down keys
>> - Battery reading
>> - Modem, IPA, and remoteproc bringup
>>
>> Steps to get booting:
>>
>> - Wipe dtbo partition
>> - Flash vbmeta with disabled verity bit
>> - Flash kernel and initfs to boot partition with CLI args pd_ignore_unused
>> and clk_ignore_unused
>> - Flash rootfs to some other partition (probably super or userdata)
>>
>> Signed-off-by: Nia Espera <nespera@igalia.com>
>> ---
>>   arch/arm64/boot/dts/qcom/Makefile                  |    2 +
>>   .../arm64/boot/dts/qcom/sm8350-oneplus-common.dtsi | 1247 ++++++++++++++++++++
>>   .../boot/dts/qcom/sm8350-oneplus-lemonade.dts      |   82 ++
>>   .../boot/dts/qcom/sm8350-oneplus-lemonadep.dts     |   37 +
>>   4 files changed, 1368 insertions(+)
>>
>> diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
>> index 2cca20563a1d..369ad4721b29 100644
>> --- a/arch/arm64/boot/dts/qcom/Makefile
>> +++ b/arch/arm64/boot/dts/qcom/Makefile
>> @@ -211,6 +211,8 @@ dtb-$(CONFIG_ARCH_QCOM)	+= sm8250-xiaomi-elish-csot.dtb
>>   dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-hdk.dtb
>>   dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-microsoft-surface-duo2.dtb
>>   dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-mtp.dtb
>> +dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-oneplus-lemonade.dtb
>> +dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-oneplus-lemonadep.dtb
>>   dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-sony-xperia-sagami-pdx214.dtb
>>   dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-sony-xperia-sagami-pdx215.dtb
>>   dtb-$(CONFIG_ARCH_QCOM)	+= sm8450-hdk.dtb
>> diff --git a/arch/arm64/boot/dts/qcom/sm8350-oneplus-common.dtsi b/arch/arm64/boot/dts/qcom/sm8350-oneplus-common.dtsi
>> new file mode 100644
>> index 000000000000..2f6768f35259
>> --- /dev/null
>> +++ b/arch/arm64/boot/dts/qcom/sm8350-oneplus-common.dtsi
>> @@ -0,0 +1,1247 @@
>> +// SPDX-License-Identifier: BSD-3-Clause
>> +/*
>> + * Copyright (c) 2023 Caleb Connolly <caleb.connolly@linaro.org>
>> + *
>> + * Copyright (c) 2023 Igalia S.L.
>> + * Authors:
>> + *	Nia Espera <nespera@igalia.com>
>> + */
>> +
>> +#include <dt-bindings/iio/qcom,spmi-adc7-pm8350.h>
>> +#include <dt-bindings/iio/qcom,spmi-adc7-pm8350b.h>
>> +#define SMB139x_1_SID 0x0b
>> +#define SMB139x_2_SID 0x0c
>> +#include <dt-bindings/iio/qcom,spmi-adc7-smb139x.h>
>> +#include <dt-bindings/pinctrl/qcom,pmic-gpio.h>
>> +#include <dt-bindings/regulator/qcom,rpmh-regulator.h>
>> +#include "sm8350.dtsi"
>> +#include "pm8350.dtsi"
>> +#include "pm8350b.dtsi"
>> +#include "pm8350c.dtsi"
>> +#include "pmk8350.dtsi"
>> +#include "pmr735a.dtsi"
>> +#include "pmr735b.dtsi"
>> +
>> +/ {
>> +	/* As with the Sony devices, msm-id and board-id aren't needed here */
>> +	chassis-type = "handset";
>> +	interrupt-parent = <&intc>;
>> +
>> +	chosen {
>> +		#address-cells = <2>;
>> +		#size-cells = <2>;
>> +		ranges;
>> +
>> +		framebuffer: framebuffer@e4d00000 {
>> +			compatible = "simple-framebuffer";
>> +			reg = <0 0xe4d00000 0 0x2400000>;
>> +			width = <1080>;
>> +			height = <2412>;
>> +			stride = <(1080 * 4)>;
>> +			format = "a8r8g8b8";
>> +			/*
>> +			 * That's (going to be) a lot of clocks, but it's
>> +			 * necessary due to unused clk cleanup & no panel
>> +			 * driver yet.
>> +			 */
>> +			clocks = <&gcc GCC_DISP_HF_AXI_CLK>,
>> +				 <&gcc GCC_DISP_SF_AXI_CLK>;
>> +		};
>> +	};
>> +
>> +	gpio-keys {
>> +		compatible = "gpio-keys";
>> +
>> +		pinctrl-names = "default";
>> +		pinctrl-0 = <&vol_down_n>;
>> +
>> +		key-vol-up {
>> +			label = "Volume Up";
>> +			linux,code = <KEY_VOLUMEUP>;
>> +			gpios = <&pmk8350_gpios 6 GPIO_ACTIVE_LOW>;
>> +			debounce-interval = <15>;
>> +			linux,can-disable;
>> +			wakeup-source;
>> +		};
>> +	};
>> +
>> +	bat: battery {
>> +		compatible = "simple-battery";
>> +		device-chemistry = "lithium-ion";
>> +		voltage-min-design-microvolt = <3200000>;
>> +		energy-full-design-microwatt-hours = <15840000>;
>> +		charge-full-design-microamp-hours = <2225000>;
>> +	};
>> +
>> +	vph_pwr: vph-pwr-regulator {
>> +		compatible = "regulator-fixed";
>> +		regulator-name = "vph_pwr";
>> +		regulator-min-microvolt = <3700000>;
>> +		regulator-max-microvolt = <3700000>;
>> +
>> +		regulator-always-on;
>> +		regulator-boot-on;
>> +	};
>> +
>> +	display_panel_avdd: display_regulator@1 {
>> +		compatible = "regulator-fixed";
>> +		regulator-name = "display_panel_avdd";
>> +		regulator-min-microvolt = <5500000>;
>> +		regulator-max-microvolt = <5500000>;
>> +		regulator-enable-ramp-delay = <233>;
>> +
>> +		enable-active-high;
>> +		regulator-boot-on;
>> +	};
>> +
>> +	/*
>> +	 * Hack; OP9 bootloader specifically checks that the timer node has
>> +	 * this label.
>> +	 */
>> +	arch_timer: timer {};
>> +};
>> +
>> +&reserved_memory {
>> +	/* EFI splash screen */
>> +	memory@e1000000 {
> 
> Don't use memory@ names, this was decided a while ago to not be correct.
> I think other devices here use e.g. splash@[..] or something.

Noted, okay.

> 
>> +		reg = <0 0xe4d00000 0 0x02400000>;
>> +		no-map;
>> +		label = "cont_splash_region";
>> +	};
>> +
>> +	ramoops: ramoops@E9700000 {
>> +		compatible = "ramoops";
>> +		reg = <0 0xe9700000 0 0x05b8000>;
>> +		record-size =	<0x40000>;
>> +		console-size =	<0x40000>;
>> +		ftrace-size =	<0x200000>;
>> +		pmsg-size =	<0x200000>;
>> +		devinfo-size =	<0x08000>;
>> +		dumpinfo-size =	<0x08000>;
>> +		rsv01info-size=	<0x08000>;
>> +		rsv02info-size=	<0x08000>;
>> +		rsv03info-size=	<0x08000>;
>> +		rsv04info-size=	<0x08000>;
>> +		rsv05info-size=	<0x08000>;
>> +		ecc-size=	<0x0>;
> 
> Half of these flags don't exist. Did you run dtbs_check? Also
> indentation normally doesn't get padded out in mainline, just do e.g.
> record-size = <0x40000>; without the tab.
> 

Mea culpa. Will fix, and run a check.

>> +	};
>> +
>> +	/* bootloader log buffer */
>> +	memory@9fff7000 {
>> +		reg = <0x00 0x9fff7000 0x00 0x8000>;
>> +	};
>> +
>> +	/* unknown; "param_mem" downstream */
>> +	memory@ea700000 {
>> +		reg = <0x00 0xea700000 0x00 0x800000>;
>> +	};
>> +};
>> +
>> +&apps_rsc {
>> +	regulators-0 {
>> +		compatible = "qcom,pm8350-rpmh-regulators";
>> +		qcom,pmic-id = "b";
>> +
>> +		vdd-s1-supply = <&vph_pwr>;
>> +		vdd-s2-supply = <&vph_pwr>;
>> +		vdd-s3-supply = <&vph_pwr>;
>> +		vdd-s4-supply = <&vph_pwr>;
>> +		vdd-s5-supply = <&vph_pwr>;
>> +		vdd-s6-supply = <&vph_pwr>;
>> +		vdd-s7-supply = <&vph_pwr>;
>> +		vdd-s8-supply = <&vph_pwr>;
>> +		vdd-s9-supply = <&vph_pwr>;
>> +		vdd-s10-supply = <&vph_pwr>;
>> +		vdd-s11-supply = <&vph_pwr>;
>> +		vdd-s12-supply = <&vph_pwr>;
>> +
>> +		vdd-l1-l4-supply = <&pm8350_s11>;
>> +		vdd-l2-l7-supply = <&vreg_bob>;
>> +		vdd-l3-l5-supply = <&vreg_bob>;
>> +		vdd-l6-l9-l10-supply = <&pm8350_s11>;
>> +		vdd-l8-supply = <&pmr735a_s2>;
>> +
>> +		/*
>> +		 * ARC regulators:
>> +		 * S5 - mx.lvl
>> +		 * S6 - gfx.lvl
>> +		 * S9 - mxc.lvl
>> +		 */
>> +
>> +		pm8350_s10: smps10 {
>> +			regulator-name = "pm8350_s10";
>> +			regulator-min-microvolt = <1800000>;
>> +			regulator-max-microvolt = <1800000>;
>> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
>> +		};
>> +
>> +		pm8350_s11: smps11 {
>> +			regulator-name = "pm8350_s11";
>> +			regulator-min-microvolt = <752000>;
>> +			regulator-max-microvolt = <1012000>;
>> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
>> +		};
>> +
>> +		pm8350_s12: smps12 {
>> +			regulator-name = "pm8350_s12";
>> +			regulator-min-microvolt = <1224000>;
>> +			regulator-max-microvolt = <1360000>;
>> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
>> +		};
>> +
>> +		pm8350_l1: ldo1 {
>> +			regulator-name = "pm8350_l1";
>> +			regulator-min-microvolt = <912000>;
>> +			regulator-max-microvolt = <920000>;
>> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
>> +		};
>> +
>> +		pm8350_l2: ldo2 {
>> +			regulator-name = "pm8350_l2";
>> +			regulator-min-microvolt = <3072000>;
>> +			regulator-max-microvolt = <3072000>;
>> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
>> +		};
>> +
>> +		pm8350_l3: ldo3 {
>> +			regulator-name = "pm8350_l3";
>> +			regulator-min-microvolt = <904000>;
>> +			regulator-max-microvolt = <904000>;
>> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
>> +		};
>> +
>> +		/* L4 - lmx.lvl (ARC) */
>> +
>> +		pm8350_l5: ldo5 {
>> +			regulator-name = "pm8350_l5";
>> +			regulator-min-microvolt = <880000>;
>> +			regulator-max-microvolt = <888000>;
>> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
>> +			regulator-allow-set-load;
>> +			regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
>> +						   RPMH_REGULATOR_MODE_HPM>;
>> +		};
>> +
>> +		pm8350_l6: ldo6 {
>> +			regulator-name = "pm8350_l6";
>> +			regulator-min-microvolt = <1200000>;
>> +			regulator-max-microvolt = <1208000>;
>> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
>> +			regulator-allow-set-load;
>> +			regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
>> +						   RPMH_REGULATOR_MODE_HPM>;
>> +		};
>> +
>> +		pm8350_l7: ldo7 {
>> +			regulator-name = "pm8350_l7";
>> +			regulator-min-microvolt = <2400000>;
>> +			regulator-max-microvolt = <3008000>;
>> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
>> +			regulator-allow-set-load;
>> +			regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
>> +						   RPMH_REGULATOR_MODE_HPM>;
>> +		};
>> +
>> +		/* L8 - lcx.lvl (ARC) */
>> +
>> +		pm8350_l9: ldo9 {
>> +			regulator-name = "pm8350_l9";
>> +			regulator-min-microvolt = <1200000>;
>> +			regulator-max-microvolt = <1200000>;
>> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
>> +			regulator-allow-set-load;
>> +			regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
>> +						   RPMH_REGULATOR_MODE_HPM>;
>> +		};
>> +	};
>> +
>> +	regulators-1 {
>> +		compatible = "qcom,pm8350c-rpmh-regulators";
>> +		qcom,pmic-id = "c";
>> +
>> +		vdd-s1-supply = <&vph_pwr>;
>> +		vdd-s2-supply = <&vph_pwr>;
>> +		vdd-s3-supply = <&vph_pwr>;
>> +		vdd-s4-supply = <&vph_pwr>;
>> +		vdd-s5-supply = <&vph_pwr>;
>> +		vdd-s6-supply = <&vph_pwr>;
>> +		vdd-s7-supply = <&vph_pwr>;
>> +		vdd-s8-supply = <&vph_pwr>;
>> +		vdd-s9-supply = <&vph_pwr>;
>> +		vdd-s10-supply = <&vph_pwr>;
>> +
>> +		vdd-l1-l12-supply = <&pm8350c_s1>;
>> +		vdd-l2-l8-supply = <&pm8350c_s1>;
>> +		vdd-l3-l4-l5-l7-l13-supply = <&vreg_bob>;
>> +		vdd-l6-l9-l11-supply = <&vreg_bob>;
>> +		vdd-l10-supply = <&pm8350_s12>;
>> +
>> +		vdd-bob-supply = <&vph_pwr>;
>> +
>> +		pm8350c_s1: smps1 {
>> +			regulator-name = "pm8350c_s1";
>> +			regulator-min-microvolt = <1800000>;
>> +			regulator-max-microvolt = <1952000>;
>> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
>> +		};
>> +
>> +		/* S2 - ebi.lvl (ARC) */
>> +
>> +		pm8350c_s3: smps3 {
>> +			regulator-name = "pm8350c_s3";
>> +			regulator-min-microvolt = <300000>;
>> +			regulator-max-microvolt = <704000>;
>> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
>> +		};
>> +
>> +		/*
>> +		 * ARC regulators:
>> +		 * S4 - mss.lvl
>> +		 * S6 - cx.lvl
>> +		 * S8 - mmcx.lvl
>> +		 */
>> +
>> +		pm8350c_s10: smps10 {
>> +			regulator-name = "pm8350c_s10";
>> +			regulator-min-microvolt = <1048000>;
>> +			regulator-max-microvolt = <1128000>;
>> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
>> +		};
>> +
>> +		pm8350c_l1: ldo1 {
>> +			regulator-name = "pm8350c_l1";
>> +			regulator-min-microvolt = <1800000>;
>> +			regulator-max-microvolt = <1800000>;
>> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
>> +		};
>> +
>> +		pm8350c_l2: ldo2 {
>> +			regulator-name = "pm8350c_l2";
>> +			regulator-min-microvolt = <1800000>;
>> +			regulator-max-microvolt = <1800000>;
>> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
>> +		};
>> +
>> +		pm8350c_l3: ldo3 {
>> +			regulator-name = "pm8350c_l3";
>> +			regulator-min-microvolt = <3000000>;
>> +			regulator-max-microvolt = <3300000>;
>> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
>> +		};
>> +
>> +		pm8350c_l4: ldo4 {
>> +			regulator-name = "pm8350c_l4";
>> +			regulator-min-microvolt = <1704000>;
>> +			regulator-max-microvolt = <3000000>;
>> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
>> +		};
>> +
>> +		pm8350c_l5: ldo5 {
>> +			regulator-name = "pm8350c_l5";
>> +			regulator-min-microvolt = <1704000>;
>> +			regulator-max-microvolt = <3000000>;
>> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
>> +		};
>> +
>> +		pm8350c_l6: ldo6 {
>> +			regulator-name = "pm8350c_l6";
>> +			regulator-min-microvolt = <1800000>;
>> +			regulator-max-microvolt = <2960000>;
>> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
>> +		};
>> +
>> +		pm8350c_l7: ldo7 {
>> +			regulator-name = "pm8350c_l7";
>> +			regulator-min-microvolt = <3008000>;
>> +			regulator-max-microvolt = <3008000>;
>> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
>> +		};
>> +
>> +		pm8350c_l8: ldo8 {
>> +			regulator-name = "pm8350c_l8";
>> +			regulator-min-microvolt = <1800000>;
>> +			regulator-max-microvolt = <1800000>;
>> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
>> +		};
>> +
>> +		pm8350c_l9: ldo9 {
>> +			regulator-name = "pm8350c_l9";
>> +			regulator-min-microvolt = <2800000>;
>> +			regulator-max-microvolt = <3008000>;
>> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
>> +		};
>> +
>> +		pm8350c_l10: ldo10 {
>> +			regulator-name = "pm8350c_l10";
>> +			regulator-min-microvolt = <1200000>;
>> +			regulator-max-microvolt = <1200000>;
>> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
>> +		};
>> +
>> +		pm8350c_l11: ldo11 {
>> +			regulator-name = "pm8350c_l11";
>> +			regulator-min-microvolt = <2400000>;
>> +			regulator-max-microvolt = <3008000>;
>> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
>> +		};
>> +
>> +		pm8350c_l12: ldo12 {
>> +			regulator-name = "pm8350c_l12";
>> +			regulator-min-microvolt = <1800000>;
>> +			regulator-max-microvolt = <2000000>;
>> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
>> +		};
>> +
>> +		pm8350c_l13: ldo13 {
>> +			regulator-name = "pm8350c_l13";
>> +			regulator-min-microvolt = <3000000>;
>> +			regulator-max-microvolt = <3200000>;
>> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
>> +		};
>> +
>> +		vreg_bob: bob {
>> +			regulator-name = "vreg_bob";
>> +			regulator-min-microvolt = <3400000>;
>> +			regulator-max-microvolt = <3960000>;
>> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_AUTO>;
>> +		};
>> +	};
>> +
>> +	/* regulators-2 unused for now */
> 
> Is there some PMIC that will be here? Since it's just numbered I also
> don't see a problem renaming regulators-2 to regulators-3 if anything
> was added later here.
> 

Yep, pm8350b; no driver exists for it upstream and it's a single 
regulator that isn't particularly important (cannot find any references 
to it downstream, at least). I'll renumber the others.

>> +
>> +	regulators-3 {
>> +		compatible = "qcom,pmr735a-rpmh-regulators";
>> +		qcom,pmic-id = "e";
>> +
>> +		vdd-s1-supply = <&vph_pwr>;
>> +		vdd-s2-supply = <&vph_pwr>;
>> +		vdd-s3-supply = <&vph_pwr>;
>> +
>> +		vdd-l1-l2-supply = <&pmr735a_s2>;
>> +		vdd-l3-supply = <&pmr735a_s1>;
>> +		vdd-l4-supply = <&pm8350c_s1>;
>> +		vdd-l5-l6-supply = <&pm8350c_s1>;
>> +		vdd-l7-bob-supply = <&vreg_bob>;
>> +
>> +		pmr735a_s1: smps1 {
>> +			regulator-name = "pmr735a_s1";
>> +			regulator-min-microvolt = <1200000>;
>> +			regulator-max-microvolt = <1280000>;
>> +		};
>> +
>> +		pmr735a_s2: smps2 {
>> +			regulator-name = "pmr735a_s2";
>> +			regulator-min-microvolt = <500000>;
>> +			regulator-max-microvolt = <976000>;
>> +		};
>> +
>> +		pmr735a_s3: smps3 {
>> +			regulator-name = "pmr735a_s3";
>> +			regulator-min-microvolt = <2208000>;
>> +			regulator-max-microvolt = <2352000>;
>> +		};
>> +
>> +		pmr735a_l1: ldo1 {
>> +			regulator-name = "pmr735a_l1";
>> +			regulator-min-microvolt = <912000>;
>> +			regulator-max-microvolt = <912000>;
>> +		};
>> +
>> +		pmr735a_l2: ldo2 {
>> +			regulator-name = "pmr735a_l2";
>> +			regulator-min-microvolt = <1200000>;
>> +			regulator-max-microvolt = <1200000>;
>> +		};
>> +
>> +		pmr735a_l3: ldo3 {
>> +			regulator-name = "pmr735a_l3";
>> +			regulator-min-microvolt = <1200000>;
>> +			regulator-max-microvolt = <1200000>;
>> +		};
>> +
>> +		pmr735a_l4: ldo4 {
>> +			regulator-name = "pmr735a_l4";
>> +			regulator-min-microvolt = <1776000>;
>> +			regulator-max-microvolt = <1872000>;
>> +		};
>> +
>> +		pmr735a_l5: ldo5 {
>> +			regulator-name = "pmr735a_l5";
>> +			regulator-min-microvolt = <800000>;
>> +			regulator-max-microvolt = <800000>;
>> +		};
>> +
>> +		pmr735a_l6: ldo6 {
>> +			regulator-name = "pmr735a_l6";
>> +			regulator-min-microvolt = <480000>;
>> +			regulator-max-microvolt = <904000>;
>> +		};
>> +
>> +		pmr735a_l7: ldo7 {
>> +			regulator-name = "pmr735a_l7";
>> +			regulator-min-microvolt = <2800000>;
>> +			regulator-max-microvolt = <2800000>;
>> +		};
>> +	};
>> +};
>> +
>> +&adsp {
>> +	firmware-name = "qcom/OnePlus/lemonade/adsp.mbn";
>> +	status = "okay";
>> +};
>> +
>> +&cdsp {
>> +	firmware-name = "qcom/OnePlus/lemonade/cdsp.mbn";
>> +	status = "okay";
>> +};
>> +
>> +&slpi {
>> +	firmware-name = "qcom/OnePlus/lemonade/slpi.mbn";
>> +	status = "okay";
>> +};
>> +
>> +&ipa {
>> +	qcom,gsi-loader = "self";
>> +	memory-region = <&pil_ipa_fw_mem>;
>> +	firmware-name = "qcom/OnePlus/lemonade/ipa_fws.mbn";
>> +	status = "okay";
>> +};
>> +
>> +&mpss {
>> +	firmware-name = "qcom/OnePlus/lemonade/modem.mbn",
>> +			"qcom/OnePlus/lemonade/mcfg_hw.mbn";
> 
> All these firmware-name attributes don't follow what's already in
> mainline.
> 
> Use e.g. qcom/sm8350/lemonade/*

Noted, alright

> 
>> +
>> +	status = "okay";
>> +};
>> +
>> +&i2c4 {
>> +	clock-frequency = <400000>;
>> +	status = "okay";
>> +
>> +	/* Touchscreens: Syna TCM oncell or Samsung s6sy761 */
>> +};
>> +
>> +&i2c13 {
>> +	clock-frequency = <100000>;
>> +	status = "okay";
>> +
>> +	fsa4480@42 {
>> +		compatible = "fcs,fsa4480";
>> +		reg = <0x42>;
>> +		mode-switch;
>> +		orientation-switch;
>> +	};
>> +
>> +	/* Qualcomm PM8008i/PM8008j (?) @ 8, 9, c, d */
> 
> Check again in downstream if the @c and @d are actually enabled, at
> least they're not on my boards and the PM8008 is only addressable on @8
> and @9.

Seems like they all are used on this device; (d) in particular seems to 
be needed for the camera.

>> +};
>> +
>> +&i2c15 {
>> +	clock-frequency = <400000>;
>> +	status = "okay";
>> +
>> +	/* sn-nci NFC controller @ 28 */
>> +};
>> +
>> +&pm8350_gpios {
>> +	usb2_vbus_boost_default: usb2_vbus_boost_default {
>> +		pins = "gpio8";
>> +		function = "normal";
>> +		output-low;
>> +		power-source = <0x00>;
>> +		phandle = <0x5e1>;
>> +	};
>> +
>> +	usb2_vbus_det_default: usb2_vbus_det_default {
>> +		pins = "gpio9";
>> +		function = "normal";
>> +		input-enable;
>> +		bias-disable;
>> +		power-source = <0x00>;
>> +		phandle = <0x5e0>;
>> +	};
> 
> Node name should not have underscores, use dashes.
> 
> Also here again I doubt you ran the dtbs_check, I think also the pmic
> gpios need have have a -state suffix.
> 
>   => usb2_vbus_det_default: usb2-vbus-det-default-state {
> 
>> +
>> +	gpio1_adc_default: gpio1-adc-default {
>> +		pins = "gpio1";
>> +		function = "normal";
>> +		bias-high-impedance;
>> +		bias-disable;
>> +		phandle = <0x566>;
>> +	};
>> +
>> +	gpio3_adc_default: gpio3-adc-default {
>> +		pins = "gpio3";
>> +		function = "normal";
>> +		bias-high-impedance;
>> +		bias-disable;
>> +		phandle = <0x567>;
> 
> Drop the random phandles you copied from the decompiled dtb?

Oops...

> 
>> +	};
>> +};
>> +
>> +&pm8350b_gpios {
>> +	vol_down_n: vol-down-n-state {
>> +		pins = "gpio6";
>> +		function = "normal";
>> +		power-source = <1>;
>> +		bias-pull-up;
>> +		input-enable;
>> +	};
>> +};
>> +
>> +&pmk8350_rtc {
>> +	status = "okay";
>> +};
>> +
>> +&pmk8350_vadc {
>> +	pinctrl-0 = <&gpio1_adc_default &gpio1_adc_default>;
>> +	pinctrl-names = "default";
>> +
>> +	pmk8350_ref_gnd {
> 
> Doesn't follow the format in the docs.
> 
>> +		reg = <0x00>;
>> +		label = "pmk8350_ref_gnd";
>> +		qcom,pre-scaling = <0x01 0x01>;
> 
> Don't use hex here.
> 
>> +	};
>> +
>> +	pmk8350_vref_1p25 {
>> +		reg = <0x01>;
>> +		label = "pmk8350_vref_1p25";
>> +		qcom,pre-scaling = <0x01 0x01>;
>> +	};
>> +
>> +	pmk8350_die_temp {
>> +		reg = <0x03>;
>> +		label = "pmk8350_die_temp";
>> +		qcom,pre-scaling = <0x01 0x01>;
>> +	};
>> +
>> +	pmk8350_xo_therm {
>> +		reg = <0x44>;
>> +		label = "pmk8350_xo_therm";
>> +		qcom,ratiometric;
>> +		qcom,hw-settle-time = <0xc8>;
> 
> Make this also decimal.
> 
>> +		qcom,pre-scaling = <0x01 0x01>;
>> +	};
>> +
>> +	pm8350_ref_gnd {
>> +		reg = <0x100>;
>> +		label = "pm8350_ref_gnd";
>> +		qcom,pre-scaling = <0x01 0x01>;
>> +	};
>> +
>> +	pm8350_vref_1p25 {
>> +		reg = <0x101>;
>> +		label = "pm8350_vref_1p25";
>> +		qcom,pre-scaling = <0x01 0x01>;
>> +	};
>> +
>> +	pm8350_die_temp {
>> +		reg = <0x103>;
>> +		label = "pm8350_die_temp";
>> +		qcom,pre-scaling = <0x01 0x01>;
>> +	};
>> +
>> +	pm8350_vph_pwr {
>> +		reg = <0x18e>;
>> +		label = "pm8350_vph_pwr";
>> +		qcom,pre-scaling = <0x01 0x03>;
>> +	};
>> +
>> +	pm8350b_ref_gnd {
>> +		reg = <0x300>;
>> +		label = "pm8350b_ref_gnd";
>> +		qcom,pre-scaling = <0x01 0x01>;
>> +	};
>> +
>> +	pm8350b_vref_1p25 {
>> +		reg = <0x301>;
>> +		label = "pm8350b_vref_1p25";
>> +		qcom,pre-scaling = <0x01 0x01>;
>> +	};
>> +
>> +	pm8350b_die_temp {
>> +		reg = <0x303>;
>> +		label = "pm8350b_die_temp";
>> +		qcom,pre-scaling = <0x01 0x01>;
>> +	};
>> +
>> +	pm8350b_vph_pwr {
>> +		reg = <0x38e>;
>> +		label = "pm8350b_vph_pwr";
>> +		qcom,pre-scaling = <0x01 0x03>;
>> +	};
>> +
>> +	pm8350b_vbat_sns {
>> +		reg = <0x38f>;
>> +		label = "pm8350b_vbat_sns";
>> +		qcom,pre-scaling = <0x01 0x03>;
>> +	};
>> +
>> +	pm8350_msm_therm {
>> +		reg = <PM8350_ADC7_AMUX_THM1_100K_PU(1)>;
>> +		label = "pm8350_msm_therm";
>> +		qcom,ratiometric;
>> +		qcom,hw-settle-time = <200>;
>> +		qcom,pre-scaling = <1 1>;
>> +	};
>> +
>> +	pm8350_cam_flash_therm {
>> +		reg = <PM8350_ADC7_AMUX_THM2_100K_PU(1)>;
>> +		label = "pm8350_cam_flash_therm";
>> +		qcom,ratiometric;
>> +		qcom,hw-settle-time = <200>;
>> +		qcom,pre-scaling = <1 1>;
>> +	};
>> +
>> +	pm8350_hot_pocket_therm {
>> +		reg = <PM8350_ADC7_AMUX_THM3_100K_PU(1)>;
>> +		label = "pm8350_hot_pocket_therm";
>> +		qcom,ratiometric;
>> +		qcom,hw-settle-time = <200>;
>> +		qcom,pre-scaling = <1 1>;
>> +	};
>> +
>> +	pm8350_wide_rfc_therm {
>> +		reg = <PM8350_ADC7_AMUX_THM4_100K_PU(1)>;
>> +		label = "pm8350_wide_rfc_therm";
>> +		qcom,ratiometric;
>> +		qcom,hw-settle-time = <200>;
>> +		qcom,pre-scaling = <1 1>;
>> +	};
>> +
>> +	pm8350_rear_tof_therm {
>> +		reg = <PM8350_ADC7_AMUX_THM5_100K_PU(1)>;
>> +		label = "pm8350_rear_tof_therm";
>> +		qcom,ratiometric;
>> +		qcom,hw-settle-time = <200>;
>> +		qcom,pre-scaling = <1 1>;
>> +	};
>> +
>> +	pm8350b_usb_conn_therm {
>> +		reg = <PM8350B_ADC7_AMUX_THM4_100K_PU>;
>> +		label = "pm8350b_usb_conn_therm";
>> +		qcom,ratiometric;
>> +		qcom,hw-settle-time = <200>;
>> +		qcom,pre-scaling = <1 1>;
>> +	};
>> +
>> +	pm8350b_wl_chg_therm {
>> +		reg = <PM8350B_ADC7_GPIO2_100K_PU>;
>> +		label = "pm8350b_wl_chg_therm";
>> +		qcom,ratiometric;
>> +		qcom,hw-settle-time = <200>;
>> +		qcom,pre-scaling = <1 1>;
>> +	};
>> +
>> +	pm8350b_chg_temp {
>> +		reg = <PM8350B_ADC7_CHG_TEMP>;
>> +		label = "pm8350b_chg_temp";
>> +		qcom,pre-scaling = <1 1>;
>> +	};
>> +
>> +	pmr735a_ref_gnd {
>> +		reg = <0x400>;
>> +		label = "pmr735a_ref_gnd";
>> +		qcom,pre-scaling = <0x01 0x01>;
>> +	};
>> +
>> +	pmr735a_vref_1p25 {
>> +		reg = <0x401>;
>> +		label = "pmr735a_vref_1p25";
>> +		qcom,pre-scaling = <0x01 0x01>;
>> +	};
>> +
>> +	pmr735a_die_temp {
>> +		reg = <0x403>;
>> +		label = "pmr735a_die_temp";
>> +		qcom,pre-scaling = <0x01 0x01>;
>> +	};
>> +
>> +	pmr735b_ref_gnd {
>> +		reg = <0x500>;
>> +		label = "pmr735b_ref_gnd";
>> +		qcom,pre-scaling = <0x01 0x01>;
>> +	};
>> +
>> +	pmr735b_vref_1p25 {
>> +		reg = <0x501>;
>> +		label = "pmr735b_vref_1p25";
>> +		qcom,pre-scaling = <0x01 0x01>;
>> +	};
>> +
>> +	pmr735b_die_temp {
>> +		reg = <0x503>;
>> +		label = "pmr735b_die_temp";
>> +		qcom,pre-scaling = <0x01 0x01>;
>> +	};
>> +
>> +	smb139x_1_smb_temp {
>> +		reg = <SMB139x_1_ADC7_SMB_TEMP>;
>> +		label = "smb139x_1_smb_temp";
>> +		qcom,pre-scaling = <1 1>;
>> +	};
>> +
>> +	smb139x_2_smb_temp {
>> +		reg = <SMB139x_2_ADC7_SMB_TEMP>;
>> +		label = "smb139x_2_smb_temp";
>> +		qcom,pre-scaling = <1 1>;
>> +	};
>> +
>> +	gpio1_v {
>> +		reg = <0x128>;
>> +		label = "gpio1_v";
>> +		qcom,ratiometric;
>> +		qcom,hw-settle-time = <0x2bc>;
>> +		qcom,pre-scaling = <0x01 0x01>;
>> +	};
>> +
>> +	gpio3_v {
>> +		reg = <0x12b>;
>> +		label = "gpio3_v";
>> +		qcom,ratiometric;
>> +		qcom,hw-settle-time = <0x2bc>;
>> +		qcom,pre-scaling = <0x01 0x01>;
>> +	};
>> +};
>> +
>> +&pmk8350_adc_tm {
>> +	status = "okay";
>> +
>> +	pm8350_msm_therm {
>> +		reg = <0x144>;
>> +		qcom,ratiometric;
>> +		qcom,hw-settle-time = <0xc8>;
> 
> Here also. Node name doesn't follow docs, missing io-channels (used here
> instead of reg), etc.
> 
>> +	};
>> +
>> +	pm8350_cam_flash_therm {
>> +		reg = <0x145>;
>> +		qcom,ratiometric;
>> +		qcom,hw-settle-time = <0xc8>;
>> +	};
>> +
>> +	pm8350_hot_pocket_therm {
>> +		reg = <0x146>;
>> +		qcom,ratiometric;
>> +		qcom,hw-settle-time = <0xc8>;
>> +	};
>> +
>> +	pm8350_wide_rfc_therm {
>> +		reg = <0x147>;
>> +		qcom,ratiometric;
>> +		qcom,hw-settle-time = <0xc8>;
>> +	};
>> +
>> +	pm8350_rear_tof_therm {
>> +		reg = <0x148>;
>> +		qcom,ratiometric;
>> +		qcom,hw-settle-time = <0xc8>;
>> +	};
>> +
>> +	pm8350b_usb_conn_therm {
>> +		reg = <0x347>;
>> +		qcom,ratiometric;
>> +		qcom,hw-settle-time = <0xc8>;
>> +	};
>> +
>> +	pm8350b_wl_chg_therm {
>> +		reg = <0x34b>;
>> +		qcom,ratiometric;
>> +		qcom,hw-settle-time = <0xc8>;
>> +	};
>> +
>> +	pmk8350_xo_therm {
>> +		reg = <0x44>;
>> +		qcom,ratiometric;
>> +		qcom,hw-settle-time = <0xc8>;
>> +	};
>> +};
>> +
>> +&pon_pwrkey {
>> +	status = "okay";
>> +};
>> +
>> +&pon_resin {
>> +	linux,code = <KEY_VOLUMEUP>;
>> +	status = "okay";
>> +};
>> +
>> +&qupv3_id_0 {
>> +	status = "okay";
>> +};
>> +
>> +&qupv3_id_1 {
>> +	status = "okay";
>> +};
>> +
>> +&qupv3_id_2 {
>> +	status = "okay";
>> +};
>> +
>> +&gpi_dma0 {
>> +	status = "okay";
>> +};
>> +
>> +&gpi_dma1 {
>> +	status = "okay";
>> +};
>> +
>> +&gpi_dma2 {
>> +	status = "okay";
>> +};
>> +
>> +&removed_mem {
>> +	reg = <0x0 0xd8800000 0x0 0x8e00000>;
>> +};
>> +
>> +&tlmm {
>> +	gpio-reserved-ranges = <52 8>;
>> +
>> +	pcie0_default_state: pcie0-default-state {
>> +		perst-pins {
>> +			pins = "gpio94";
>> +			function = "gpio";
>> +			drive-strength = <2>;
>> +			bias-pull-down;
>> +		};
>> +
>> +		clkreq-pins {
>> +			pins = "gpio95";
>> +			function = "pcie0_clkreqn";
>> +			drive-strength = <2>;
>> +			bias-pull-up;
>> +		};
>> +
>> +		wake-pins {
>> +			pins = "gpio96";
>> +			function = "gpio";
>> +			drive-strength = <2>;
>> +			bias-pull-up;
>> +		};
>> +
>> +		sleep-pins {
>> +			pins = "gpio95";
>> +			function = "gpio";
>> +			drive-strength = <2>;
>> +			bias-pull-up;
>> +		};
>> +	};
>> +
>> +	pcie1_default_state: pcie1-default-state {
>> +		perst-pins {
>> +			pins = "gpio97";
>> +			function = "gpio";
>> +			drive-strength = <2>;
>> +			bias-pull-down;
>> +		};
>> +
>> +		clkreq-pins {
>> +			pins = "gpio98";
>> +			function = "pcie1_clkreqn";
>> +			drive-strength = <2>;
>> +			bias-pull-up;
>> +		};
>> +
>> +		wake-pins {
>> +			pins = "gpio99";
>> +			function = "gpio";
>> +			drive-strength = <2>;
>> +			bias-pull-up;
>> +			/* wil6210_refclk_en_pin lives here also */
>> +		};
>> +	};
>> +
>> +	tp_rst_active: tp_rst_active {
> 
> Wrong node name and more below.
> 
>> +		pins = "gpio22";
>> +		function = "gpio";
>> +		drive-strength = <8>;
>> +		bias-pull-up;
>> +	};
>> +
>> +	/* tp_rst_suspend pin is different per device, don't specify here */
>> +
>> +	tp_irq_active: tp_irq_active {
>> +		pins = "gpio23";
>> +		function = "gpio";
>> +		drive-strength = <8>;
>> +		bias-disable;
>> +		input-enable;
>> +	};
>> +
>> +	tp_irq_suspend: tp_irq_suspend {
>> +		pins = "gpio23";
>> +		function = "gpio";
>> +		drive-strength = <2>;
>> +		bias-pull-down;
>> +	};
>> +
>> +	sde_dsi_active: sde-dsi-active {
>> +		pins = "gpio24";
>> +		function = "gpio";
>> +		drive-strength = <8>;
>> +		bias-disable = <0>;
>> +	};
>> +
>> +	sde_dsi_suspend: sde-dsi-suspend {
>> +		pins = "gpio24";
>> +		function = "gpio";
>> +		drive-strength = <2>;
>> +		bias-pull-down;
>> +	};
>> +
>> +	sde_te_active: sde-te-active {
>> +		pins = "gpio82";
>> +		function = "mdp_vsync";
>> +		drive-strength = <2>;
>> +		bias-pull-down;
>> +	};
>> +
>> +	sde_te_suspend: sde-te-suspend {
>> +		pins = "gpio82";
>> +		function = "mdp_vsync";
>> +		drive-strength = <2>;
>> +		bias-pull-down;
>> +	};
>> +
>> +	aw_irq: aw_irq {
>> +		pins = "gpio14";
>> +		function = "gpio";
>> +		drive-strength = <2>;
>> +		bias-pull-up;
>> +	};
>> +
>> +	aw_reset: aw_reset {
>> +		pins = "gpio75";
>> +		function = "gpio";
>> +		drive-strength = <2>;
>> +		bias-disable;
>> +	};
> 
> Skip unused pinctrl for now?

Some of these I had meant to use but wasn't able to get everything quite 
working. Forgot to remove, sorry.

> 
>> +
>> +	display_panel_avdd_default: display_panel_avdd_default {
>> +		pins = "gpio12";
>> +		function = "gpio";
>> +		drive-strength = <8>;
>> +		bias-disable = <0>;
>> +		output-high;
>> +	};
>> +
>> +	/* Modem-related pin common on both devices */
>> +	rf_cable_ant0_active: rf_cable_ant0_active {
>> +		pins = "gpio165";
>> +		function = "gpio";
>> +		drive-strength = <2>;
>> +		bias-pull-up;
>> +	};
>> +
>> +	usb_int_default: usb_int_default {
>> +		pins = "gpio198";
>> +		function = "gpio";
>> +		drive-strength = <2>;
>> +		bias-pull-down;
>> +		input-enable;
>> +	};
>> +
>> +	qupv3_se18_default_cts: qupv3_se18_default_cts {
>> +		pins = "gpio68";
>> +		function = "gpio";
>> +		drive-strength = <2>;
>> +		bias-disable;
>> +	};
>> +
>> +	qupv3_se18_default_rtsrx: qupv3_se18_default_rtsrx {
>> +		pins = "gpio69", "gpio71";
>> +		function = "gpio";
>> +		drive-strength = <2>;
>> +		bias-pull-down;
>> +	};
>> +
>> +	qupv3_se18_default_tx: qupv3_se18_default_tx {
>> +		pins = "gpio70";
>> +		function = "gpio";
>> +		drive-strength = <2>;
>> +		bias-pull-up;
>> +	};
>> +
>> +	qupv3_se18_ctsrx: qupv3_se18_ctsrx {
>> +		pins = "gpio68", "gpio71";
>> +		function = "qup18";
>> +		drive-strength = <2>;
>> +		bias-disable;
>> +	};
>> +
>> +	qupv3_se18_rts: qupv3_se18_rts {
>> +		pins = "gpio69";
>> +		function = "qup18";
>> +		drive-strength = <2>;
>> +		bias-pull-down;
>> +	};
>> +
>> +	qupv3_se18_tx: qupv3_se18_tx {
>> +		pins = "gpio70";
>> +		function = "qup18";
>> +		drive-strength = <2>;
>> +		bias-pull-up;
>> +	};
>> +
>> +	usb3phy_portselect_default: usb3phy_portselect_default {
>> +		pins = "gpio81";
>> +		function = "usb_phy";
>> +		drive-strength = <2>;
>> +		bias-disable;
>> +	};
>> +
>> +	usb3phy_portselect_gpio: usb3phy_portselect_gpio {
>> +		pins = "gpio81";
>> +		function = "gpio";
>> +		drive-strength = <2>;
>> +		bias-disable;
>> +	};
>> +
>> +	ext1_otg_default: ext1_otg_default {
>> +		pins = "gpio8";
>> +		function = "gpio";
>> +		drive-strength = <16>;
>> +		bias-pull-down;
>> +		input-enable;
>> +	};
>> +
>> +	cnss_wlan_en_active: cnss_wlan_en_active {
>> +		pins = "gpio64";
>> +		function = "gpio";
>> +		drive-strength = <16>;
>> +		output-high;
>> +		bias-pull-up;
>> +	};
>> +
>> +	cnss_wlan_en_sleep: cnss_wlan_en_sleep {
>> +		pins = "gpio64";
>> +		function = "gpio";
>> +		drive-strength = <2>;
>> +		output-low;
>> +		bias-pull-down;
>> +	};
>> +
>> +	bt_en_sleep: bt_en_sleep {
>> +		pins = "gpio65";
>> +		function = "gpio";
>> +		drive-strength = <2>;
>> +		output-low;
>> +		bias-pull-down;
>> +	};
>> +};
>> +
>> +&ufs_mem_hc {
>> +	reset-gpios = <&tlmm 203 GPIO_ACTIVE_LOW>;
>> +
>> +	vcc-supply = <&pm8350_l7>;
>> +	vcc-voltage-level = <2504000 2950000>;
>> +	vcc-max-microamp = <800000>;
>> +	vccq-supply = <&pm8350_l9>;
>> +	vccq-max-microamp = <900000>;
>> +
>> +	qcom,vddp-ref-clk-supply = <&pm8350_l9>;
>> +	qcom,vddp-ref-clk-max-microamp = <100>;
>> +
>> +	qcom,vddp-ref-clk-supply = <&pm8350_s12>;
>> +	qcom,vccq-parent-max-microamp = <210000>;
>> +
>> +	status = "okay";
>> +};
>> +
>> +&ufs_mem_phy {
>> +	vdda-phy-supply = <&pm8350_l5>;
>> +	vdda-phy-always-on;
> 
> Property doesn't exist
> 
>> +	vdda-max-microamp = <91600>;
>> +	vdda-pll-supply = <&pm8350_l6>;
>> +	vdda-pll-max-microamp = <19000>;
>> +
>> +	status = "okay";
>> +};
>> +
>> +&usb_1 {
>> +	/* Bug in interconnect driver breaks USB */
>> +	/delete-property/ interconnects;
>> +	/delete-property/ interconnect-names;
> 
> Any chance on fixing this? Or add some extra explanation? Not sure how
> liked such workarounds are in dts files.

Enabling that makes USB perma-broken as the regulators get stuck at off; 
I can investigate more if that would be necessary.

>> +
>> +	/*
>> +	 * USB3 is not tested (though it is enabled downstream) so limit to
>> +	 * high-speed for now.
>> +	 */
>> +	qcom,select-utmi-as-pipe-clk;
> 
> You never plugged the device into a USB 3.0 port? Should be trivial to
> test I think?

Will test for v2.

> 
>> +
>> +	status = "okay";
>> +};
>> +
>> +&usb_1_dwc3 {
>> +	/* Mode switching is untested */
>> +	dr_mode = "peripheral";
>> +	maximum-speed = "high-speed";
>> +	phys = <&usb_1_hsphy>;
>> +	phy-names = "usb2-phy";
>> +};
>> +
>> +&usb_1_hsphy {
>> +	vdda-pll-supply = <&pm8350_l5>;
>> +	vdda18-supply = <&pm8350c_l1>;
>> +	vdda33-supply = <&pm8350_l2>;
>> +
>> +	status = "okay";
>> +};
>> +
>> +/* Enabling this is necessary only for displayport */
> 
> Do you have displayport support with this dts? If not why enable it?

Fair enough, no. Panel driver is still WIP, will upstream this bit when 
that's working.

> 
>> +&usb_1_qmpphy {
>> +	vdda-phy-supply = <&pm8350_l6>;
>> +	vdda-pll-supply = <&pm8350_l1>;
>> +
>> +	status = "okay";
>> +};
>> +
>> +&i2c2 {
>> +	clock-frequency = <100000>;
>> +	status = "okay";
>> +
>> +	bq27541: fuel-gauge@55 {
>> +		compatible = "ti,bq27541";
>> +		reg = <0x55>;
>> +		monitored-battery = <&bat>;
>> +	};
>> +};
>> +/* Crypto drivers currently fail & cause an XPU violation */
> 
> Missing newline between nodes.
> 
>> +&cryptobam {
>> +	status = "disabled";
>> +};
>> +
>> +&crypto {
>> +	status = "disabled";
>> +};
> 
> These disables are not useful since they're already disabled in
> sm8350.dtsi because of that problem.

This was here before that fix landed, but I missed it; will remove.

> 
>> +
>> +&pcie0 {
>> +	pinctrl-names = "default";
>> +	pinctrl-0 = <&pcie0_default_state>;
>> +
>> +	perst-gpios = <&tlmm 94 GPIO_ACTIVE_HIGH>;
>> +	wake-gpios = <&tlmm 96 GPIO_ACTIVE_HIGH>;
>> +
>> +	status = "okay";
>> +};
>> +
>> +&pcie0_phy {
>> +	vdda-phy-supply = <&pm8350_l5>;
>> +	vdda-pll-supply = <&pm8350_l6>;
>> +
>> +	status = "okay";
>> +};
>> +
>> +&pcie1 {
>> +	pinctrl-names = "default";
>> +	pinctrl-0 = <&pcie1_default_state>;
>> +
>> +	perst-gpios = <&tlmm 97 GPIO_ACTIVE_HIGH>;
>> +	wake-gpios = <&tlmm 99 GPIO_ACTIVE_HIGH>;
>> +
>> +	status = "okay";
>> +};
>> +
>> +&pcie1_phy {
>> +	vdda-phy-supply = <&pm8350_l5>;
>> +	vdda-pll-supply = <&pm8350_l6>;
>> +
>> +	status = "okay";
>> +};
> 
> Everywhere in this file make sure the nodes are sorted alphabetically,
> it's a wild west right now.

Understandable, will do.

> 
>> diff --git a/arch/arm64/boot/dts/qcom/sm8350-oneplus-lemonade.dts b/arch/arm64/boot/dts/qcom/sm8350-oneplus-lemonade.dts
>> new file mode 100644
>> index 000000000000..f2c27894f3c4
>> --- /dev/null
>> +++ b/arch/arm64/boot/dts/qcom/sm8350-oneplus-lemonade.dts
>> @@ -0,0 +1,82 @@
>> +// SPDX-License-Identifier: BSD-3-Clause
>> +/*
>> + * Copyright (c) 2023 Igalia S.L.
>> + * Authors:
>> + *	Nia Espera <nespera@igalia.com>
>> + */
>> +
>> +/dts-v1/;
>> +
>> +#include "sm8350-oneplus-common.dtsi"
>> +
>> +/ {
>> +	model = "OnePlus 9";
>> +	compatible = "oneplus,lemonade", "qcom,sm8350";
>> +};
>> +
>> +&i2c4 {
>> +	touchscreen@48 {
>> +		compatible = "samsung,s6sy761";
>> +		reg = <0x48>;
>> +		interrupts-extended = <&tlmm 23 0x2008>;
> 
> Replace the 0x2008 with the GPIO_* flags from include/dt-bindings/gpio/gpio.h

There doesn't seem to be a flag for 0x2000 and it's not documented 
downstream; is it okay to replace with (0x2000|GPIO_TRANSITORY)?

> 
>> +
>> +		vdd-supply = <&pm8350c_l8>;
>> +		avdd-supply = <&pm8350c_l13>;
>> +
>> +		pinctrl-names = "default", "sleep";
>> +		pinctrl-0 = <&tp_rst_active &tp_irq_active>;
>> +		pinctrl-1 = <&tp_rst_suspend &tp_irq_suspend>;
>> +	};
>> +};
>> +
>> +&tlmm {
>> +	tp_rst_suspend: tp_rst_suspend {
>> +		pins = "gpio22";
>> +		function = "gpio";
>> +		drive-strength = <2>;
>> +		bias-pull-down;
>> +	};
>> +
>> +	tp_enable_2v8: tp_enable_2v8 {
>> +		pins = "gpio74";
>> +		function = "gpio";
>> +		drive-strength = <8>;
>> +		bias-pull-up;
>> +		output-high;
>> +	};
> 
> Some pinctrl comments as in the .dtsi file
> 
>> +
>> +	/* Modem antenna pins exclusive to lemonade */
>> +	rf_cable_ant1_active: rf_cable_ant1_active {
>> +		pins = "gpio27";
>> +		function = "gpio";
>> +		drive-strength = <2>;
>> +		bias-pull-up;
>> +	};
>> +	rf_cable_ant2_active: rf_cable_ant2_active {
>> +		pins = "gpio92";
>> +		function = "gpio";
>> +		drive-strength = <2>;
>> +		bias-pull-up;
>> +	};
>> +	rf_cable_ant3_active: rf_cable_ant3_active {
>> +		pins = "gpio44";
>> +		function = "gpio";
>> +		drive-strength = <2>;
>> +		bias-pull-up;
>> +	};
>> +	rf_cable_ant7_active: rf_cable_ant7_active {
>> +		pins = "gpio155";
>> +		function = "gpio";
>> +		drive-strength = <2>;
>> +		bias-pull-up;
>> +	};
>> +};
>> +
>> +&mpss {
>> +	pinctrl-names = "default";
>> +	pinctrl-1 = <&rf_cable_ant0_active
>> +		     &rf_cable_ant1_active
>> +		     &rf_cable_ant2_active
>> +		     &rf_cable_ant3_active
>> +		     &rf_cable_ant7_active>;
>> +};
>> diff --git a/arch/arm64/boot/dts/qcom/sm8350-oneplus-lemonadep.dts b/arch/arm64/boot/dts/qcom/sm8350-oneplus-lemonadep.dts
>> new file mode 100644
>> index 000000000000..de8597d26091
>> --- /dev/null
>> +++ b/arch/arm64/boot/dts/qcom/sm8350-oneplus-lemonadep.dts
>> @@ -0,0 +1,37 @@
>> +// SPDX-License-Identifier: BSD-3-Clause
>> +/*
>> + * Copyright (c) 2023 Igalia S.L.
>> + * Authors:
>> + *	Nia Espera <nespera@igalia.com>
>> + */
>> +
>> +/dts-v1/;
>> +
>> +#include "sm8350-oneplus-common.dtsi"
>> +
>> +/ {
>> +	model = "OnePlus 9 Pro";
>> +	compatible = "oneplus,lemonadep", "qcom,sm8350";
>> +};
>> +
>> +&tlmm {
>> +	tp_rst_suspend: tp_rst_suspend {
>> +		pins = "gpio22";
>> +		function = "gpio";
>> +		drive-strength = <8>;
>> +		bias-pull-down;
>> +	};
>> +
>> +	tp_enable_2v8: tp_enable_2v8 {
>> +		pins = "gpio31";
>> +		function = "gpio";
>> +		drive-strength = <8>;
>> +		bias-pull-up;
>> +		output-high;
>> +	};
> 
> And don't forget about fixing the nodes here. But why define them now if
> you don't have any users of them?

Oopsies- same as previous pins, op9p touchscreen isn't ready yet and I 
left these in.

> 
>> +};
>> +
>> +&mpss {
>> +	pinctrl-names = "default";
>> +	pinctrl-1 = <&rf_cable_ant0_active>;
>> +};
> 
> I'm sure others will have more comments but fixing the comments I added
> is a good step forward :)

Thanks for your time! I'll fix up everything mentioned.

> 
> Regards
> Luca
Krzysztof Kozlowski Oct. 17, 2023, 6:24 a.m. UTC | #6
On 16/10/2023 23:41, Nia Espera wrote:


>>> +
>>> +&i2c4 {
>>> +	touchscreen@48 {
>>> +		compatible = "samsung,s6sy761";
>>> +		reg = <0x48>;
>>> +		interrupts-extended = <&tlmm 23 0x2008>;
>>
>> Replace the 0x2008 with the GPIO_* flags from include/dt-bindings/gpio/gpio.h
> 
> There doesn't seem to be a flag for 0x2000 and it's not documented 
> downstream; is it okay to replace with (0x2000|GPIO_TRANSITORY)?

Not gpio.h but irq.h. I don't think TLMM supports 2008 as a flag. This
looks wrong.

Best regards,
Krzysztof
Luca Weiss Oct. 17, 2023, 6:31 a.m. UTC | #7
On Mon Oct 16, 2023 at 11:41 PM CEST, Nia Espera wrote:
> Hi,
>
> On 10/16/23 15:50, Luca Weiss wrote:
> > Hi Nia,
> > 
> > On Mon Oct 16, 2023 at 2:47 PM CEST, Nia Espera wrote:
> >> Device tree files for OnePlus 9 and 9 Pro. Details of supported features
> >> mentioned in the cover letter for this patch series, but for
> >> accessibility also repeated here:
> >>
> >> - USB OTG
> >> - UFS
> >> - Framebuffer display
> >> - Touchscreen (for lemonade)
> >> - Power & volume down keys
> >> - Battery reading
> >> - Modem, IPA, and remoteproc bringup
> >>
> >> Steps to get booting:
> >>
> >> - Wipe dtbo partition
> >> - Flash vbmeta with disabled verity bit
> >> - Flash kernel and initfs to boot partition with CLI args pd_ignore_unused
> >> and clk_ignore_unused
> >> - Flash rootfs to some other partition (probably super or userdata)
> >>
> >> Signed-off-by: Nia Espera <nespera@igalia.com>
> >> ---
> >>   arch/arm64/boot/dts/qcom/Makefile                  |    2 +
> >>   .../arm64/boot/dts/qcom/sm8350-oneplus-common.dtsi | 1247 ++++++++++++++++++++
> >>   .../boot/dts/qcom/sm8350-oneplus-lemonade.dts      |   82 ++
> >>   .../boot/dts/qcom/sm8350-oneplus-lemonadep.dts     |   37 +
> >>   4 files changed, 1368 insertions(+)
> >>
> >> diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
> >> index 2cca20563a1d..369ad4721b29 100644
> >> --- a/arch/arm64/boot/dts/qcom/Makefile
> >> +++ b/arch/arm64/boot/dts/qcom/Makefile
> >> @@ -211,6 +211,8 @@ dtb-$(CONFIG_ARCH_QCOM)	+= sm8250-xiaomi-elish-csot.dtb
> >>   dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-hdk.dtb
> >>   dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-microsoft-surface-duo2.dtb
> >>   dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-mtp.dtb
> >> +dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-oneplus-lemonade.dtb
> >> +dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-oneplus-lemonadep.dtb
> >>   dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-sony-xperia-sagami-pdx214.dtb
> >>   dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-sony-xperia-sagami-pdx215.dtb
> >>   dtb-$(CONFIG_ARCH_QCOM)	+= sm8450-hdk.dtb
> >> diff --git a/arch/arm64/boot/dts/qcom/sm8350-oneplus-common.dtsi b/arch/arm64/boot/dts/qcom/sm8350-oneplus-common.dtsi
> >> new file mode 100644
> >> index 000000000000..2f6768f35259
> >> --- /dev/null
> >> +++ b/arch/arm64/boot/dts/qcom/sm8350-oneplus-common.dtsi
> >> @@ -0,0 +1,1247 @@
> >> +// SPDX-License-Identifier: BSD-3-Clause
> >> +/*
> >> + * Copyright (c) 2023 Caleb Connolly <caleb.connolly@linaro.org>
> >> + *
> >> + * Copyright (c) 2023 Igalia S.L.
> >> + * Authors:
> >> + *	Nia Espera <nespera@igalia.com>
> >> + */
> >> +
> >> +#include <dt-bindings/iio/qcom,spmi-adc7-pm8350.h>
> >> +#include <dt-bindings/iio/qcom,spmi-adc7-pm8350b.h>
> >> +#define SMB139x_1_SID 0x0b
> >> +#define SMB139x_2_SID 0x0c
> >> +#include <dt-bindings/iio/qcom,spmi-adc7-smb139x.h>
> >> +#include <dt-bindings/pinctrl/qcom,pmic-gpio.h>
> >> +#include <dt-bindings/regulator/qcom,rpmh-regulator.h>
> >> +#include "sm8350.dtsi"
> >> +#include "pm8350.dtsi"
> >> +#include "pm8350b.dtsi"
> >> +#include "pm8350c.dtsi"
> >> +#include "pmk8350.dtsi"
> >> +#include "pmr735a.dtsi"
> >> +#include "pmr735b.dtsi"
> >> +
> >> +/ {
> >> +	/* As with the Sony devices, msm-id and board-id aren't needed here */
> >> +	chassis-type = "handset";
> >> +	interrupt-parent = <&intc>;
> >> +
> >> +	chosen {
> >> +		#address-cells = <2>;
> >> +		#size-cells = <2>;
> >> +		ranges;
> >> +
> >> +		framebuffer: framebuffer@e4d00000 {
> >> +			compatible = "simple-framebuffer";
> >> +			reg = <0 0xe4d00000 0 0x2400000>;
> >> +			width = <1080>;
> >> +			height = <2412>;
> >> +			stride = <(1080 * 4)>;
> >> +			format = "a8r8g8b8";
> >> +			/*
> >> +			 * That's (going to be) a lot of clocks, but it's
> >> +			 * necessary due to unused clk cleanup & no panel
> >> +			 * driver yet.
> >> +			 */
> >> +			clocks = <&gcc GCC_DISP_HF_AXI_CLK>,
> >> +				 <&gcc GCC_DISP_SF_AXI_CLK>;
> >> +		};
> >> +	};
> >> +
> >> +	gpio-keys {
> >> +		compatible = "gpio-keys";
> >> +
> >> +		pinctrl-names = "default";
> >> +		pinctrl-0 = <&vol_down_n>;
> >> +
> >> +		key-vol-up {
> >> +			label = "Volume Up";
> >> +			linux,code = <KEY_VOLUMEUP>;
> >> +			gpios = <&pmk8350_gpios 6 GPIO_ACTIVE_LOW>;
> >> +			debounce-interval = <15>;
> >> +			linux,can-disable;
> >> +			wakeup-source;
> >> +		};
> >> +	};
> >> +
> >> +	bat: battery {
> >> +		compatible = "simple-battery";
> >> +		device-chemistry = "lithium-ion";
> >> +		voltage-min-design-microvolt = <3200000>;
> >> +		energy-full-design-microwatt-hours = <15840000>;
> >> +		charge-full-design-microamp-hours = <2225000>;
> >> +	};
> >> +
> >> +	vph_pwr: vph-pwr-regulator {
> >> +		compatible = "regulator-fixed";
> >> +		regulator-name = "vph_pwr";
> >> +		regulator-min-microvolt = <3700000>;
> >> +		regulator-max-microvolt = <3700000>;
> >> +
> >> +		regulator-always-on;
> >> +		regulator-boot-on;
> >> +	};
> >> +
> >> +	display_panel_avdd: display_regulator@1 {
> >> +		compatible = "regulator-fixed";
> >> +		regulator-name = "display_panel_avdd";
> >> +		regulator-min-microvolt = <5500000>;
> >> +		regulator-max-microvolt = <5500000>;
> >> +		regulator-enable-ramp-delay = <233>;
> >> +
> >> +		enable-active-high;
> >> +		regulator-boot-on;
> >> +	};
> >> +
> >> +	/*
> >> +	 * Hack; OP9 bootloader specifically checks that the timer node has
> >> +	 * this label.
> >> +	 */
> >> +	arch_timer: timer {};
> >> +};
> >> +
> >> +&reserved_memory {
> >> +	/* EFI splash screen */
> >> +	memory@e1000000 {
> > 
> > Don't use memory@ names, this was decided a while ago to not be correct.
> > I think other devices here use e.g. splash@[..] or something.
>
> Noted, okay.
>
> > 
> >> +		reg = <0 0xe4d00000 0 0x02400000>;
> >> +		no-map;
> >> +		label = "cont_splash_region";
> >> +	};
> >> +
> >> +	ramoops: ramoops@E9700000 {
> >> +		compatible = "ramoops";
> >> +		reg = <0 0xe9700000 0 0x05b8000>;
> >> +		record-size =	<0x40000>;
> >> +		console-size =	<0x40000>;
> >> +		ftrace-size =	<0x200000>;
> >> +		pmsg-size =	<0x200000>;
> >> +		devinfo-size =	<0x08000>;
> >> +		dumpinfo-size =	<0x08000>;
> >> +		rsv01info-size=	<0x08000>;
> >> +		rsv02info-size=	<0x08000>;
> >> +		rsv03info-size=	<0x08000>;
> >> +		rsv04info-size=	<0x08000>;
> >> +		rsv05info-size=	<0x08000>;
> >> +		ecc-size=	<0x0>;
> > 
> > Half of these flags don't exist. Did you run dtbs_check? Also
> > indentation normally doesn't get padded out in mainline, just do e.g.
> > record-size = <0x40000>; without the tab.
> > 
>
> Mea culpa. Will fix, and run a check.
>
> >> +	};
> >> +
> >> +	/* bootloader log buffer */
> >> +	memory@9fff7000 {
> >> +		reg = <0x00 0x9fff7000 0x00 0x8000>;
> >> +	};
> >> +
> >> +	/* unknown; "param_mem" downstream */
> >> +	memory@ea700000 {
> >> +		reg = <0x00 0xea700000 0x00 0x800000>;
> >> +	};
> >> +};
> >> +
> >> +&apps_rsc {
> >> +	regulators-0 {
> >> +		compatible = "qcom,pm8350-rpmh-regulators";
> >> +		qcom,pmic-id = "b";
> >> +
> >> +		vdd-s1-supply = <&vph_pwr>;
> >> +		vdd-s2-supply = <&vph_pwr>;
> >> +		vdd-s3-supply = <&vph_pwr>;
> >> +		vdd-s4-supply = <&vph_pwr>;
> >> +		vdd-s5-supply = <&vph_pwr>;
> >> +		vdd-s6-supply = <&vph_pwr>;
> >> +		vdd-s7-supply = <&vph_pwr>;
> >> +		vdd-s8-supply = <&vph_pwr>;
> >> +		vdd-s9-supply = <&vph_pwr>;
> >> +		vdd-s10-supply = <&vph_pwr>;
> >> +		vdd-s11-supply = <&vph_pwr>;
> >> +		vdd-s12-supply = <&vph_pwr>;
> >> +
> >> +		vdd-l1-l4-supply = <&pm8350_s11>;
> >> +		vdd-l2-l7-supply = <&vreg_bob>;
> >> +		vdd-l3-l5-supply = <&vreg_bob>;
> >> +		vdd-l6-l9-l10-supply = <&pm8350_s11>;
> >> +		vdd-l8-supply = <&pmr735a_s2>;
> >> +
> >> +		/*
> >> +		 * ARC regulators:
> >> +		 * S5 - mx.lvl
> >> +		 * S6 - gfx.lvl
> >> +		 * S9 - mxc.lvl
> >> +		 */
> >> +
> >> +		pm8350_s10: smps10 {
> >> +			regulator-name = "pm8350_s10";
> >> +			regulator-min-microvolt = <1800000>;
> >> +			regulator-max-microvolt = <1800000>;
> >> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> >> +		};
> >> +
> >> +		pm8350_s11: smps11 {
> >> +			regulator-name = "pm8350_s11";
> >> +			regulator-min-microvolt = <752000>;
> >> +			regulator-max-microvolt = <1012000>;
> >> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> >> +		};
> >> +
> >> +		pm8350_s12: smps12 {
> >> +			regulator-name = "pm8350_s12";
> >> +			regulator-min-microvolt = <1224000>;
> >> +			regulator-max-microvolt = <1360000>;
> >> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> >> +		};
> >> +
> >> +		pm8350_l1: ldo1 {
> >> +			regulator-name = "pm8350_l1";
> >> +			regulator-min-microvolt = <912000>;
> >> +			regulator-max-microvolt = <920000>;
> >> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> >> +		};
> >> +
> >> +		pm8350_l2: ldo2 {
> >> +			regulator-name = "pm8350_l2";
> >> +			regulator-min-microvolt = <3072000>;
> >> +			regulator-max-microvolt = <3072000>;
> >> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> >> +		};
> >> +
> >> +		pm8350_l3: ldo3 {
> >> +			regulator-name = "pm8350_l3";
> >> +			regulator-min-microvolt = <904000>;
> >> +			regulator-max-microvolt = <904000>;
> >> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> >> +		};
> >> +
> >> +		/* L4 - lmx.lvl (ARC) */
> >> +
> >> +		pm8350_l5: ldo5 {
> >> +			regulator-name = "pm8350_l5";
> >> +			regulator-min-microvolt = <880000>;
> >> +			regulator-max-microvolt = <888000>;
> >> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> >> +			regulator-allow-set-load;
> >> +			regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
> >> +						   RPMH_REGULATOR_MODE_HPM>;
> >> +		};
> >> +
> >> +		pm8350_l6: ldo6 {
> >> +			regulator-name = "pm8350_l6";
> >> +			regulator-min-microvolt = <1200000>;
> >> +			regulator-max-microvolt = <1208000>;
> >> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> >> +			regulator-allow-set-load;
> >> +			regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
> >> +						   RPMH_REGULATOR_MODE_HPM>;
> >> +		};
> >> +
> >> +		pm8350_l7: ldo7 {
> >> +			regulator-name = "pm8350_l7";
> >> +			regulator-min-microvolt = <2400000>;
> >> +			regulator-max-microvolt = <3008000>;
> >> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> >> +			regulator-allow-set-load;
> >> +			regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
> >> +						   RPMH_REGULATOR_MODE_HPM>;
> >> +		};
> >> +
> >> +		/* L8 - lcx.lvl (ARC) */
> >> +
> >> +		pm8350_l9: ldo9 {
> >> +			regulator-name = "pm8350_l9";
> >> +			regulator-min-microvolt = <1200000>;
> >> +			regulator-max-microvolt = <1200000>;
> >> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> >> +			regulator-allow-set-load;
> >> +			regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
> >> +						   RPMH_REGULATOR_MODE_HPM>;
> >> +		};
> >> +	};
> >> +
> >> +	regulators-1 {
> >> +		compatible = "qcom,pm8350c-rpmh-regulators";
> >> +		qcom,pmic-id = "c";
> >> +
> >> +		vdd-s1-supply = <&vph_pwr>;
> >> +		vdd-s2-supply = <&vph_pwr>;
> >> +		vdd-s3-supply = <&vph_pwr>;
> >> +		vdd-s4-supply = <&vph_pwr>;
> >> +		vdd-s5-supply = <&vph_pwr>;
> >> +		vdd-s6-supply = <&vph_pwr>;
> >> +		vdd-s7-supply = <&vph_pwr>;
> >> +		vdd-s8-supply = <&vph_pwr>;
> >> +		vdd-s9-supply = <&vph_pwr>;
> >> +		vdd-s10-supply = <&vph_pwr>;
> >> +
> >> +		vdd-l1-l12-supply = <&pm8350c_s1>;
> >> +		vdd-l2-l8-supply = <&pm8350c_s1>;
> >> +		vdd-l3-l4-l5-l7-l13-supply = <&vreg_bob>;
> >> +		vdd-l6-l9-l11-supply = <&vreg_bob>;
> >> +		vdd-l10-supply = <&pm8350_s12>;
> >> +
> >> +		vdd-bob-supply = <&vph_pwr>;
> >> +
> >> +		pm8350c_s1: smps1 {
> >> +			regulator-name = "pm8350c_s1";
> >> +			regulator-min-microvolt = <1800000>;
> >> +			regulator-max-microvolt = <1952000>;
> >> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> >> +		};
> >> +
> >> +		/* S2 - ebi.lvl (ARC) */
> >> +
> >> +		pm8350c_s3: smps3 {
> >> +			regulator-name = "pm8350c_s3";
> >> +			regulator-min-microvolt = <300000>;
> >> +			regulator-max-microvolt = <704000>;
> >> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> >> +		};
> >> +
> >> +		/*
> >> +		 * ARC regulators:
> >> +		 * S4 - mss.lvl
> >> +		 * S6 - cx.lvl
> >> +		 * S8 - mmcx.lvl
> >> +		 */
> >> +
> >> +		pm8350c_s10: smps10 {
> >> +			regulator-name = "pm8350c_s10";
> >> +			regulator-min-microvolt = <1048000>;
> >> +			regulator-max-microvolt = <1128000>;
> >> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> >> +		};
> >> +
> >> +		pm8350c_l1: ldo1 {
> >> +			regulator-name = "pm8350c_l1";
> >> +			regulator-min-microvolt = <1800000>;
> >> +			regulator-max-microvolt = <1800000>;
> >> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> >> +		};
> >> +
> >> +		pm8350c_l2: ldo2 {
> >> +			regulator-name = "pm8350c_l2";
> >> +			regulator-min-microvolt = <1800000>;
> >> +			regulator-max-microvolt = <1800000>;
> >> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> >> +		};
> >> +
> >> +		pm8350c_l3: ldo3 {
> >> +			regulator-name = "pm8350c_l3";
> >> +			regulator-min-microvolt = <3000000>;
> >> +			regulator-max-microvolt = <3300000>;
> >> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> >> +		};
> >> +
> >> +		pm8350c_l4: ldo4 {
> >> +			regulator-name = "pm8350c_l4";
> >> +			regulator-min-microvolt = <1704000>;
> >> +			regulator-max-microvolt = <3000000>;
> >> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> >> +		};
> >> +
> >> +		pm8350c_l5: ldo5 {
> >> +			regulator-name = "pm8350c_l5";
> >> +			regulator-min-microvolt = <1704000>;
> >> +			regulator-max-microvolt = <3000000>;
> >> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> >> +		};
> >> +
> >> +		pm8350c_l6: ldo6 {
> >> +			regulator-name = "pm8350c_l6";
> >> +			regulator-min-microvolt = <1800000>;
> >> +			regulator-max-microvolt = <2960000>;
> >> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> >> +		};
> >> +
> >> +		pm8350c_l7: ldo7 {
> >> +			regulator-name = "pm8350c_l7";
> >> +			regulator-min-microvolt = <3008000>;
> >> +			regulator-max-microvolt = <3008000>;
> >> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> >> +		};
> >> +
> >> +		pm8350c_l8: ldo8 {
> >> +			regulator-name = "pm8350c_l8";
> >> +			regulator-min-microvolt = <1800000>;
> >> +			regulator-max-microvolt = <1800000>;
> >> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> >> +		};
> >> +
> >> +		pm8350c_l9: ldo9 {
> >> +			regulator-name = "pm8350c_l9";
> >> +			regulator-min-microvolt = <2800000>;
> >> +			regulator-max-microvolt = <3008000>;
> >> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> >> +		};
> >> +
> >> +		pm8350c_l10: ldo10 {
> >> +			regulator-name = "pm8350c_l10";
> >> +			regulator-min-microvolt = <1200000>;
> >> +			regulator-max-microvolt = <1200000>;
> >> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> >> +		};
> >> +
> >> +		pm8350c_l11: ldo11 {
> >> +			regulator-name = "pm8350c_l11";
> >> +			regulator-min-microvolt = <2400000>;
> >> +			regulator-max-microvolt = <3008000>;
> >> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> >> +		};
> >> +
> >> +		pm8350c_l12: ldo12 {
> >> +			regulator-name = "pm8350c_l12";
> >> +			regulator-min-microvolt = <1800000>;
> >> +			regulator-max-microvolt = <2000000>;
> >> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> >> +		};
> >> +
> >> +		pm8350c_l13: ldo13 {
> >> +			regulator-name = "pm8350c_l13";
> >> +			regulator-min-microvolt = <3000000>;
> >> +			regulator-max-microvolt = <3200000>;
> >> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> >> +		};
> >> +
> >> +		vreg_bob: bob {
> >> +			regulator-name = "vreg_bob";
> >> +			regulator-min-microvolt = <3400000>;
> >> +			regulator-max-microvolt = <3960000>;
> >> +			regulator-initial-mode = <RPMH_REGULATOR_MODE_AUTO>;
> >> +		};
> >> +	};
> >> +
> >> +	/* regulators-2 unused for now */
> > 
> > Is there some PMIC that will be here? Since it's just numbered I also
> > don't see a problem renaming regulators-2 to regulators-3 if anything
> > was added later here.
> > 
>
> Yep, pm8350b; no driver exists for it upstream and it's a single 
> regulator that isn't particularly important (cannot find any references 
> to it downstream, at least). I'll renumber the others.
>
> >> +
> >> +	regulators-3 {
> >> +		compatible = "qcom,pmr735a-rpmh-regulators";
> >> +		qcom,pmic-id = "e";
> >> +
> >> +		vdd-s1-supply = <&vph_pwr>;
> >> +		vdd-s2-supply = <&vph_pwr>;
> >> +		vdd-s3-supply = <&vph_pwr>;
> >> +
> >> +		vdd-l1-l2-supply = <&pmr735a_s2>;
> >> +		vdd-l3-supply = <&pmr735a_s1>;
> >> +		vdd-l4-supply = <&pm8350c_s1>;
> >> +		vdd-l5-l6-supply = <&pm8350c_s1>;
> >> +		vdd-l7-bob-supply = <&vreg_bob>;
> >> +
> >> +		pmr735a_s1: smps1 {
> >> +			regulator-name = "pmr735a_s1";
> >> +			regulator-min-microvolt = <1200000>;
> >> +			regulator-max-microvolt = <1280000>;
> >> +		};
> >> +
> >> +		pmr735a_s2: smps2 {
> >> +			regulator-name = "pmr735a_s2";
> >> +			regulator-min-microvolt = <500000>;
> >> +			regulator-max-microvolt = <976000>;
> >> +		};
> >> +
> >> +		pmr735a_s3: smps3 {
> >> +			regulator-name = "pmr735a_s3";
> >> +			regulator-min-microvolt = <2208000>;
> >> +			regulator-max-microvolt = <2352000>;
> >> +		};
> >> +
> >> +		pmr735a_l1: ldo1 {
> >> +			regulator-name = "pmr735a_l1";
> >> +			regulator-min-microvolt = <912000>;
> >> +			regulator-max-microvolt = <912000>;
> >> +		};
> >> +
> >> +		pmr735a_l2: ldo2 {
> >> +			regulator-name = "pmr735a_l2";
> >> +			regulator-min-microvolt = <1200000>;
> >> +			regulator-max-microvolt = <1200000>;
> >> +		};
> >> +
> >> +		pmr735a_l3: ldo3 {
> >> +			regulator-name = "pmr735a_l3";
> >> +			regulator-min-microvolt = <1200000>;
> >> +			regulator-max-microvolt = <1200000>;
> >> +		};
> >> +
> >> +		pmr735a_l4: ldo4 {
> >> +			regulator-name = "pmr735a_l4";
> >> +			regulator-min-microvolt = <1776000>;
> >> +			regulator-max-microvolt = <1872000>;
> >> +		};
> >> +
> >> +		pmr735a_l5: ldo5 {
> >> +			regulator-name = "pmr735a_l5";
> >> +			regulator-min-microvolt = <800000>;
> >> +			regulator-max-microvolt = <800000>;
> >> +		};
> >> +
> >> +		pmr735a_l6: ldo6 {
> >> +			regulator-name = "pmr735a_l6";
> >> +			regulator-min-microvolt = <480000>;
> >> +			regulator-max-microvolt = <904000>;
> >> +		};
> >> +
> >> +		pmr735a_l7: ldo7 {
> >> +			regulator-name = "pmr735a_l7";
> >> +			regulator-min-microvolt = <2800000>;
> >> +			regulator-max-microvolt = <2800000>;
> >> +		};
> >> +	};
> >> +};
> >> +
> >> +&adsp {
> >> +	firmware-name = "qcom/OnePlus/lemonade/adsp.mbn";
> >> +	status = "okay";
> >> +};
> >> +
> >> +&cdsp {
> >> +	firmware-name = "qcom/OnePlus/lemonade/cdsp.mbn";
> >> +	status = "okay";
> >> +};
> >> +
> >> +&slpi {
> >> +	firmware-name = "qcom/OnePlus/lemonade/slpi.mbn";
> >> +	status = "okay";
> >> +};
> >> +
> >> +&ipa {
> >> +	qcom,gsi-loader = "self";
> >> +	memory-region = <&pil_ipa_fw_mem>;
> >> +	firmware-name = "qcom/OnePlus/lemonade/ipa_fws.mbn";
> >> +	status = "okay";
> >> +};
> >> +
> >> +&mpss {
> >> +	firmware-name = "qcom/OnePlus/lemonade/modem.mbn",
> >> +			"qcom/OnePlus/lemonade/mcfg_hw.mbn";
> > 
> > All these firmware-name attributes don't follow what's already in
> > mainline.
> > 
> > Use e.g. qcom/sm8350/lemonade/*
>
> Noted, alright
>
> > 
> >> +
> >> +	status = "okay";
> >> +};
> >> +
> >> +&i2c4 {
> >> +	clock-frequency = <400000>;
> >> +	status = "okay";
> >> +
> >> +	/* Touchscreens: Syna TCM oncell or Samsung s6sy761 */
> >> +};
> >> +
> >> +&i2c13 {
> >> +	clock-frequency = <100000>;
> >> +	status = "okay";
> >> +
> >> +	fsa4480@42 {
> >> +		compatible = "fcs,fsa4480";
> >> +		reg = <0x42>;
> >> +		mode-switch;
> >> +		orientation-switch;
> >> +	};
> >> +
> >> +	/* Qualcomm PM8008i/PM8008j (?) @ 8, 9, c, d */
> > 
> > Check again in downstream if the @c and @d are actually enabled, at
> > least they're not on my boards and the PM8008 is only addressable on @8
> > and @9.
>
> Seems like they all are used on this device; (d) in particular seems to 
> be needed for the camera.

PM8008 is a I2C-addressable regulator that is just used for camera. But
still if you have some time, double check if really both 8+9 and c+d are
used. For example you could use i2cdetect on the bus, I think the PM8008
shows up without manually flipping some enable GPIO. Or check downstream
dmesg to see what it says, or at runtime in /sys (e.g. in TWRP should be
enough).

>
> >> +};
> >> +
> >> +&i2c15 {
> >> +	clock-frequency = <400000>;
> >> +	status = "okay";
> >> +
> >> +	/* sn-nci NFC controller @ 28 */
> >> +};
> >> +
> >> +&pm8350_gpios {
> >> +	usb2_vbus_boost_default: usb2_vbus_boost_default {
> >> +		pins = "gpio8";
> >> +		function = "normal";
> >> +		output-low;
> >> +		power-source = <0x00>;
> >> +		phandle = <0x5e1>;
> >> +	};
> >> +
> >> +	usb2_vbus_det_default: usb2_vbus_det_default {
> >> +		pins = "gpio9";
> >> +		function = "normal";
> >> +		input-enable;
> >> +		bias-disable;
> >> +		power-source = <0x00>;
> >> +		phandle = <0x5e0>;
> >> +	};
> > 
> > Node name should not have underscores, use dashes.
> > 
> > Also here again I doubt you ran the dtbs_check, I think also the pmic
> > gpios need have have a -state suffix.
> > 
> >   => usb2_vbus_det_default: usb2-vbus-det-default-state {
> > 
> >> +
> >> +	gpio1_adc_default: gpio1-adc-default {
> >> +		pins = "gpio1";
> >> +		function = "normal";
> >> +		bias-high-impedance;
> >> +		bias-disable;
> >> +		phandle = <0x566>;
> >> +	};
> >> +
> >> +	gpio3_adc_default: gpio3-adc-default {
> >> +		pins = "gpio3";
> >> +		function = "normal";
> >> +		bias-high-impedance;
> >> +		bias-disable;
> >> +		phandle = <0x567>;
> > 
> > Drop the random phandles you copied from the decompiled dtb?
>
> Oops...
>
> > 
> >> +	};
> >> +};
> >> +
> >> +&pm8350b_gpios {
> >> +	vol_down_n: vol-down-n-state {
> >> +		pins = "gpio6";
> >> +		function = "normal";
> >> +		power-source = <1>;
> >> +		bias-pull-up;
> >> +		input-enable;
> >> +	};
> >> +};
> >> +
> >> +&pmk8350_rtc {
> >> +	status = "okay";
> >> +};
> >> +
> >> +&pmk8350_vadc {
> >> +	pinctrl-0 = <&gpio1_adc_default &gpio1_adc_default>;
> >> +	pinctrl-names = "default";
> >> +
> >> +	pmk8350_ref_gnd {
> > 
> > Doesn't follow the format in the docs.
> > 
> >> +		reg = <0x00>;
> >> +		label = "pmk8350_ref_gnd";
> >> +		qcom,pre-scaling = <0x01 0x01>;
> > 
> > Don't use hex here.
> > 
> >> +	};
> >> +
> >> +	pmk8350_vref_1p25 {
> >> +		reg = <0x01>;
> >> +		label = "pmk8350_vref_1p25";
> >> +		qcom,pre-scaling = <0x01 0x01>;
> >> +	};
> >> +
> >> +	pmk8350_die_temp {
> >> +		reg = <0x03>;
> >> +		label = "pmk8350_die_temp";
> >> +		qcom,pre-scaling = <0x01 0x01>;
> >> +	};
> >> +
> >> +	pmk8350_xo_therm {
> >> +		reg = <0x44>;
> >> +		label = "pmk8350_xo_therm";
> >> +		qcom,ratiometric;
> >> +		qcom,hw-settle-time = <0xc8>;
> > 
> > Make this also decimal.
> > 
> >> +		qcom,pre-scaling = <0x01 0x01>;
> >> +	};
> >> +
> >> +	pm8350_ref_gnd {
> >> +		reg = <0x100>;
> >> +		label = "pm8350_ref_gnd";
> >> +		qcom,pre-scaling = <0x01 0x01>;
> >> +	};
> >> +
> >> +	pm8350_vref_1p25 {
> >> +		reg = <0x101>;
> >> +		label = "pm8350_vref_1p25";
> >> +		qcom,pre-scaling = <0x01 0x01>;
> >> +	};
> >> +
> >> +	pm8350_die_temp {
> >> +		reg = <0x103>;
> >> +		label = "pm8350_die_temp";
> >> +		qcom,pre-scaling = <0x01 0x01>;
> >> +	};
> >> +
> >> +	pm8350_vph_pwr {
> >> +		reg = <0x18e>;
> >> +		label = "pm8350_vph_pwr";
> >> +		qcom,pre-scaling = <0x01 0x03>;
> >> +	};
> >> +
> >> +	pm8350b_ref_gnd {
> >> +		reg = <0x300>;
> >> +		label = "pm8350b_ref_gnd";
> >> +		qcom,pre-scaling = <0x01 0x01>;
> >> +	};
> >> +
> >> +	pm8350b_vref_1p25 {
> >> +		reg = <0x301>;
> >> +		label = "pm8350b_vref_1p25";
> >> +		qcom,pre-scaling = <0x01 0x01>;
> >> +	};
> >> +
> >> +	pm8350b_die_temp {
> >> +		reg = <0x303>;
> >> +		label = "pm8350b_die_temp";
> >> +		qcom,pre-scaling = <0x01 0x01>;
> >> +	};
> >> +
> >> +	pm8350b_vph_pwr {
> >> +		reg = <0x38e>;
> >> +		label = "pm8350b_vph_pwr";
> >> +		qcom,pre-scaling = <0x01 0x03>;
> >> +	};
> >> +
> >> +	pm8350b_vbat_sns {
> >> +		reg = <0x38f>;
> >> +		label = "pm8350b_vbat_sns";
> >> +		qcom,pre-scaling = <0x01 0x03>;
> >> +	};
> >> +
> >> +	pm8350_msm_therm {
> >> +		reg = <PM8350_ADC7_AMUX_THM1_100K_PU(1)>;
> >> +		label = "pm8350_msm_therm";
> >> +		qcom,ratiometric;
> >> +		qcom,hw-settle-time = <200>;
> >> +		qcom,pre-scaling = <1 1>;
> >> +	};
> >> +
> >> +	pm8350_cam_flash_therm {
> >> +		reg = <PM8350_ADC7_AMUX_THM2_100K_PU(1)>;
> >> +		label = "pm8350_cam_flash_therm";
> >> +		qcom,ratiometric;
> >> +		qcom,hw-settle-time = <200>;
> >> +		qcom,pre-scaling = <1 1>;
> >> +	};
> >> +
> >> +	pm8350_hot_pocket_therm {
> >> +		reg = <PM8350_ADC7_AMUX_THM3_100K_PU(1)>;
> >> +		label = "pm8350_hot_pocket_therm";
> >> +		qcom,ratiometric;
> >> +		qcom,hw-settle-time = <200>;
> >> +		qcom,pre-scaling = <1 1>;
> >> +	};
> >> +
> >> +	pm8350_wide_rfc_therm {
> >> +		reg = <PM8350_ADC7_AMUX_THM4_100K_PU(1)>;
> >> +		label = "pm8350_wide_rfc_therm";
> >> +		qcom,ratiometric;
> >> +		qcom,hw-settle-time = <200>;
> >> +		qcom,pre-scaling = <1 1>;
> >> +	};
> >> +
> >> +	pm8350_rear_tof_therm {
> >> +		reg = <PM8350_ADC7_AMUX_THM5_100K_PU(1)>;
> >> +		label = "pm8350_rear_tof_therm";
> >> +		qcom,ratiometric;
> >> +		qcom,hw-settle-time = <200>;
> >> +		qcom,pre-scaling = <1 1>;
> >> +	};
> >> +
> >> +	pm8350b_usb_conn_therm {
> >> +		reg = <PM8350B_ADC7_AMUX_THM4_100K_PU>;
> >> +		label = "pm8350b_usb_conn_therm";
> >> +		qcom,ratiometric;
> >> +		qcom,hw-settle-time = <200>;
> >> +		qcom,pre-scaling = <1 1>;
> >> +	};
> >> +
> >> +	pm8350b_wl_chg_therm {
> >> +		reg = <PM8350B_ADC7_GPIO2_100K_PU>;
> >> +		label = "pm8350b_wl_chg_therm";
> >> +		qcom,ratiometric;
> >> +		qcom,hw-settle-time = <200>;
> >> +		qcom,pre-scaling = <1 1>;
> >> +	};
> >> +
> >> +	pm8350b_chg_temp {
> >> +		reg = <PM8350B_ADC7_CHG_TEMP>;
> >> +		label = "pm8350b_chg_temp";
> >> +		qcom,pre-scaling = <1 1>;
> >> +	};
> >> +
> >> +	pmr735a_ref_gnd {
> >> +		reg = <0x400>;
> >> +		label = "pmr735a_ref_gnd";
> >> +		qcom,pre-scaling = <0x01 0x01>;
> >> +	};
> >> +
> >> +	pmr735a_vref_1p25 {
> >> +		reg = <0x401>;
> >> +		label = "pmr735a_vref_1p25";
> >> +		qcom,pre-scaling = <0x01 0x01>;
> >> +	};
> >> +
> >> +	pmr735a_die_temp {
> >> +		reg = <0x403>;
> >> +		label = "pmr735a_die_temp";
> >> +		qcom,pre-scaling = <0x01 0x01>;
> >> +	};
> >> +
> >> +	pmr735b_ref_gnd {
> >> +		reg = <0x500>;
> >> +		label = "pmr735b_ref_gnd";
> >> +		qcom,pre-scaling = <0x01 0x01>;
> >> +	};
> >> +
> >> +	pmr735b_vref_1p25 {
> >> +		reg = <0x501>;
> >> +		label = "pmr735b_vref_1p25";
> >> +		qcom,pre-scaling = <0x01 0x01>;
> >> +	};
> >> +
> >> +	pmr735b_die_temp {
> >> +		reg = <0x503>;
> >> +		label = "pmr735b_die_temp";
> >> +		qcom,pre-scaling = <0x01 0x01>;
> >> +	};
> >> +
> >> +	smb139x_1_smb_temp {
> >> +		reg = <SMB139x_1_ADC7_SMB_TEMP>;
> >> +		label = "smb139x_1_smb_temp";
> >> +		qcom,pre-scaling = <1 1>;
> >> +	};
> >> +
> >> +	smb139x_2_smb_temp {
> >> +		reg = <SMB139x_2_ADC7_SMB_TEMP>;
> >> +		label = "smb139x_2_smb_temp";
> >> +		qcom,pre-scaling = <1 1>;
> >> +	};
> >> +
> >> +	gpio1_v {
> >> +		reg = <0x128>;
> >> +		label = "gpio1_v";
> >> +		qcom,ratiometric;
> >> +		qcom,hw-settle-time = <0x2bc>;
> >> +		qcom,pre-scaling = <0x01 0x01>;
> >> +	};
> >> +
> >> +	gpio3_v {
> >> +		reg = <0x12b>;
> >> +		label = "gpio3_v";
> >> +		qcom,ratiometric;
> >> +		qcom,hw-settle-time = <0x2bc>;
> >> +		qcom,pre-scaling = <0x01 0x01>;
> >> +	};
> >> +};
> >> +
> >> +&pmk8350_adc_tm {
> >> +	status = "okay";
> >> +
> >> +	pm8350_msm_therm {
> >> +		reg = <0x144>;
> >> +		qcom,ratiometric;
> >> +		qcom,hw-settle-time = <0xc8>;
> > 
> > Here also. Node name doesn't follow docs, missing io-channels (used here
> > instead of reg), etc.
> > 
> >> +	};
> >> +
> >> +	pm8350_cam_flash_therm {
> >> +		reg = <0x145>;
> >> +		qcom,ratiometric;
> >> +		qcom,hw-settle-time = <0xc8>;
> >> +	};
> >> +
> >> +	pm8350_hot_pocket_therm {
> >> +		reg = <0x146>;
> >> +		qcom,ratiometric;
> >> +		qcom,hw-settle-time = <0xc8>;
> >> +	};
> >> +
> >> +	pm8350_wide_rfc_therm {
> >> +		reg = <0x147>;
> >> +		qcom,ratiometric;
> >> +		qcom,hw-settle-time = <0xc8>;
> >> +	};
> >> +
> >> +	pm8350_rear_tof_therm {
> >> +		reg = <0x148>;
> >> +		qcom,ratiometric;
> >> +		qcom,hw-settle-time = <0xc8>;
> >> +	};
> >> +
> >> +	pm8350b_usb_conn_therm {
> >> +		reg = <0x347>;
> >> +		qcom,ratiometric;
> >> +		qcom,hw-settle-time = <0xc8>;
> >> +	};
> >> +
> >> +	pm8350b_wl_chg_therm {
> >> +		reg = <0x34b>;
> >> +		qcom,ratiometric;
> >> +		qcom,hw-settle-time = <0xc8>;
> >> +	};
> >> +
> >> +	pmk8350_xo_therm {
> >> +		reg = <0x44>;
> >> +		qcom,ratiometric;
> >> +		qcom,hw-settle-time = <0xc8>;
> >> +	};
> >> +};
> >> +
> >> +&pon_pwrkey {
> >> +	status = "okay";
> >> +};
> >> +
> >> +&pon_resin {
> >> +	linux,code = <KEY_VOLUMEUP>;
> >> +	status = "okay";
> >> +};
> >> +
> >> +&qupv3_id_0 {
> >> +	status = "okay";
> >> +};
> >> +
> >> +&qupv3_id_1 {
> >> +	status = "okay";
> >> +};
> >> +
> >> +&qupv3_id_2 {
> >> +	status = "okay";
> >> +};
> >> +
> >> +&gpi_dma0 {
> >> +	status = "okay";
> >> +};
> >> +
> >> +&gpi_dma1 {
> >> +	status = "okay";
> >> +};
> >> +
> >> +&gpi_dma2 {
> >> +	status = "okay";
> >> +};
> >> +
> >> +&removed_mem {
> >> +	reg = <0x0 0xd8800000 0x0 0x8e00000>;
> >> +};
> >> +
> >> +&tlmm {
> >> +	gpio-reserved-ranges = <52 8>;
> >> +
> >> +	pcie0_default_state: pcie0-default-state {
> >> +		perst-pins {
> >> +			pins = "gpio94";
> >> +			function = "gpio";
> >> +			drive-strength = <2>;
> >> +			bias-pull-down;
> >> +		};
> >> +
> >> +		clkreq-pins {
> >> +			pins = "gpio95";
> >> +			function = "pcie0_clkreqn";
> >> +			drive-strength = <2>;
> >> +			bias-pull-up;
> >> +		};
> >> +
> >> +		wake-pins {
> >> +			pins = "gpio96";
> >> +			function = "gpio";
> >> +			drive-strength = <2>;
> >> +			bias-pull-up;
> >> +		};
> >> +
> >> +		sleep-pins {
> >> +			pins = "gpio95";
> >> +			function = "gpio";
> >> +			drive-strength = <2>;
> >> +			bias-pull-up;
> >> +		};
> >> +	};
> >> +
> >> +	pcie1_default_state: pcie1-default-state {
> >> +		perst-pins {
> >> +			pins = "gpio97";
> >> +			function = "gpio";
> >> +			drive-strength = <2>;
> >> +			bias-pull-down;
> >> +		};
> >> +
> >> +		clkreq-pins {
> >> +			pins = "gpio98";
> >> +			function = "pcie1_clkreqn";
> >> +			drive-strength = <2>;
> >> +			bias-pull-up;
> >> +		};
> >> +
> >> +		wake-pins {
> >> +			pins = "gpio99";
> >> +			function = "gpio";
> >> +			drive-strength = <2>;
> >> +			bias-pull-up;
> >> +			/* wil6210_refclk_en_pin lives here also */
> >> +		};
> >> +	};
> >> +
> >> +	tp_rst_active: tp_rst_active {
> > 
> > Wrong node name and more below.
> > 
> >> +		pins = "gpio22";
> >> +		function = "gpio";
> >> +		drive-strength = <8>;
> >> +		bias-pull-up;
> >> +	};
> >> +
> >> +	/* tp_rst_suspend pin is different per device, don't specify here */
> >> +
> >> +	tp_irq_active: tp_irq_active {
> >> +		pins = "gpio23";
> >> +		function = "gpio";
> >> +		drive-strength = <8>;
> >> +		bias-disable;
> >> +		input-enable;
> >> +	};
> >> +
> >> +	tp_irq_suspend: tp_irq_suspend {
> >> +		pins = "gpio23";
> >> +		function = "gpio";
> >> +		drive-strength = <2>;
> >> +		bias-pull-down;
> >> +	};
> >> +
> >> +	sde_dsi_active: sde-dsi-active {
> >> +		pins = "gpio24";
> >> +		function = "gpio";
> >> +		drive-strength = <8>;
> >> +		bias-disable = <0>;
> >> +	};
> >> +
> >> +	sde_dsi_suspend: sde-dsi-suspend {
> >> +		pins = "gpio24";
> >> +		function = "gpio";
> >> +		drive-strength = <2>;
> >> +		bias-pull-down;
> >> +	};
> >> +
> >> +	sde_te_active: sde-te-active {
> >> +		pins = "gpio82";
> >> +		function = "mdp_vsync";
> >> +		drive-strength = <2>;
> >> +		bias-pull-down;
> >> +	};
> >> +
> >> +	sde_te_suspend: sde-te-suspend {
> >> +		pins = "gpio82";
> >> +		function = "mdp_vsync";
> >> +		drive-strength = <2>;
> >> +		bias-pull-down;
> >> +	};
> >> +
> >> +	aw_irq: aw_irq {
> >> +		pins = "gpio14";
> >> +		function = "gpio";
> >> +		drive-strength = <2>;
> >> +		bias-pull-up;
> >> +	};
> >> +
> >> +	aw_reset: aw_reset {
> >> +		pins = "gpio75";
> >> +		function = "gpio";
> >> +		drive-strength = <2>;
> >> +		bias-disable;
> >> +	};
> > 
> > Skip unused pinctrl for now?
>
> Some of these I had meant to use but wasn't able to get everything quite 
> working. Forgot to remove, sorry.
>
> > 
> >> +
> >> +	display_panel_avdd_default: display_panel_avdd_default {
> >> +		pins = "gpio12";
> >> +		function = "gpio";
> >> +		drive-strength = <8>;
> >> +		bias-disable = <0>;
> >> +		output-high;
> >> +	};
> >> +
> >> +	/* Modem-related pin common on both devices */
> >> +	rf_cable_ant0_active: rf_cable_ant0_active {
> >> +		pins = "gpio165";
> >> +		function = "gpio";
> >> +		drive-strength = <2>;
> >> +		bias-pull-up;
> >> +	};
> >> +
> >> +	usb_int_default: usb_int_default {
> >> +		pins = "gpio198";
> >> +		function = "gpio";
> >> +		drive-strength = <2>;
> >> +		bias-pull-down;
> >> +		input-enable;
> >> +	};
> >> +
> >> +	qupv3_se18_default_cts: qupv3_se18_default_cts {
> >> +		pins = "gpio68";
> >> +		function = "gpio";
> >> +		drive-strength = <2>;
> >> +		bias-disable;
> >> +	};
> >> +
> >> +	qupv3_se18_default_rtsrx: qupv3_se18_default_rtsrx {
> >> +		pins = "gpio69", "gpio71";
> >> +		function = "gpio";
> >> +		drive-strength = <2>;
> >> +		bias-pull-down;
> >> +	};
> >> +
> >> +	qupv3_se18_default_tx: qupv3_se18_default_tx {
> >> +		pins = "gpio70";
> >> +		function = "gpio";
> >> +		drive-strength = <2>;
> >> +		bias-pull-up;
> >> +	};
> >> +
> >> +	qupv3_se18_ctsrx: qupv3_se18_ctsrx {
> >> +		pins = "gpio68", "gpio71";
> >> +		function = "qup18";
> >> +		drive-strength = <2>;
> >> +		bias-disable;
> >> +	};
> >> +
> >> +	qupv3_se18_rts: qupv3_se18_rts {
> >> +		pins = "gpio69";
> >> +		function = "qup18";
> >> +		drive-strength = <2>;
> >> +		bias-pull-down;
> >> +	};
> >> +
> >> +	qupv3_se18_tx: qupv3_se18_tx {
> >> +		pins = "gpio70";
> >> +		function = "qup18";
> >> +		drive-strength = <2>;
> >> +		bias-pull-up;
> >> +	};
> >> +
> >> +	usb3phy_portselect_default: usb3phy_portselect_default {
> >> +		pins = "gpio81";
> >> +		function = "usb_phy";
> >> +		drive-strength = <2>;
> >> +		bias-disable;
> >> +	};
> >> +
> >> +	usb3phy_portselect_gpio: usb3phy_portselect_gpio {
> >> +		pins = "gpio81";
> >> +		function = "gpio";
> >> +		drive-strength = <2>;
> >> +		bias-disable;
> >> +	};
> >> +
> >> +	ext1_otg_default: ext1_otg_default {
> >> +		pins = "gpio8";
> >> +		function = "gpio";
> >> +		drive-strength = <16>;
> >> +		bias-pull-down;
> >> +		input-enable;
> >> +	};
> >> +
> >> +	cnss_wlan_en_active: cnss_wlan_en_active {
> >> +		pins = "gpio64";
> >> +		function = "gpio";
> >> +		drive-strength = <16>;
> >> +		output-high;
> >> +		bias-pull-up;
> >> +	};
> >> +
> >> +	cnss_wlan_en_sleep: cnss_wlan_en_sleep {
> >> +		pins = "gpio64";
> >> +		function = "gpio";
> >> +		drive-strength = <2>;
> >> +		output-low;
> >> +		bias-pull-down;
> >> +	};
> >> +
> >> +	bt_en_sleep: bt_en_sleep {
> >> +		pins = "gpio65";
> >> +		function = "gpio";
> >> +		drive-strength = <2>;
> >> +		output-low;
> >> +		bias-pull-down;
> >> +	};
> >> +};
> >> +
> >> +&ufs_mem_hc {
> >> +	reset-gpios = <&tlmm 203 GPIO_ACTIVE_LOW>;
> >> +
> >> +	vcc-supply = <&pm8350_l7>;
> >> +	vcc-voltage-level = <2504000 2950000>;
> >> +	vcc-max-microamp = <800000>;
> >> +	vccq-supply = <&pm8350_l9>;
> >> +	vccq-max-microamp = <900000>;
> >> +
> >> +	qcom,vddp-ref-clk-supply = <&pm8350_l9>;
> >> +	qcom,vddp-ref-clk-max-microamp = <100>;
> >> +
> >> +	qcom,vddp-ref-clk-supply = <&pm8350_s12>;
> >> +	qcom,vccq-parent-max-microamp = <210000>;
> >> +
> >> +	status = "okay";
> >> +};
> >> +
> >> +&ufs_mem_phy {
> >> +	vdda-phy-supply = <&pm8350_l5>;
> >> +	vdda-phy-always-on;
> > 
> > Property doesn't exist
> > 
> >> +	vdda-max-microamp = <91600>;
> >> +	vdda-pll-supply = <&pm8350_l6>;
> >> +	vdda-pll-max-microamp = <19000>;
> >> +
> >> +	status = "okay";
> >> +};
> >> +
> >> +&usb_1 {
> >> +	/* Bug in interconnect driver breaks USB */
> >> +	/delete-property/ interconnects;
> >> +	/delete-property/ interconnect-names;
> > 
> > Any chance on fixing this? Or add some extra explanation? Not sure how
> > liked such workarounds are in dts files.
>
> Enabling that makes USB perma-broken as the regulators get stuck at off; 
> I can investigate more if that would be necessary.
>
> >> +
> >> +	/*
> >> +	 * USB3 is not tested (though it is enabled downstream) so limit to
> >> +	 * high-speed for now.
> >> +	 */
> >> +	qcom,select-utmi-as-pipe-clk;
> > 
> > You never plugged the device into a USB 3.0 port? Should be trivial to
> > test I think?
>
> Will test for v2.
>
> > 
> >> +
> >> +	status = "okay";
> >> +};
> >> +
> >> +&usb_1_dwc3 {
> >> +	/* Mode switching is untested */
> >> +	dr_mode = "peripheral";
> >> +	maximum-speed = "high-speed";
> >> +	phys = <&usb_1_hsphy>;
> >> +	phy-names = "usb2-phy";
> >> +};
> >> +
> >> +&usb_1_hsphy {
> >> +	vdda-pll-supply = <&pm8350_l5>;
> >> +	vdda18-supply = <&pm8350c_l1>;
> >> +	vdda33-supply = <&pm8350_l2>;
> >> +
> >> +	status = "okay";
> >> +};
> >> +
> >> +/* Enabling this is necessary only for displayport */
> > 
> > Do you have displayport support with this dts? If not why enable it?
>
> Fair enough, no. Panel driver is still WIP, will upstream this bit when 
> that's working.
>
> > 
> >> +&usb_1_qmpphy {
> >> +	vdda-phy-supply = <&pm8350_l6>;
> >> +	vdda-pll-supply = <&pm8350_l1>;
> >> +
> >> +	status = "okay";
> >> +};
> >> +
> >> +&i2c2 {
> >> +	clock-frequency = <100000>;
> >> +	status = "okay";
> >> +
> >> +	bq27541: fuel-gauge@55 {
> >> +		compatible = "ti,bq27541";
> >> +		reg = <0x55>;
> >> +		monitored-battery = <&bat>;
> >> +	};
> >> +};
> >> +/* Crypto drivers currently fail & cause an XPU violation */
> > 
> > Missing newline between nodes.
> > 
> >> +&cryptobam {
> >> +	status = "disabled";
> >> +};
> >> +
> >> +&crypto {
> >> +	status = "disabled";
> >> +};
> > 
> > These disables are not useful since they're already disabled in
> > sm8350.dtsi because of that problem.
>
> This was here before that fix landed, but I missed it; will remove.
>
> > 
> >> +
> >> +&pcie0 {
> >> +	pinctrl-names = "default";
> >> +	pinctrl-0 = <&pcie0_default_state>;
> >> +
> >> +	perst-gpios = <&tlmm 94 GPIO_ACTIVE_HIGH>;
> >> +	wake-gpios = <&tlmm 96 GPIO_ACTIVE_HIGH>;
> >> +
> >> +	status = "okay";
> >> +};
> >> +
> >> +&pcie0_phy {
> >> +	vdda-phy-supply = <&pm8350_l5>;
> >> +	vdda-pll-supply = <&pm8350_l6>;
> >> +
> >> +	status = "okay";
> >> +};
> >> +
> >> +&pcie1 {
> >> +	pinctrl-names = "default";
> >> +	pinctrl-0 = <&pcie1_default_state>;
> >> +
> >> +	perst-gpios = <&tlmm 97 GPIO_ACTIVE_HIGH>;
> >> +	wake-gpios = <&tlmm 99 GPIO_ACTIVE_HIGH>;
> >> +
> >> +	status = "okay";
> >> +};
> >> +
> >> +&pcie1_phy {
> >> +	vdda-phy-supply = <&pm8350_l5>;
> >> +	vdda-pll-supply = <&pm8350_l6>;
> >> +
> >> +	status = "okay";
> >> +};
> > 
> > Everywhere in this file make sure the nodes are sorted alphabetically,
> > it's a wild west right now.
>
> Understandable, will do.
>
> > 
> >> diff --git a/arch/arm64/boot/dts/qcom/sm8350-oneplus-lemonade.dts b/arch/arm64/boot/dts/qcom/sm8350-oneplus-lemonade.dts
> >> new file mode 100644
> >> index 000000000000..f2c27894f3c4
> >> --- /dev/null
> >> +++ b/arch/arm64/boot/dts/qcom/sm8350-oneplus-lemonade.dts
> >> @@ -0,0 +1,82 @@
> >> +// SPDX-License-Identifier: BSD-3-Clause
> >> +/*
> >> + * Copyright (c) 2023 Igalia S.L.
> >> + * Authors:
> >> + *	Nia Espera <nespera@igalia.com>
> >> + */
> >> +
> >> +/dts-v1/;
> >> +
> >> +#include "sm8350-oneplus-common.dtsi"
> >> +
> >> +/ {
> >> +	model = "OnePlus 9";
> >> +	compatible = "oneplus,lemonade", "qcom,sm8350";
> >> +};
> >> +
> >> +&i2c4 {
> >> +	touchscreen@48 {
> >> +		compatible = "samsung,s6sy761";
> >> +		reg = <0x48>;
> >> +		interrupts-extended = <&tlmm 23 0x2008>;
> > 
> > Replace the 0x2008 with the GPIO_* flags from include/dt-bindings/gpio/gpio.h
>
> There doesn't seem to be a flag for 0x2000 and it's not documented 
> downstream; is it okay to replace with (0x2000|GPIO_TRANSITORY)?

As Krzysztof already replied, my fault, should be the defines from irq.h
since this is obviously an interrupt, not a gpio property.

Regards
Luca

>
> > 
> >> +
> >> +		vdd-supply = <&pm8350c_l8>;
> >> +		avdd-supply = <&pm8350c_l13>;
> >> +
> >> +		pinctrl-names = "default", "sleep";
> >> +		pinctrl-0 = <&tp_rst_active &tp_irq_active>;
> >> +		pinctrl-1 = <&tp_rst_suspend &tp_irq_suspend>;
> >> +	};
> >> +};
> >> +
> >> +&tlmm {
> >> +	tp_rst_suspend: tp_rst_suspend {
> >> +		pins = "gpio22";
> >> +		function = "gpio";
> >> +		drive-strength = <2>;
> >> +		bias-pull-down;
> >> +	};
> >> +
> >> +	tp_enable_2v8: tp_enable_2v8 {
> >> +		pins = "gpio74";
> >> +		function = "gpio";
> >> +		drive-strength = <8>;
> >> +		bias-pull-up;
> >> +		output-high;
> >> +	};
> > 
> > Some pinctrl comments as in the .dtsi file
> > 
> >> +
> >> +	/* Modem antenna pins exclusive to lemonade */
> >> +	rf_cable_ant1_active: rf_cable_ant1_active {
> >> +		pins = "gpio27";
> >> +		function = "gpio";
> >> +		drive-strength = <2>;
> >> +		bias-pull-up;
> >> +	};
> >> +	rf_cable_ant2_active: rf_cable_ant2_active {
> >> +		pins = "gpio92";
> >> +		function = "gpio";
> >> +		drive-strength = <2>;
> >> +		bias-pull-up;
> >> +	};
> >> +	rf_cable_ant3_active: rf_cable_ant3_active {
> >> +		pins = "gpio44";
> >> +		function = "gpio";
> >> +		drive-strength = <2>;
> >> +		bias-pull-up;
> >> +	};
> >> +	rf_cable_ant7_active: rf_cable_ant7_active {
> >> +		pins = "gpio155";
> >> +		function = "gpio";
> >> +		drive-strength = <2>;
> >> +		bias-pull-up;
> >> +	};
> >> +};
> >> +
> >> +&mpss {
> >> +	pinctrl-names = "default";
> >> +	pinctrl-1 = <&rf_cable_ant0_active
> >> +		     &rf_cable_ant1_active
> >> +		     &rf_cable_ant2_active
> >> +		     &rf_cable_ant3_active
> >> +		     &rf_cable_ant7_active>;
> >> +};
> >> diff --git a/arch/arm64/boot/dts/qcom/sm8350-oneplus-lemonadep.dts b/arch/arm64/boot/dts/qcom/sm8350-oneplus-lemonadep.dts
> >> new file mode 100644
> >> index 000000000000..de8597d26091
> >> --- /dev/null
> >> +++ b/arch/arm64/boot/dts/qcom/sm8350-oneplus-lemonadep.dts
> >> @@ -0,0 +1,37 @@
> >> +// SPDX-License-Identifier: BSD-3-Clause
> >> +/*
> >> + * Copyright (c) 2023 Igalia S.L.
> >> + * Authors:
> >> + *	Nia Espera <nespera@igalia.com>
> >> + */
> >> +
> >> +/dts-v1/;
> >> +
> >> +#include "sm8350-oneplus-common.dtsi"
> >> +
> >> +/ {
> >> +	model = "OnePlus 9 Pro";
> >> +	compatible = "oneplus,lemonadep", "qcom,sm8350";
> >> +};
> >> +
> >> +&tlmm {
> >> +	tp_rst_suspend: tp_rst_suspend {
> >> +		pins = "gpio22";
> >> +		function = "gpio";
> >> +		drive-strength = <8>;
> >> +		bias-pull-down;
> >> +	};
> >> +
> >> +	tp_enable_2v8: tp_enable_2v8 {
> >> +		pins = "gpio31";
> >> +		function = "gpio";
> >> +		drive-strength = <8>;
> >> +		bias-pull-up;
> >> +		output-high;
> >> +	};
> > 
> > And don't forget about fixing the nodes here. But why define them now if
> > you don't have any users of them?
>
> Oopsies- same as previous pins, op9p touchscreen isn't ready yet and I 
> left these in.
>
> > 
> >> +};
> >> +
> >> +&mpss {
> >> +	pinctrl-names = "default";
> >> +	pinctrl-1 = <&rf_cable_ant0_active>;
> >> +};
> > 
> > I'm sure others will have more comments but fixing the comments I added
> > is a good step forward :)
>
> Thanks for your time! I'll fix up everything mentioned.
>
> > 
> > Regards
> > Luca
Konrad Dybcio Oct. 17, 2023, 4:04 p.m. UTC | #8
On 10/16/23 14:47, Nia Espera wrote:
> Device tree files for OnePlus 9 and 9 Pro. Details of supported features
> mentioned in the cover letter for this patch series, but for
> accessibility also repeated here:
> 
> - USB OTG
> - UFS
> - Framebuffer display
> - Touchscreen (for lemonade)
> - Power & volume down keys
> - Battery reading
> - Modem, IPA, and remoteproc bringup
> 
> Steps to get booting:
> 
> - Wipe dtbo partition
> - Flash vbmeta with disabled verity bit
> - Flash kernel and initfs to boot partition with CLI args pd_ignore_unused
> and clk_ignore_unused
> - Flash rootfs to some other partition (probably super or userdata)
> 
> Signed-off-by: Nia Espera <nespera@igalia.com>
> ---
>   arch/arm64/boot/dts/qcom/Makefile                  |    2 +
>   .../arm64/boot/dts/qcom/sm8350-oneplus-common.dtsi | 1247 ++++++++++++++++++++
>   .../boot/dts/qcom/sm8350-oneplus-lemonade.dts      |   82 ++
>   .../boot/dts/qcom/sm8350-oneplus-lemonadep.dts     |   37 +
>   4 files changed, 1368 insertions(+)
> 
> diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
> index 2cca20563a1d..369ad4721b29 100644
> --- a/arch/arm64/boot/dts/qcom/Makefile
> +++ b/arch/arm64/boot/dts/qcom/Makefile
> @@ -211,6 +211,8 @@ dtb-$(CONFIG_ARCH_QCOM)	+= sm8250-xiaomi-elish-csot.dtb
>   dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-hdk.dtb
>   dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-microsoft-surface-duo2.dtb
>   dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-mtp.dtb
> +dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-oneplus-lemonade.dtb
> +dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-oneplus-lemonadep.dtb
>   dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-sony-xperia-sagami-pdx214.dtb
>   dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-sony-xperia-sagami-pdx215.dtb
>   dtb-$(CONFIG_ARCH_QCOM)	+= sm8450-hdk.dtb
> diff --git a/arch/arm64/boot/dts/qcom/sm8350-oneplus-common.dtsi b/arch/arm64/boot/dts/qcom/sm8350-oneplus-common.dtsi
> new file mode 100644
> index 000000000000..2f6768f35259
> --- /dev/null
> +++ b/arch/arm64/boot/dts/qcom/sm8350-oneplus-common.dtsi
> @@ -0,0 +1,1247 @@
> +// SPDX-License-Identifier: BSD-3-Clause
> +/*
> + * Copyright (c) 2023 Caleb Connolly <caleb.connolly@linaro.org>
> + *
> + * Copyright (c) 2023 Igalia S.L.
> + * Authors:
> + *	Nia Espera <nespera@igalia.com>
> + */
> +
> +#include <dt-bindings/iio/qcom,spmi-adc7-pm8350.h>
> +#include <dt-bindings/iio/qcom,spmi-adc7-pm8350b.h>
> +#define SMB139x_1_SID 0x0b
> +#define SMB139x_2_SID 0x0c
> +#include <dt-bindings/iio/qcom,spmi-adc7-smb139x.h>
> +#include <dt-bindings/pinctrl/qcom,pmic-gpio.h>
> +#include <dt-bindings/regulator/qcom,rpmh-regulator.h>
> +#include "sm8350.dtsi"
> +#include "pm8350.dtsi"
> +#include "pm8350b.dtsi"
> +#include "pm8350c.dtsi"
> +#include "pmk8350.dtsi"
> +#include "pmr735a.dtsi"
> +#include "pmr735b.dtsi"
> +
> +/ {
> +	/* As with the Sony devices, msm-id and board-id aren't needed here */
This became "common knowledge" since then, we can omit the comment now.

> +	chassis-type = "handset";
> +	interrupt-parent = <&intc>;
> +
> +	chosen {
> +		#address-cells = <2>;
> +		#size-cells = <2>;
> +		ranges;
> +
> +		framebuffer: framebuffer@e4d00000 {
> +			compatible = "simple-framebuffer";
> +			reg = <0 0xe4d00000 0 0x2400000>;
> +			width = <1080>;
> +			height = <2412>;
> +			stride = <(1080 * 4)>;
> +			format = "a8r8g8b8";
> +			/*
> +			 * That's (going to be) a lot of clocks, but it's
> +			 * necessary due to unused clk cleanup & no panel
> +			 * driver yet.
> +			 */
> +			clocks = <&gcc GCC_DISP_HF_AXI_CLK>,
> +				 <&gcc GCC_DISP_SF_AXI_CLK>;
> +		};
> +	};
> +
> +	gpio-keys {
> +		compatible = "gpio-keys";
> +
> +		pinctrl-names = "default";
> +		pinctrl-0 = <&vol_down_n>;
> +
> +		key-vol-up {
> +			label = "Volume Up";
> +			linux,code = <KEY_VOLUMEUP>;
> +			gpios = <&pmk8350_gpios 6 GPIO_ACTIVE_LOW>;
> +			debounce-interval = <15>;
> +			linux,can-disable;
> +			wakeup-source;
> +		};
> +	};
> +
> +	bat: battery {
> +		compatible = "simple-battery";
> +		device-chemistry = "lithium-ion";
> +		voltage-min-design-microvolt = <3200000>;
> +		energy-full-design-microwatt-hours = <15840000>;
> +		charge-full-design-microamp-hours = <2225000>;
> +	};
> +
> +	vph_pwr: vph-pwr-regulator {
> +		compatible = "regulator-fixed";
> +		regulator-name = "vph_pwr";
> +		regulator-min-microvolt = <3700000>;
> +		regulator-max-microvolt = <3700000>;
> +
> +		regulator-always-on;
> +		regulator-boot-on;
> +	};
> +
> +	display_panel_avdd: display_regulator@1 {
> +		compatible = "regulator-fixed";
> +		regulator-name = "display_panel_avdd";
> +		regulator-min-microvolt = <5500000>;
> +		regulator-max-microvolt = <5500000>;
> +		regulator-enable-ramp-delay = <233>;
> +
> +		enable-active-high;
> +		regulator-boot-on;
> +	};
> +
> +	/*
> +	 * Hack; OP9 bootloader specifically checks that the timer node has
> +	 * this label.
> +	 */
> +	arch_timer: timer {};
> +};
> +
> +&reserved_memory {
> +	/* EFI splash screen */
> +	memory@e1000000 {
framebuffer@e10...

> +		reg = <0 0xe4d00000 0 0x02400000>;
> +		no-map;
> +		label = "cont_splash_region";
This label is unnecessary (perhaps even unused?)

> +	};
> +
> +	ramoops: ramoops@E9700000 {
> +		compatible = "ramoops";
> +		reg = <0 0xe9700000 0 0x05b8000>;
> +		record-size =	<0x40000>;
> +		console-size =	<0x40000>;
> +		ftrace-size =	<0x200000>;
> +		pmsg-size =	<0x200000>;
> +		devinfo-size =	<0x08000>;
> +		dumpinfo-size =	<0x08000>;
> +		rsv01info-size=	<0x08000>;
> +		rsv02info-size=	<0x08000>;
> +		rsv03info-size=	<0x08000>;
> +		rsv04info-size=	<0x08000>;
> +		rsv05info-size=	<0x08000>;
> +		ecc-size=	<0x0>;
Please use a single space before and after the '=' sign.
Please drop the unused-and-undocumented properties (make CHECK_DTBS=1 
qcom/sm8350-oneplus-lemonade.dtb)

> +	};
> +
> +	/* bootloader log buffer */
> +	memory@9fff7000 {
bootloader-log@, drop comment

> +		reg = <0x00 0x9fff7000 0x00 0x8000>;
please be consistent with the usage of "different zeroes"

> +	};
> +
> +	/* unknown; "param_mem" downstream */
> +	memory@ea700000 {
reserved@, drop comment, probably it's for the kernel command line 
parameters in some hacky setup, but if so, it would be freed the moment
Linux is jumped to.

[...]

> +
> +	/* regulators-2 unused for now */
Any good reason?

> +
> +	regulators-3 {
> +		compatible = "qcom,pmr735a-rpmh-regulators";
> +		qcom,pmic-id = "e";
> +
> +		vdd-s1-supply = <&vph_pwr>;
> +		vdd-s2-supply = <&vph_pwr>;
> +		vdd-s3-supply = <&vph_pwr>;
> +
> +		vdd-l1-l2-supply = <&pmr735a_s2>;
> +		vdd-l3-supply = <&pmr735a_s1>;
> +		vdd-l4-supply = <&pm8350c_s1>;
> +		vdd-l5-l6-supply = <&pm8350c_s1>;
> +		vdd-l7-bob-supply = <&vreg_bob>;
> +
> +		pmr735a_s1: smps1 {
> +			regulator-name = "pmr735a_s1";
> +			regulator-min-microvolt = <1200000>;
> +			regulator-max-microvolt = <1280000>;
> +		};
> +
> +		pmr735a_s2: smps2 {
> +			regulator-name = "pmr735a_s2";
> +			regulator-min-microvolt = <500000>;
> +			regulator-max-microvolt = <976000>;
> +		};
> +
> +		pmr735a_s3: smps3 {
> +			regulator-name = "pmr735a_s3";
> +			regulator-min-microvolt = <2208000>;
> +			regulator-max-microvolt = <2352000>;
> +		};
> +
> +		pmr735a_l1: ldo1 {
> +			regulator-name = "pmr735a_l1";
> +			regulator-min-microvolt = <912000>;
> +			regulator-max-microvolt = <912000>;
> +		};
> +
> +		pmr735a_l2: ldo2 {
> +			regulator-name = "pmr735a_l2";
> +			regulator-min-microvolt = <1200000>;
> +			regulator-max-microvolt = <1200000>;
> +		};
> +
> +		pmr735a_l3: ldo3 {
> +			regulator-name = "pmr735a_l3";
> +			regulator-min-microvolt = <1200000>;
> +			regulator-max-microvolt = <1200000>;
> +		};
> +
> +		pmr735a_l4: ldo4 {
> +			regulator-name = "pmr735a_l4";
> +			regulator-min-microvolt = <1776000>;
> +			regulator-max-microvolt = <1872000>;
> +		};
> +
> +		pmr735a_l5: ldo5 {
> +			regulator-name = "pmr735a_l5";
> +			regulator-min-microvolt = <800000>;
> +			regulator-max-microvolt = <800000>;
> +		};
> +
> +		pmr735a_l6: ldo6 {
> +			regulator-name = "pmr735a_l6";
> +			regulator-min-microvolt = <480000>;
> +			regulator-max-microvolt = <904000>;
> +		};
> +
> +		pmr735a_l7: ldo7 {
> +			regulator-name = "pmr735a_l7";
> +			regulator-min-microvolt = <2800000>;
> +			regulator-max-microvolt = <2800000>;
> +		};
> +	};
> +};
> +
> +&adsp {
> +	firmware-name = "qcom/OnePlus/lemonade/adsp.mbn";
> +	status = "okay";
> +};
> +
> +&cdsp {
> +	firmware-name = "qcom/OnePlus/lemonade/cdsp.mbn";
> +	status = "okay";
> +};
> +
> +&slpi {
> +	firmware-name = "qcom/OnePlus/lemonade/slpi.mbn";
> +	status = "okay";
> +};
> +
> +&ipa {
> +	qcom,gsi-loader = "self";
> +	memory-region = <&pil_ipa_fw_mem>;
> +	firmware-name = "qcom/OnePlus/lemonade/ipa_fws.mbn";
> +	status = "okay";
> +};
> +
> +&mpss {
> +	firmware-name = "qcom/OnePlus/lemonade/modem.mbn",
> +			"qcom/OnePlus/lemonade/mcfg_hw.mbn";
> +
> +	status = "okay";
> +};
> +
> +&i2c4 {
> +	clock-frequency = <400000>;
> +	status = "okay";
> +
> +	/* Touchscreens: Syna TCM oncell or Samsung s6sy761 */
Synaptics with a samsung panel? Are you sure it's not a reference device 
dt leftover?

[...]

> +&pm8350_gpios {
> +	usb2_vbus_boost_default: usb2_vbus_boost_default {
No underscores in node names, use '-', all throughout the file.


> +		pins = "gpio8";
> +		function = "normal";
> +		output-low;
> +		power-source = <0x00>; > +		phandle = <0x5e1>;
Please drop the decompiler-generated phandle= properties

[...]

> +	sde_dsi_active: sde-dsi-active {
> +		pins = "gpio24";
> +		function = "gpio";
> +		drive-strength = <8>;
> +		bias-disable = <0>;
This is a boolean property, should be "bias-disable;"

[...]

> +&usb_1 {
> +	/* Bug in interconnect driver breaks USB */
> +	/delete-property/ interconnects;
> +	/delete-property/ interconnect-names;
Can you elaborate?

> +
> +	/*
> +	 * USB3 is not tested (though it is enabled downstream) so limit to
> +	 * high-speed for now.
> +	 */
> +	qcom,select-utmi-as-pipe-clk;
> +
> +	status = "okay";
> +};
> +
> +&usb_1_dwc3 {
> +	/* Mode switching is untested */
> +	dr_mode = "peripheral";
> +	maximum-speed = "high-speed";
> +	phys = <&usb_1_hsphy>;
> +	phy-names = "usb2-phy";
> +};
> +
> +&usb_1_hsphy {
> +	vdda-pll-supply = <&pm8350_l5>;
> +	vdda18-supply = <&pm8350c_l1>;
> +	vdda33-supply = <&pm8350_l2>;
> +
> +	status = "okay";
> +};
> +
> +/* Enabling this is necessary only for displayport */
If DP is wired up, I would strongly guess that USB3 is too.

> +&usb_1_qmpphy {
> +	vdda-phy-supply = <&pm8350_l6>;
> +	vdda-pll-supply = <&pm8350_l1>;
> +
> +	status = "okay";
> +};
> +
> +&i2c2 {
Please sort the node references alphabetically

> +	clock-frequency = <100000>;
> +	status = "okay";
> +
> +	bq27541: fuel-gauge@55 {
> +		compatible = "ti,bq27541";
> +		reg = <0x55>;
> +		monitored-battery = <&bat>;
> +	};
> +};
> +/* Crypto drivers currently fail & cause an XPU violation */
No need, see commit 4d29db2043610dd70be00a61f26fd64256a2a6c5
[...]

> +	/* Modem antenna pins exclusive to lemonade */
> +	rf_cable_ant1_active: rf_cable_ant1_active {
> +		pins = "gpio27";
> +		function = "gpio";
> +		drive-strength = <2>;
> +		bias-pull-up;
> +	};
> +	rf_cable_ant2_active: rf_cable_ant2_active {
Please add a newline between subnodes

Konrad
Konrad Dybcio Oct. 17, 2023, 4:05 p.m. UTC | #9
On 10/16/23 15:14, Nia Espera wrote:
> Hey,
> 
> On 10/16/23 15:02, Caleb Connolly wrote:
>>
>> On 16/10/2023 13:47, Nia Espera wrote:
>>> Device tree files for OnePlus 9 and 9 Pro. Details of supported features
>>> mentioned in the cover letter for this patch series, but for
>>> accessibility also repeated here:
>>>
>>> - USB OTG
>>> - UFS
>>> - Framebuffer display
>>> - Touchscreen (for lemonade)
>>> - Power & volume down keys
>>> - Battery reading
>>> - Modem, IPA, and remoteproc bringup
>>>
>>> Steps to get booting:
>>>
>>> - Wipe dtbo partition
>>> - Flash vbmeta with disabled verity bit
>>> - Flash kernel and initfs to boot partition with CLI args 
>>> pd_ignore_unused
>>> and clk_ignore_unused
>>> - Flash rootfs to some other partition (probably super or userdata)
>>>
>>> Signed-off-by: Nia Espera <nespera@igalia.com>
>> Small comment below, for the next revision:
>>
>> Reviewed-by: Caleb Connolly <caleb.connolly@linaro.org>
>>> ---
>>>   arch/arm64/boot/dts/qcom/Makefile                  |    2 +
>>>   .../arm64/boot/dts/qcom/sm8350-oneplus-common.dtsi | 1247 
>>> ++++++++++++++++++++
>>>   .../boot/dts/qcom/sm8350-oneplus-lemonade.dts      |   82 ++
>>>   .../boot/dts/qcom/sm8350-oneplus-lemonadep.dts     |   37 +
>>>   4 files changed, 1368 insertions(+)
>>>
>>> diff --git a/arch/arm64/boot/dts/qcom/Makefile 
>>> b/arch/arm64/boot/dts/qcom/Makefile
>>> index 2cca20563a1d..369ad4721b29 100644
>>> --- a/arch/arm64/boot/dts/qcom/Makefile
>>> +++ b/arch/arm64/boot/dts/qcom/Makefile
>>> @@ -211,6 +211,8 @@ dtb-$(CONFIG_ARCH_QCOM)    += 
>>> sm8250-xiaomi-elish-csot.dtb
>>>   dtb-$(CONFIG_ARCH_QCOM)    += sm8350-hdk.dtb
>>>   dtb-$(CONFIG_ARCH_QCOM)    += sm8350-microsoft-surface-duo2.dtb
>>>   dtb-$(CONFIG_ARCH_QCOM)    += sm8350-mtp.dtb
>>> +dtb-$(CONFIG_ARCH_QCOM)    += sm8350-oneplus-lemonade.dtb
>>> +dtb-$(CONFIG_ARCH_QCOM)    += sm8350-oneplus-lemonadep.dtb
>>>   dtb-$(CONFIG_ARCH_QCOM)    += sm8350-sony-xperia-sagami-pdx214.dtb
>>>   dtb-$(CONFIG_ARCH_QCOM)    += sm8350-sony-xperia-sagami-pdx215.dtb
>>>   dtb-$(CONFIG_ARCH_QCOM)    += sm8450-hdk.dtb
>>> diff --git a/arch/arm64/boot/dts/qcom/sm8350-oneplus-common.dtsi 
>>> b/arch/arm64/boot/dts/qcom/sm8350-oneplus-common.dtsi
>>> new file mode 100644
>>> index 000000000000..2f6768f35259
>>> --- /dev/null
>>> +++ b/arch/arm64/boot/dts/qcom/sm8350-oneplus-common.dtsi
>>> @@ -0,0 +1,1247 @@
>>> +// SPDX-License-Identifier: BSD-3-Clause
>>> +/*
>>> + * Copyright (c) 2023 Caleb Connolly <caleb.connolly@linaro.org>
>> This is loosely based on some initial work I did, but not to the degree
>> where this copyright is necessary, feel free to drop it on the next
>> revision.
> Will do!
>>> + *
>>> + * Copyright (c) 2023 Igalia S.L.
>>> + * Authors:
>>> + *    Nia Espera <nespera@igalia.com>
>>> + */
>>> +
>>> +#include <dt-bindings/iio/qcom,spmi-adc7-pm8350.h>
>>> +#include <dt-bindings/iio/qcom,spmi-adc7-pm8350b.h>
>>> +#define SMB139x_1_SID 0x0b
>>> +#define SMB139x_2_SID 0x0c
>>> +#include <dt-bindings/iio/qcom,spmi-adc7-smb139x.h>
>>> +#include <dt-bindings/pinctrl/qcom,pmic-gpio.h>
>>> +#include <dt-bindings/regulator/qcom,rpmh-regulator.h>
>>> +#include "sm8350.dtsi"
>>> +#include "pm8350.dtsi"
>>> +#include "pm8350b.dtsi"
>>> +#include "pm8350c.dtsi"
>>> +#include "pmk8350.dtsi"
>>> +#include "pmr735a.dtsi"
>>> +#include "pmr735b.dtsi"
>>> +
>>> +/ {
>>> +    /* As with the Sony devices, msm-id and board-id aren't needed 
>>> here */
>>> +    chassis-type = "handset";
>>> +    interrupt-parent = <&intc>;
>>> +
>> [...]
>>
>>> +
>>> +    /*
>>> +     * Hack; OP9 bootloader specifically checks that the timer node has
>>> +     * this label.
>>> +     */
>>> +    arch_timer: timer {};
>> For this to work you also need to build the DTB with labels (the -@ flag
>> to dtc), otherwise this board won't boot. You can add the following to
>> the Makefile:
>>
>> DTC_FLAGS_sm8350-oneplus-lemonade := -@
>> DTC_FLAGS_sm8350-oneplus-lemonadep := -@
> This actually isn't necessary if building the image as an Android version 1
> image; it will boot fine without, since it won't try to append to the 
> DTB. I
> should probably mention to do that in the patch, though.
>> See for reference:
>> https://lore.kernel.org/linux-arm-msm/20231009172717.2695854-1-dmitry.baryshkov@linaro.org/
Yes, using mkbootimg arguments to our advantage to avoid hacks in the dt 
is good.

Konrad
Konrad Dybcio Oct. 17, 2023, 4:06 p.m. UTC | #10
On 10/16/23 15:50, Luca Weiss wrote:

[...]

> You never plugged the device into a USB 3.0 port? Should be trivial to
> test I think?

The biggest blocker is usually the lack of an actual USB3 type-C cable :P

Konrad
Nia Espera Oct. 17, 2023, 6:28 p.m. UTC | #11
On 10/17/23 18:04, Konrad Dybcio wrote:
> 
> 
> On 10/16/23 14:47, Nia Espera wrote:
>> Device tree files for OnePlus 9 and 9 Pro. Details of supported features
>> mentioned in the cover letter for this patch series, but for
>> accessibility also repeated here:
>>
>> - USB OTG
>> - UFS
>> - Framebuffer display
>> - Touchscreen (for lemonade)
>> - Power & volume down keys
>> - Battery reading
>> - Modem, IPA, and remoteproc bringup
>>
>> Steps to get booting:
>>
>> - Wipe dtbo partition
>> - Flash vbmeta with disabled verity bit
>> - Flash kernel and initfs to boot partition with CLI args 
>> pd_ignore_unused
>> and clk_ignore_unused
>> - Flash rootfs to some other partition (probably super or userdata)
>>
>> Signed-off-by: Nia Espera <nespera@igalia.com>
>> ---
>>   arch/arm64/boot/dts/qcom/Makefile                  |    2 +
>>   .../arm64/boot/dts/qcom/sm8350-oneplus-common.dtsi | 1247 ++++++++++ 
>> ++++++++++
>>   .../boot/dts/qcom/sm8350-oneplus-lemonade.dts      |   82 ++
>>   .../boot/dts/qcom/sm8350-oneplus-lemonadep.dts     |   37 +
>>   4 files changed, 1368 insertions(+)
>>
>> diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/ 
>> qcom/Makefile
>> index 2cca20563a1d..369ad4721b29 100644
>> --- a/arch/arm64/boot/dts/qcom/Makefile
>> +++ b/arch/arm64/boot/dts/qcom/Makefile
>> @@ -211,6 +211,8 @@ dtb-$(CONFIG_ARCH_QCOM)    += sm8250-xiaomi-elish- 
>> csot.dtb
>>   dtb-$(CONFIG_ARCH_QCOM)    += sm8350-hdk.dtb
>>   dtb-$(CONFIG_ARCH_QCOM)    += sm8350-microsoft-surface-duo2.dtb
>>   dtb-$(CONFIG_ARCH_QCOM)    += sm8350-mtp.dtb
>> +dtb-$(CONFIG_ARCH_QCOM)    += sm8350-oneplus-lemonade.dtb
>> +dtb-$(CONFIG_ARCH_QCOM)    += sm8350-oneplus-lemonadep.dtb
>>   dtb-$(CONFIG_ARCH_QCOM)    += sm8350-sony-xperia-sagami-pdx214.dtb
>>   dtb-$(CONFIG_ARCH_QCOM)    += sm8350-sony-xperia-sagami-pdx215.dtb
>>   dtb-$(CONFIG_ARCH_QCOM)    += sm8450-hdk.dtb
>> diff --git a/arch/arm64/boot/dts/qcom/sm8350-oneplus-common.dtsi b/ 
>> arch/arm64/boot/dts/qcom/sm8350-oneplus-common.dtsi
>> new file mode 100644
>> index 000000000000..2f6768f35259
>> --- /dev/null
>> +++ b/arch/arm64/boot/dts/qcom/sm8350-oneplus-common.dtsi
>> @@ -0,0 +1,1247 @@
>> +// SPDX-License-Identifier: BSD-3-Clause
>> +/*
>> + * Copyright (c) 2023 Caleb Connolly <caleb.connolly@linaro.org>
>> + *
>> + * Copyright (c) 2023 Igalia S.L.
>> + * Authors:
>> + *    Nia Espera <nespera@igalia.com>
>> + */
>> +
>> +#include <dt-bindings/iio/qcom,spmi-adc7-pm8350.h>
>> +#include <dt-bindings/iio/qcom,spmi-adc7-pm8350b.h>
>> +#define SMB139x_1_SID 0x0b
>> +#define SMB139x_2_SID 0x0c
>> +#include <dt-bindings/iio/qcom,spmi-adc7-smb139x.h>
>> +#include <dt-bindings/pinctrl/qcom,pmic-gpio.h>
>> +#include <dt-bindings/regulator/qcom,rpmh-regulator.h>
>> +#include "sm8350.dtsi"
>> +#include "pm8350.dtsi"
>> +#include "pm8350b.dtsi"
>> +#include "pm8350c.dtsi"
>> +#include "pmk8350.dtsi"
>> +#include "pmr735a.dtsi"
>> +#include "pmr735b.dtsi"
>> +
>> +/ {
>> +    /* As with the Sony devices, msm-id and board-id aren't needed 
>> here */
> This became "common knowledge" since then, we can omit the comment now.
> 
>> +    chassis-type = "handset";
>> +    interrupt-parent = <&intc>;
>> +
>> +    chosen {
>> +        #address-cells = <2>;
>> +        #size-cells = <2>;
>> +        ranges;
>> +
>> +        framebuffer: framebuffer@e4d00000 {
>> +            compatible = "simple-framebuffer";
>> +            reg = <0 0xe4d00000 0 0x2400000>;
>> +            width = <1080>;
>> +            height = <2412>;
>> +            stride = <(1080 * 4)>;
>> +            format = "a8r8g8b8";
>> +            /*
>> +             * That's (going to be) a lot of clocks, but it's
>> +             * necessary due to unused clk cleanup & no panel
>> +             * driver yet.
>> +             */
>> +            clocks = <&gcc GCC_DISP_HF_AXI_CLK>,
>> +                 <&gcc GCC_DISP_SF_AXI_CLK>;
>> +        };
>> +    };
>> +
>> +    gpio-keys {
>> +        compatible = "gpio-keys";
>> +
>> +        pinctrl-names = "default";
>> +        pinctrl-0 = <&vol_down_n>;
>> +
>> +        key-vol-up {
>> +            label = "Volume Up";
>> +            linux,code = <KEY_VOLUMEUP>;
>> +            gpios = <&pmk8350_gpios 6 GPIO_ACTIVE_LOW>;
>> +            debounce-interval = <15>;
>> +            linux,can-disable;
>> +            wakeup-source;
>> +        };
>> +    };
>> +
>> +    bat: battery {
>> +        compatible = "simple-battery";
>> +        device-chemistry = "lithium-ion";
>> +        voltage-min-design-microvolt = <3200000>;
>> +        energy-full-design-microwatt-hours = <15840000>;
>> +        charge-full-design-microamp-hours = <2225000>;
>> +    };
>> +
>> +    vph_pwr: vph-pwr-regulator {
>> +        compatible = "regulator-fixed";
>> +        regulator-name = "vph_pwr";
>> +        regulator-min-microvolt = <3700000>;
>> +        regulator-max-microvolt = <3700000>;
>> +
>> +        regulator-always-on;
>> +        regulator-boot-on;
>> +    };
>> +
>> +    display_panel_avdd: display_regulator@1 {
>> +        compatible = "regulator-fixed";
>> +        regulator-name = "display_panel_avdd";
>> +        regulator-min-microvolt = <5500000>;
>> +        regulator-max-microvolt = <5500000>;
>> +        regulator-enable-ramp-delay = <233>;
>> +
>> +        enable-active-high;
>> +        regulator-boot-on;
>> +    };
>> +
>> +    /*
>> +     * Hack; OP9 bootloader specifically checks that the timer node has
>> +     * this label.
>> +     */
>> +    arch_timer: timer {};
>> +};
>> +
>> +&reserved_memory {
>> +    /* EFI splash screen */
>> +    memory@e1000000 {
> framebuffer@e10...
> 
>> +        reg = <0 0xe4d00000 0 0x02400000>;
>> +        no-map;
>> +        label = "cont_splash_region";
> This label is unnecessary (perhaps even unused?)
> 
>> +    };
>> +
>> +    ramoops: ramoops@E9700000 {
>> +        compatible = "ramoops";
>> +        reg = <0 0xe9700000 0 0x05b8000>;
>> +        record-size =    <0x40000>;
>> +        console-size =    <0x40000>;
>> +        ftrace-size =    <0x200000>;
>> +        pmsg-size =    <0x200000>;
>> +        devinfo-size =    <0x08000>;
>> +        dumpinfo-size =    <0x08000>;
>> +        rsv01info-size=    <0x08000>;
>> +        rsv02info-size=    <0x08000>;
>> +        rsv03info-size=    <0x08000>;
>> +        rsv04info-size=    <0x08000>;
>> +        rsv05info-size=    <0x08000>;
>> +        ecc-size=    <0x0>;
> Please use a single space before and after the '=' sign.
> Please drop the unused-and-undocumented properties (make CHECK_DTBS=1 
> qcom/sm8350-oneplus-lemonade.dtb)
> 
>> +    };
>> +
>> +    /* bootloader log buffer */
>> +    memory@9fff7000 {
> bootloader-log@, drop comment
> 
>> +        reg = <0x00 0x9fff7000 0x00 0x8000>;
> please be consistent with the usage of "different zeroes"
> 
>> +    };
>> +
>> +    /* unknown; "param_mem" downstream */
>> +    memory@ea700000 {
> reserved@, drop comment, probably it's for the kernel command line 
> parameters in some hacky setup, but if so, it would be freed the moment
> Linux is jumped to.
> 
> [...]
> 
>> +
>> +    /* regulators-2 unused for now */
> Any good reason?

To put everything "in order", pm8350b-rpmh-regulators sits here (with 
pmic-id "d"). However it only has one regulator (pm8350b_ldo1) which is 
entirely unused on the oneplus 9(p) and there's no driver for it 
upstream. If this common tree is also good for the oneplus 9t, then that 
regulator would be useful to have enabled.

>> +
>> +    regulators-3 {
>> +        compatible = "qcom,pmr735a-rpmh-regulators";
>> +        qcom,pmic-id = "e";
>> +
>> +        vdd-s1-supply = <&vph_pwr>;
>> +        vdd-s2-supply = <&vph_pwr>;
>> +        vdd-s3-supply = <&vph_pwr>;
>> +
>> +        vdd-l1-l2-supply = <&pmr735a_s2>;
>> +        vdd-l3-supply = <&pmr735a_s1>;
>> +        vdd-l4-supply = <&pm8350c_s1>;
>> +        vdd-l5-l6-supply = <&pm8350c_s1>;
>> +        vdd-l7-bob-supply = <&vreg_bob>;
>> +
>> +        pmr735a_s1: smps1 {
>> +            regulator-name = "pmr735a_s1";
>> +            regulator-min-microvolt = <1200000>;
>> +            regulator-max-microvolt = <1280000>;
>> +        };
>> +
>> +        pmr735a_s2: smps2 {
>> +            regulator-name = "pmr735a_s2";
>> +            regulator-min-microvolt = <500000>;
>> +            regulator-max-microvolt = <976000>;
>> +        };
>> +
>> +        pmr735a_s3: smps3 {
>> +            regulator-name = "pmr735a_s3";
>> +            regulator-min-microvolt = <2208000>;
>> +            regulator-max-microvolt = <2352000>;
>> +        };
>> +
>> +        pmr735a_l1: ldo1 {
>> +            regulator-name = "pmr735a_l1";
>> +            regulator-min-microvolt = <912000>;
>> +            regulator-max-microvolt = <912000>;
>> +        };
>> +
>> +        pmr735a_l2: ldo2 {
>> +            regulator-name = "pmr735a_l2";
>> +            regulator-min-microvolt = <1200000>;
>> +            regulator-max-microvolt = <1200000>;
>> +        };
>> +
>> +        pmr735a_l3: ldo3 {
>> +            regulator-name = "pmr735a_l3";
>> +            regulator-min-microvolt = <1200000>;
>> +            regulator-max-microvolt = <1200000>;
>> +        };
>> +
>> +        pmr735a_l4: ldo4 {
>> +            regulator-name = "pmr735a_l4";
>> +            regulator-min-microvolt = <1776000>;
>> +            regulator-max-microvolt = <1872000>;
>> +        };
>> +
>> +        pmr735a_l5: ldo5 {
>> +            regulator-name = "pmr735a_l5";
>> +            regulator-min-microvolt = <800000>;
>> +            regulator-max-microvolt = <800000>;
>> +        };
>> +
>> +        pmr735a_l6: ldo6 {
>> +            regulator-name = "pmr735a_l6";
>> +            regulator-min-microvolt = <480000>;
>> +            regulator-max-microvolt = <904000>;
>> +        };
>> +
>> +        pmr735a_l7: ldo7 {
>> +            regulator-name = "pmr735a_l7";
>> +            regulator-min-microvolt = <2800000>;
>> +            regulator-max-microvolt = <2800000>;
>> +        };
>> +    };
>> +};
>> +
>> +&adsp {
>> +    firmware-name = "qcom/OnePlus/lemonade/adsp.mbn";
>> +    status = "okay";
>> +};
>> +
>> +&cdsp {
>> +    firmware-name = "qcom/OnePlus/lemonade/cdsp.mbn";
>> +    status = "okay";
>> +};
>> +
>> +&slpi {
>> +    firmware-name = "qcom/OnePlus/lemonade/slpi.mbn";
>> +    status = "okay";
>> +};
>> +
>> +&ipa {
>> +    qcom,gsi-loader = "self";
>> +    memory-region = <&pil_ipa_fw_mem>;
>> +    firmware-name = "qcom/OnePlus/lemonade/ipa_fws.mbn";
>> +    status = "okay";
>> +};
>> +
>> +&mpss {
>> +    firmware-name = "qcom/OnePlus/lemonade/modem.mbn",
>> +            "qcom/OnePlus/lemonade/mcfg_hw.mbn";
>> +
>> +    status = "okay";
>> +};
>> +
>> +&i2c4 {
>> +    clock-frequency = <400000>;
>> +    status = "okay";
>> +
>> +    /* Touchscreens: Syna TCM oncell or Samsung s6sy761 */
> Synaptics with a samsung panel? Are you sure it's not a reference device 
> dt leftover?

Seems like it; either samsung panel + samsung TS or samsung panel + syna 
TS. Specifically, the 9p has a "mdss_dsi_samsung_amb670yf01_dsc_cmd" 
specified in downstream; checking dmesg in Android confirms this is the 
one that gets loaded.

> [...]
> 
>> +&pm8350_gpios {
>> +    usb2_vbus_boost_default: usb2_vbus_boost_default {
> No underscores in node names, use '-', all throughout the file.
> 
> 
>> +        pins = "gpio8";
>> +        function = "normal";
>> +        output-low;
>> +        power-source = <0x00>; > +        phandle = <0x5e1>;
> Please drop the decompiler-generated phandle= properties
> 
> [...]
> 
>> +    sde_dsi_active: sde-dsi-active {
>> +        pins = "gpio24";
>> +        function = "gpio";
>> +        drive-strength = <8>;
>> +        bias-disable = <0>;
> This is a boolean property, should be "bias-disable;"
> 
> [...]
> 
>> +&usb_1 {
>> +    /* Bug in interconnect driver breaks USB */
>> +    /delete-property/ interconnects;
>> +    /delete-property/ interconnect-names;
> Can you elaborate?
> 
>> +
>> +    /*
>> +     * USB3 is not tested (though it is enabled downstream) so limit to
>> +     * high-speed for now.
>> +     */
>> +    qcom,select-utmi-as-pipe-clk;
>> +
>> +    status = "okay";
>> +};
>> +
>> +&usb_1_dwc3 {
>> +    /* Mode switching is untested */
>> +    dr_mode = "peripheral";
>> +    maximum-speed = "high-speed";
>> +    phys = <&usb_1_hsphy>;
>> +    phy-names = "usb2-phy";
>> +};
>> +
>> +&usb_1_hsphy {
>> +    vdda-pll-supply = <&pm8350_l5>;
>> +    vdda18-supply = <&pm8350c_l1>;
>> +    vdda33-supply = <&pm8350_l2>;
>> +
>> +    status = "okay";
>> +};
>> +
>> +/* Enabling this is necessary only for displayport */
> If DP is wired up, I would strongly guess that USB3 is too.
> 
>> +&usb_1_qmpphy {
>> +    vdda-phy-supply = <&pm8350_l6>;
>> +    vdda-pll-supply = <&pm8350_l1>;
>> +
>> +    status = "okay";
>> +};
>> +
>> +&i2c2 {
> Please sort the node references alphabetically
> 
>> +    clock-frequency = <100000>;
>> +    status = "okay";
>> +
>> +    bq27541: fuel-gauge@55 {
>> +        compatible = "ti,bq27541";
>> +        reg = <0x55>;
>> +        monitored-battery = <&bat>;
>> +    };
>> +};
>> +/* Crypto drivers currently fail & cause an XPU violation */
> No need, see commit 4d29db2043610dd70be00a61f26fd64256a2a6c5
> [...]
> 
>> +    /* Modem antenna pins exclusive to lemonade */
>> +    rf_cable_ant1_active: rf_cable_ant1_active {
>> +        pins = "gpio27";
>> +        function = "gpio";
>> +        drive-strength = <2>;
>> +        bias-pull-up;
>> +    };
>> +    rf_cable_ant2_active: rf_cable_ant2_active {
> Please add a newline between subnodes
> 
> Konrad

Thanks!
Nia Espera Oct. 18, 2023, 1:27 p.m. UTC | #12
On 10/16/23 15:50, Luca Weiss wrote:
> Hi Nia,
> 
> On Mon Oct 16, 2023 at 2:47 PM CEST, Nia Espera wrote:

[ ... ]

>> +	/*
>> +	 * USB3 is not tested (though it is enabled downstream) so limit to
>> +	 * high-speed for now.
>> +	 */
>> +	qcom,select-utmi-as-pipe-clk;
> 
> You never plugged the device into a USB 3.0 port? Should be trivial to
> test I think?

Tested; seems broken. Definitely enabled downstream though, which is 
odd, so it might just be a case of requiring bringup of other things 
first. Regardless, I'll update the comment and keep this for now.
Nia Espera Oct. 18, 2023, 1:47 p.m. UTC | #13
On 10/17/23 08:31, Luca Weiss wrote:
> On Mon Oct 16, 2023 at 11:41 PM CEST, Nia Espera wrote:
>> Hi,
>>
>> On 10/16/23 15:50, Luca Weiss wrote:
>>> Hi Nia,
>>>
>>> On Mon Oct 16, 2023 at 2:47 PM CEST, Nia Espera wrote:

[ ... ]

>>>> +&i2c13 {
>>>> +	clock-frequency = <100000>;
>>>> +	status = "okay";
>>>> +
>>>> +	fsa4480@42 {
>>>> +		compatible = "fcs,fsa4480";
>>>> +		reg = <0x42>;
>>>> +		mode-switch;
>>>> +		orientation-switch;
>>>> +	};
>>>> +
>>>> +	/* Qualcomm PM8008i/PM8008j (?) @ 8, 9, c, d */
>>>
>>> Check again in downstream if the @c and @d are actually enabled, at
>>> least they're not on my boards and the PM8008 is only addressable on @8
>>> and @9.
>>
>> Seems like they all are used on this device; (d) in particular seems to
>> be needed for the camera.
> 
> PM8008 is a I2C-addressable regulator that is just used for camera. But
> still if you have some time, double check if really both 8+9 and c+d are
> used. For example you could use i2cdetect on the bus, I think the PM8008
> shows up without manually flipping some enable GPIO. Or check downstream
> dmesg to see what it says, or at runtime in /sys (e.g. in TWRP should be
> enough).

It looks like there's something there, though it might not be touched 
downstream on this device. dmesg spits out:

[    2.005455] (3)[9:kworker/u24:0][    2.005452]@3 qcom,pm8008-chip: 
probe of a94000.i2c:pm8008j@c:pm8008-chip@900 failed with error -107

which seems to imply c/d are unused; however, they do show up under 
/sys/bus/i2c/devices/9-000[c/d], so I'm not quite sure what to make of it.
diff mbox series

Patch

diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
index 2cca20563a1d..369ad4721b29 100644
--- a/arch/arm64/boot/dts/qcom/Makefile
+++ b/arch/arm64/boot/dts/qcom/Makefile
@@ -211,6 +211,8 @@  dtb-$(CONFIG_ARCH_QCOM)	+= sm8250-xiaomi-elish-csot.dtb
 dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-hdk.dtb
 dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-microsoft-surface-duo2.dtb
 dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-mtp.dtb
+dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-oneplus-lemonade.dtb
+dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-oneplus-lemonadep.dtb
 dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-sony-xperia-sagami-pdx214.dtb
 dtb-$(CONFIG_ARCH_QCOM)	+= sm8350-sony-xperia-sagami-pdx215.dtb
 dtb-$(CONFIG_ARCH_QCOM)	+= sm8450-hdk.dtb
diff --git a/arch/arm64/boot/dts/qcom/sm8350-oneplus-common.dtsi b/arch/arm64/boot/dts/qcom/sm8350-oneplus-common.dtsi
new file mode 100644
index 000000000000..2f6768f35259
--- /dev/null
+++ b/arch/arm64/boot/dts/qcom/sm8350-oneplus-common.dtsi
@@ -0,0 +1,1247 @@ 
+// SPDX-License-Identifier: BSD-3-Clause
+/*
+ * Copyright (c) 2023 Caleb Connolly <caleb.connolly@linaro.org>
+ *
+ * Copyright (c) 2023 Igalia S.L.
+ * Authors:
+ *	Nia Espera <nespera@igalia.com>
+ */
+
+#include <dt-bindings/iio/qcom,spmi-adc7-pm8350.h>
+#include <dt-bindings/iio/qcom,spmi-adc7-pm8350b.h>
+#define SMB139x_1_SID 0x0b
+#define SMB139x_2_SID 0x0c
+#include <dt-bindings/iio/qcom,spmi-adc7-smb139x.h>
+#include <dt-bindings/pinctrl/qcom,pmic-gpio.h>
+#include <dt-bindings/regulator/qcom,rpmh-regulator.h>
+#include "sm8350.dtsi"
+#include "pm8350.dtsi"
+#include "pm8350b.dtsi"
+#include "pm8350c.dtsi"
+#include "pmk8350.dtsi"
+#include "pmr735a.dtsi"
+#include "pmr735b.dtsi"
+
+/ {
+	/* As with the Sony devices, msm-id and board-id aren't needed here */
+	chassis-type = "handset";
+	interrupt-parent = <&intc>;
+
+	chosen {
+		#address-cells = <2>;
+		#size-cells = <2>;
+		ranges;
+
+		framebuffer: framebuffer@e4d00000 {
+			compatible = "simple-framebuffer";
+			reg = <0 0xe4d00000 0 0x2400000>;
+			width = <1080>;
+			height = <2412>;
+			stride = <(1080 * 4)>;
+			format = "a8r8g8b8";
+			/*
+			 * That's (going to be) a lot of clocks, but it's
+			 * necessary due to unused clk cleanup & no panel
+			 * driver yet.
+			 */
+			clocks = <&gcc GCC_DISP_HF_AXI_CLK>,
+				 <&gcc GCC_DISP_SF_AXI_CLK>;
+		};
+	};
+
+	gpio-keys {
+		compatible = "gpio-keys";
+
+		pinctrl-names = "default";
+		pinctrl-0 = <&vol_down_n>;
+
+		key-vol-up {
+			label = "Volume Up";
+			linux,code = <KEY_VOLUMEUP>;
+			gpios = <&pmk8350_gpios 6 GPIO_ACTIVE_LOW>;
+			debounce-interval = <15>;
+			linux,can-disable;
+			wakeup-source;
+		};
+	};
+
+	bat: battery {
+		compatible = "simple-battery";
+		device-chemistry = "lithium-ion";
+		voltage-min-design-microvolt = <3200000>;
+		energy-full-design-microwatt-hours = <15840000>;
+		charge-full-design-microamp-hours = <2225000>;
+	};
+
+	vph_pwr: vph-pwr-regulator {
+		compatible = "regulator-fixed";
+		regulator-name = "vph_pwr";
+		regulator-min-microvolt = <3700000>;
+		regulator-max-microvolt = <3700000>;
+
+		regulator-always-on;
+		regulator-boot-on;
+	};
+
+	display_panel_avdd: display_regulator@1 {
+		compatible = "regulator-fixed";
+		regulator-name = "display_panel_avdd";
+		regulator-min-microvolt = <5500000>;
+		regulator-max-microvolt = <5500000>;
+		regulator-enable-ramp-delay = <233>;
+
+		enable-active-high;
+		regulator-boot-on;
+	};
+
+	/*
+	 * Hack; OP9 bootloader specifically checks that the timer node has
+	 * this label.
+	 */
+	arch_timer: timer {};
+};
+
+&reserved_memory {
+	/* EFI splash screen */
+	memory@e1000000 {
+		reg = <0 0xe4d00000 0 0x02400000>;
+		no-map;
+		label = "cont_splash_region";
+	};
+
+	ramoops: ramoops@E9700000 {
+		compatible = "ramoops";
+		reg = <0 0xe9700000 0 0x05b8000>;
+		record-size =	<0x40000>;
+		console-size =	<0x40000>;
+		ftrace-size =	<0x200000>;
+		pmsg-size =	<0x200000>;
+		devinfo-size =	<0x08000>;
+		dumpinfo-size =	<0x08000>;
+		rsv01info-size=	<0x08000>;
+		rsv02info-size=	<0x08000>;
+		rsv03info-size=	<0x08000>;
+		rsv04info-size=	<0x08000>;
+		rsv05info-size=	<0x08000>;
+		ecc-size=	<0x0>;
+	};
+
+	/* bootloader log buffer */
+	memory@9fff7000 {
+		reg = <0x00 0x9fff7000 0x00 0x8000>;
+	};
+
+	/* unknown; "param_mem" downstream */
+	memory@ea700000 {
+		reg = <0x00 0xea700000 0x00 0x800000>;
+	};
+};
+
+&apps_rsc {
+	regulators-0 {
+		compatible = "qcom,pm8350-rpmh-regulators";
+		qcom,pmic-id = "b";
+
+		vdd-s1-supply = <&vph_pwr>;
+		vdd-s2-supply = <&vph_pwr>;
+		vdd-s3-supply = <&vph_pwr>;
+		vdd-s4-supply = <&vph_pwr>;
+		vdd-s5-supply = <&vph_pwr>;
+		vdd-s6-supply = <&vph_pwr>;
+		vdd-s7-supply = <&vph_pwr>;
+		vdd-s8-supply = <&vph_pwr>;
+		vdd-s9-supply = <&vph_pwr>;
+		vdd-s10-supply = <&vph_pwr>;
+		vdd-s11-supply = <&vph_pwr>;
+		vdd-s12-supply = <&vph_pwr>;
+
+		vdd-l1-l4-supply = <&pm8350_s11>;
+		vdd-l2-l7-supply = <&vreg_bob>;
+		vdd-l3-l5-supply = <&vreg_bob>;
+		vdd-l6-l9-l10-supply = <&pm8350_s11>;
+		vdd-l8-supply = <&pmr735a_s2>;
+
+		/*
+		 * ARC regulators:
+		 * S5 - mx.lvl
+		 * S6 - gfx.lvl
+		 * S9 - mxc.lvl
+		 */
+
+		pm8350_s10: smps10 {
+			regulator-name = "pm8350_s10";
+			regulator-min-microvolt = <1800000>;
+			regulator-max-microvolt = <1800000>;
+			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+		};
+
+		pm8350_s11: smps11 {
+			regulator-name = "pm8350_s11";
+			regulator-min-microvolt = <752000>;
+			regulator-max-microvolt = <1012000>;
+			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+		};
+
+		pm8350_s12: smps12 {
+			regulator-name = "pm8350_s12";
+			regulator-min-microvolt = <1224000>;
+			regulator-max-microvolt = <1360000>;
+			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+		};
+
+		pm8350_l1: ldo1 {
+			regulator-name = "pm8350_l1";
+			regulator-min-microvolt = <912000>;
+			regulator-max-microvolt = <920000>;
+			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+		};
+
+		pm8350_l2: ldo2 {
+			regulator-name = "pm8350_l2";
+			regulator-min-microvolt = <3072000>;
+			regulator-max-microvolt = <3072000>;
+			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+		};
+
+		pm8350_l3: ldo3 {
+			regulator-name = "pm8350_l3";
+			regulator-min-microvolt = <904000>;
+			regulator-max-microvolt = <904000>;
+			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+		};
+
+		/* L4 - lmx.lvl (ARC) */
+
+		pm8350_l5: ldo5 {
+			regulator-name = "pm8350_l5";
+			regulator-min-microvolt = <880000>;
+			regulator-max-microvolt = <888000>;
+			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+			regulator-allow-set-load;
+			regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+						   RPMH_REGULATOR_MODE_HPM>;
+		};
+
+		pm8350_l6: ldo6 {
+			regulator-name = "pm8350_l6";
+			regulator-min-microvolt = <1200000>;
+			regulator-max-microvolt = <1208000>;
+			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+			regulator-allow-set-load;
+			regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+						   RPMH_REGULATOR_MODE_HPM>;
+		};
+
+		pm8350_l7: ldo7 {
+			regulator-name = "pm8350_l7";
+			regulator-min-microvolt = <2400000>;
+			regulator-max-microvolt = <3008000>;
+			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+			regulator-allow-set-load;
+			regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+						   RPMH_REGULATOR_MODE_HPM>;
+		};
+
+		/* L8 - lcx.lvl (ARC) */
+
+		pm8350_l9: ldo9 {
+			regulator-name = "pm8350_l9";
+			regulator-min-microvolt = <1200000>;
+			regulator-max-microvolt = <1200000>;
+			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+			regulator-allow-set-load;
+			regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+						   RPMH_REGULATOR_MODE_HPM>;
+		};
+	};
+
+	regulators-1 {
+		compatible = "qcom,pm8350c-rpmh-regulators";
+		qcom,pmic-id = "c";
+
+		vdd-s1-supply = <&vph_pwr>;
+		vdd-s2-supply = <&vph_pwr>;
+		vdd-s3-supply = <&vph_pwr>;
+		vdd-s4-supply = <&vph_pwr>;
+		vdd-s5-supply = <&vph_pwr>;
+		vdd-s6-supply = <&vph_pwr>;
+		vdd-s7-supply = <&vph_pwr>;
+		vdd-s8-supply = <&vph_pwr>;
+		vdd-s9-supply = <&vph_pwr>;
+		vdd-s10-supply = <&vph_pwr>;
+
+		vdd-l1-l12-supply = <&pm8350c_s1>;
+		vdd-l2-l8-supply = <&pm8350c_s1>;
+		vdd-l3-l4-l5-l7-l13-supply = <&vreg_bob>;
+		vdd-l6-l9-l11-supply = <&vreg_bob>;
+		vdd-l10-supply = <&pm8350_s12>;
+
+		vdd-bob-supply = <&vph_pwr>;
+
+		pm8350c_s1: smps1 {
+			regulator-name = "pm8350c_s1";
+			regulator-min-microvolt = <1800000>;
+			regulator-max-microvolt = <1952000>;
+			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+		};
+
+		/* S2 - ebi.lvl (ARC) */
+
+		pm8350c_s3: smps3 {
+			regulator-name = "pm8350c_s3";
+			regulator-min-microvolt = <300000>;
+			regulator-max-microvolt = <704000>;
+			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+		};
+
+		/*
+		 * ARC regulators:
+		 * S4 - mss.lvl
+		 * S6 - cx.lvl
+		 * S8 - mmcx.lvl
+		 */
+
+		pm8350c_s10: smps10 {
+			regulator-name = "pm8350c_s10";
+			regulator-min-microvolt = <1048000>;
+			regulator-max-microvolt = <1128000>;
+			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+		};
+
+		pm8350c_l1: ldo1 {
+			regulator-name = "pm8350c_l1";
+			regulator-min-microvolt = <1800000>;
+			regulator-max-microvolt = <1800000>;
+			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+		};
+
+		pm8350c_l2: ldo2 {
+			regulator-name = "pm8350c_l2";
+			regulator-min-microvolt = <1800000>;
+			regulator-max-microvolt = <1800000>;
+			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+		};
+
+		pm8350c_l3: ldo3 {
+			regulator-name = "pm8350c_l3";
+			regulator-min-microvolt = <3000000>;
+			regulator-max-microvolt = <3300000>;
+			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+		};
+
+		pm8350c_l4: ldo4 {
+			regulator-name = "pm8350c_l4";
+			regulator-min-microvolt = <1704000>;
+			regulator-max-microvolt = <3000000>;
+			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+		};
+
+		pm8350c_l5: ldo5 {
+			regulator-name = "pm8350c_l5";
+			regulator-min-microvolt = <1704000>;
+			regulator-max-microvolt = <3000000>;
+			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+		};
+
+		pm8350c_l6: ldo6 {
+			regulator-name = "pm8350c_l6";
+			regulator-min-microvolt = <1800000>;
+			regulator-max-microvolt = <2960000>;
+			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+		};
+
+		pm8350c_l7: ldo7 {
+			regulator-name = "pm8350c_l7";
+			regulator-min-microvolt = <3008000>;
+			regulator-max-microvolt = <3008000>;
+			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+		};
+
+		pm8350c_l8: ldo8 {
+			regulator-name = "pm8350c_l8";
+			regulator-min-microvolt = <1800000>;
+			regulator-max-microvolt = <1800000>;
+			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+		};
+
+		pm8350c_l9: ldo9 {
+			regulator-name = "pm8350c_l9";
+			regulator-min-microvolt = <2800000>;
+			regulator-max-microvolt = <3008000>;
+			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+		};
+
+		pm8350c_l10: ldo10 {
+			regulator-name = "pm8350c_l10";
+			regulator-min-microvolt = <1200000>;
+			regulator-max-microvolt = <1200000>;
+			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+		};
+
+		pm8350c_l11: ldo11 {
+			regulator-name = "pm8350c_l11";
+			regulator-min-microvolt = <2400000>;
+			regulator-max-microvolt = <3008000>;
+			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+		};
+
+		pm8350c_l12: ldo12 {
+			regulator-name = "pm8350c_l12";
+			regulator-min-microvolt = <1800000>;
+			regulator-max-microvolt = <2000000>;
+			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+		};
+
+		pm8350c_l13: ldo13 {
+			regulator-name = "pm8350c_l13";
+			regulator-min-microvolt = <3000000>;
+			regulator-max-microvolt = <3200000>;
+			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+		};
+
+		vreg_bob: bob {
+			regulator-name = "vreg_bob";
+			regulator-min-microvolt = <3400000>;
+			regulator-max-microvolt = <3960000>;
+			regulator-initial-mode = <RPMH_REGULATOR_MODE_AUTO>;
+		};
+	};
+
+	/* regulators-2 unused for now */
+
+	regulators-3 {
+		compatible = "qcom,pmr735a-rpmh-regulators";
+		qcom,pmic-id = "e";
+
+		vdd-s1-supply = <&vph_pwr>;
+		vdd-s2-supply = <&vph_pwr>;
+		vdd-s3-supply = <&vph_pwr>;
+
+		vdd-l1-l2-supply = <&pmr735a_s2>;
+		vdd-l3-supply = <&pmr735a_s1>;
+		vdd-l4-supply = <&pm8350c_s1>;
+		vdd-l5-l6-supply = <&pm8350c_s1>;
+		vdd-l7-bob-supply = <&vreg_bob>;
+
+		pmr735a_s1: smps1 {
+			regulator-name = "pmr735a_s1";
+			regulator-min-microvolt = <1200000>;
+			regulator-max-microvolt = <1280000>;
+		};
+
+		pmr735a_s2: smps2 {
+			regulator-name = "pmr735a_s2";
+			regulator-min-microvolt = <500000>;
+			regulator-max-microvolt = <976000>;
+		};
+
+		pmr735a_s3: smps3 {
+			regulator-name = "pmr735a_s3";
+			regulator-min-microvolt = <2208000>;
+			regulator-max-microvolt = <2352000>;
+		};
+
+		pmr735a_l1: ldo1 {
+			regulator-name = "pmr735a_l1";
+			regulator-min-microvolt = <912000>;
+			regulator-max-microvolt = <912000>;
+		};
+
+		pmr735a_l2: ldo2 {
+			regulator-name = "pmr735a_l2";
+			regulator-min-microvolt = <1200000>;
+			regulator-max-microvolt = <1200000>;
+		};
+
+		pmr735a_l3: ldo3 {
+			regulator-name = "pmr735a_l3";
+			regulator-min-microvolt = <1200000>;
+			regulator-max-microvolt = <1200000>;
+		};
+
+		pmr735a_l4: ldo4 {
+			regulator-name = "pmr735a_l4";
+			regulator-min-microvolt = <1776000>;
+			regulator-max-microvolt = <1872000>;
+		};
+
+		pmr735a_l5: ldo5 {
+			regulator-name = "pmr735a_l5";
+			regulator-min-microvolt = <800000>;
+			regulator-max-microvolt = <800000>;
+		};
+
+		pmr735a_l6: ldo6 {
+			regulator-name = "pmr735a_l6";
+			regulator-min-microvolt = <480000>;
+			regulator-max-microvolt = <904000>;
+		};
+
+		pmr735a_l7: ldo7 {
+			regulator-name = "pmr735a_l7";
+			regulator-min-microvolt = <2800000>;
+			regulator-max-microvolt = <2800000>;
+		};
+	};
+};
+
+&adsp {
+	firmware-name = "qcom/OnePlus/lemonade/adsp.mbn";
+	status = "okay";
+};
+
+&cdsp {
+	firmware-name = "qcom/OnePlus/lemonade/cdsp.mbn";
+	status = "okay";
+};
+
+&slpi {
+	firmware-name = "qcom/OnePlus/lemonade/slpi.mbn";
+	status = "okay";
+};
+
+&ipa {
+	qcom,gsi-loader = "self";
+	memory-region = <&pil_ipa_fw_mem>;
+	firmware-name = "qcom/OnePlus/lemonade/ipa_fws.mbn";
+	status = "okay";
+};
+
+&mpss {
+	firmware-name = "qcom/OnePlus/lemonade/modem.mbn",
+			"qcom/OnePlus/lemonade/mcfg_hw.mbn";
+
+	status = "okay";
+};
+
+&i2c4 {
+	clock-frequency = <400000>;
+	status = "okay";
+
+	/* Touchscreens: Syna TCM oncell or Samsung s6sy761 */
+};
+
+&i2c13 {
+	clock-frequency = <100000>;
+	status = "okay";
+
+	fsa4480@42 {
+		compatible = "fcs,fsa4480";
+		reg = <0x42>;
+		mode-switch;
+		orientation-switch;
+	};
+
+	/* Qualcomm PM8008i/PM8008j (?) @ 8, 9, c, d */
+};
+
+&i2c15 {
+	clock-frequency = <400000>;
+	status = "okay";
+
+	/* sn-nci NFC controller @ 28 */
+};
+
+&pm8350_gpios {
+	usb2_vbus_boost_default: usb2_vbus_boost_default {
+		pins = "gpio8";
+		function = "normal";
+		output-low;
+		power-source = <0x00>;
+		phandle = <0x5e1>;
+	};
+
+	usb2_vbus_det_default: usb2_vbus_det_default {
+		pins = "gpio9";
+		function = "normal";
+		input-enable;
+		bias-disable;
+		power-source = <0x00>;
+		phandle = <0x5e0>;
+	};
+
+	gpio1_adc_default: gpio1-adc-default {
+		pins = "gpio1";
+		function = "normal";
+		bias-high-impedance;
+		bias-disable;
+		phandle = <0x566>;
+	};
+
+	gpio3_adc_default: gpio3-adc-default {
+		pins = "gpio3";
+		function = "normal";
+		bias-high-impedance;
+		bias-disable;
+		phandle = <0x567>;
+	};
+};
+
+&pm8350b_gpios {
+	vol_down_n: vol-down-n-state {
+		pins = "gpio6";
+		function = "normal";
+		power-source = <1>;
+		bias-pull-up;
+		input-enable;
+	};
+};
+
+&pmk8350_rtc {
+	status = "okay";
+};
+
+&pmk8350_vadc {
+	pinctrl-0 = <&gpio1_adc_default &gpio1_adc_default>;
+	pinctrl-names = "default";
+
+	pmk8350_ref_gnd {
+		reg = <0x00>;
+		label = "pmk8350_ref_gnd";
+		qcom,pre-scaling = <0x01 0x01>;
+	};
+
+	pmk8350_vref_1p25 {
+		reg = <0x01>;
+		label = "pmk8350_vref_1p25";
+		qcom,pre-scaling = <0x01 0x01>;
+	};
+
+	pmk8350_die_temp {
+		reg = <0x03>;
+		label = "pmk8350_die_temp";
+		qcom,pre-scaling = <0x01 0x01>;
+	};
+
+	pmk8350_xo_therm {
+		reg = <0x44>;
+		label = "pmk8350_xo_therm";
+		qcom,ratiometric;
+		qcom,hw-settle-time = <0xc8>;
+		qcom,pre-scaling = <0x01 0x01>;
+	};
+
+	pm8350_ref_gnd {
+		reg = <0x100>;
+		label = "pm8350_ref_gnd";
+		qcom,pre-scaling = <0x01 0x01>;
+	};
+
+	pm8350_vref_1p25 {
+		reg = <0x101>;
+		label = "pm8350_vref_1p25";
+		qcom,pre-scaling = <0x01 0x01>;
+	};
+
+	pm8350_die_temp {
+		reg = <0x103>;
+		label = "pm8350_die_temp";
+		qcom,pre-scaling = <0x01 0x01>;
+	};
+
+	pm8350_vph_pwr {
+		reg = <0x18e>;
+		label = "pm8350_vph_pwr";
+		qcom,pre-scaling = <0x01 0x03>;
+	};
+
+	pm8350b_ref_gnd {
+		reg = <0x300>;
+		label = "pm8350b_ref_gnd";
+		qcom,pre-scaling = <0x01 0x01>;
+	};
+
+	pm8350b_vref_1p25 {
+		reg = <0x301>;
+		label = "pm8350b_vref_1p25";
+		qcom,pre-scaling = <0x01 0x01>;
+	};
+
+	pm8350b_die_temp {
+		reg = <0x303>;
+		label = "pm8350b_die_temp";
+		qcom,pre-scaling = <0x01 0x01>;
+	};
+
+	pm8350b_vph_pwr {
+		reg = <0x38e>;
+		label = "pm8350b_vph_pwr";
+		qcom,pre-scaling = <0x01 0x03>;
+	};
+
+	pm8350b_vbat_sns {
+		reg = <0x38f>;
+		label = "pm8350b_vbat_sns";
+		qcom,pre-scaling = <0x01 0x03>;
+	};
+
+	pm8350_msm_therm {
+		reg = <PM8350_ADC7_AMUX_THM1_100K_PU(1)>;
+		label = "pm8350_msm_therm";
+		qcom,ratiometric;
+		qcom,hw-settle-time = <200>;
+		qcom,pre-scaling = <1 1>;
+	};
+
+	pm8350_cam_flash_therm {
+		reg = <PM8350_ADC7_AMUX_THM2_100K_PU(1)>;
+		label = "pm8350_cam_flash_therm";
+		qcom,ratiometric;
+		qcom,hw-settle-time = <200>;
+		qcom,pre-scaling = <1 1>;
+	};
+
+	pm8350_hot_pocket_therm {
+		reg = <PM8350_ADC7_AMUX_THM3_100K_PU(1)>;
+		label = "pm8350_hot_pocket_therm";
+		qcom,ratiometric;
+		qcom,hw-settle-time = <200>;
+		qcom,pre-scaling = <1 1>;
+	};
+
+	pm8350_wide_rfc_therm {
+		reg = <PM8350_ADC7_AMUX_THM4_100K_PU(1)>;
+		label = "pm8350_wide_rfc_therm";
+		qcom,ratiometric;
+		qcom,hw-settle-time = <200>;
+		qcom,pre-scaling = <1 1>;
+	};
+
+	pm8350_rear_tof_therm {
+		reg = <PM8350_ADC7_AMUX_THM5_100K_PU(1)>;
+		label = "pm8350_rear_tof_therm";
+		qcom,ratiometric;
+		qcom,hw-settle-time = <200>;
+		qcom,pre-scaling = <1 1>;
+	};
+
+	pm8350b_usb_conn_therm {
+		reg = <PM8350B_ADC7_AMUX_THM4_100K_PU>;
+		label = "pm8350b_usb_conn_therm";
+		qcom,ratiometric;
+		qcom,hw-settle-time = <200>;
+		qcom,pre-scaling = <1 1>;
+	};
+
+	pm8350b_wl_chg_therm {
+		reg = <PM8350B_ADC7_GPIO2_100K_PU>;
+		label = "pm8350b_wl_chg_therm";
+		qcom,ratiometric;
+		qcom,hw-settle-time = <200>;
+		qcom,pre-scaling = <1 1>;
+	};
+
+	pm8350b_chg_temp {
+		reg = <PM8350B_ADC7_CHG_TEMP>;
+		label = "pm8350b_chg_temp";
+		qcom,pre-scaling = <1 1>;
+	};
+
+	pmr735a_ref_gnd {
+		reg = <0x400>;
+		label = "pmr735a_ref_gnd";
+		qcom,pre-scaling = <0x01 0x01>;
+	};
+
+	pmr735a_vref_1p25 {
+		reg = <0x401>;
+		label = "pmr735a_vref_1p25";
+		qcom,pre-scaling = <0x01 0x01>;
+	};
+
+	pmr735a_die_temp {
+		reg = <0x403>;
+		label = "pmr735a_die_temp";
+		qcom,pre-scaling = <0x01 0x01>;
+	};
+
+	pmr735b_ref_gnd {
+		reg = <0x500>;
+		label = "pmr735b_ref_gnd";
+		qcom,pre-scaling = <0x01 0x01>;
+	};
+
+	pmr735b_vref_1p25 {
+		reg = <0x501>;
+		label = "pmr735b_vref_1p25";
+		qcom,pre-scaling = <0x01 0x01>;
+	};
+
+	pmr735b_die_temp {
+		reg = <0x503>;
+		label = "pmr735b_die_temp";
+		qcom,pre-scaling = <0x01 0x01>;
+	};
+
+	smb139x_1_smb_temp {
+		reg = <SMB139x_1_ADC7_SMB_TEMP>;
+		label = "smb139x_1_smb_temp";
+		qcom,pre-scaling = <1 1>;
+	};
+
+	smb139x_2_smb_temp {
+		reg = <SMB139x_2_ADC7_SMB_TEMP>;
+		label = "smb139x_2_smb_temp";
+		qcom,pre-scaling = <1 1>;
+	};
+
+	gpio1_v {
+		reg = <0x128>;
+		label = "gpio1_v";
+		qcom,ratiometric;
+		qcom,hw-settle-time = <0x2bc>;
+		qcom,pre-scaling = <0x01 0x01>;
+	};
+
+	gpio3_v {
+		reg = <0x12b>;
+		label = "gpio3_v";
+		qcom,ratiometric;
+		qcom,hw-settle-time = <0x2bc>;
+		qcom,pre-scaling = <0x01 0x01>;
+	};
+};
+
+&pmk8350_adc_tm {
+	status = "okay";
+
+	pm8350_msm_therm {
+		reg = <0x144>;
+		qcom,ratiometric;
+		qcom,hw-settle-time = <0xc8>;
+	};
+
+	pm8350_cam_flash_therm {
+		reg = <0x145>;
+		qcom,ratiometric;
+		qcom,hw-settle-time = <0xc8>;
+	};
+
+	pm8350_hot_pocket_therm {
+		reg = <0x146>;
+		qcom,ratiometric;
+		qcom,hw-settle-time = <0xc8>;
+	};
+
+	pm8350_wide_rfc_therm {
+		reg = <0x147>;
+		qcom,ratiometric;
+		qcom,hw-settle-time = <0xc8>;
+	};
+
+	pm8350_rear_tof_therm {
+		reg = <0x148>;
+		qcom,ratiometric;
+		qcom,hw-settle-time = <0xc8>;
+	};
+
+	pm8350b_usb_conn_therm {
+		reg = <0x347>;
+		qcom,ratiometric;
+		qcom,hw-settle-time = <0xc8>;
+	};
+
+	pm8350b_wl_chg_therm {
+		reg = <0x34b>;
+		qcom,ratiometric;
+		qcom,hw-settle-time = <0xc8>;
+	};
+
+	pmk8350_xo_therm {
+		reg = <0x44>;
+		qcom,ratiometric;
+		qcom,hw-settle-time = <0xc8>;
+	};
+};
+
+&pon_pwrkey {
+	status = "okay";
+};
+
+&pon_resin {
+	linux,code = <KEY_VOLUMEUP>;
+	status = "okay";
+};
+
+&qupv3_id_0 {
+	status = "okay";
+};
+
+&qupv3_id_1 {
+	status = "okay";
+};
+
+&qupv3_id_2 {
+	status = "okay";
+};
+
+&gpi_dma0 {
+	status = "okay";
+};
+
+&gpi_dma1 {
+	status = "okay";
+};
+
+&gpi_dma2 {
+	status = "okay";
+};
+
+&removed_mem {
+	reg = <0x0 0xd8800000 0x0 0x8e00000>;
+};
+
+&tlmm {
+	gpio-reserved-ranges = <52 8>;
+
+	pcie0_default_state: pcie0-default-state {
+		perst-pins {
+			pins = "gpio94";
+			function = "gpio";
+			drive-strength = <2>;
+			bias-pull-down;
+		};
+
+		clkreq-pins {
+			pins = "gpio95";
+			function = "pcie0_clkreqn";
+			drive-strength = <2>;
+			bias-pull-up;
+		};
+
+		wake-pins {
+			pins = "gpio96";
+			function = "gpio";
+			drive-strength = <2>;
+			bias-pull-up;
+		};
+
+		sleep-pins {
+			pins = "gpio95";
+			function = "gpio";
+			drive-strength = <2>;
+			bias-pull-up;
+		};
+	};
+
+	pcie1_default_state: pcie1-default-state {
+		perst-pins {
+			pins = "gpio97";
+			function = "gpio";
+			drive-strength = <2>;
+			bias-pull-down;
+		};
+
+		clkreq-pins {
+			pins = "gpio98";
+			function = "pcie1_clkreqn";
+			drive-strength = <2>;
+			bias-pull-up;
+		};
+
+		wake-pins {
+			pins = "gpio99";
+			function = "gpio";
+			drive-strength = <2>;
+			bias-pull-up;
+			/* wil6210_refclk_en_pin lives here also */
+		};
+	};
+
+	tp_rst_active: tp_rst_active {
+		pins = "gpio22";
+		function = "gpio";
+		drive-strength = <8>;
+		bias-pull-up;
+	};
+
+	/* tp_rst_suspend pin is different per device, don't specify here */
+
+	tp_irq_active: tp_irq_active {
+		pins = "gpio23";
+		function = "gpio";
+		drive-strength = <8>;
+		bias-disable;
+		input-enable;
+	};
+
+	tp_irq_suspend: tp_irq_suspend {
+		pins = "gpio23";
+		function = "gpio";
+		drive-strength = <2>;
+		bias-pull-down;
+	};
+
+	sde_dsi_active: sde-dsi-active {
+		pins = "gpio24";
+		function = "gpio";
+		drive-strength = <8>;
+		bias-disable = <0>;
+	};
+
+	sde_dsi_suspend: sde-dsi-suspend {
+		pins = "gpio24";
+		function = "gpio";
+		drive-strength = <2>;
+		bias-pull-down;
+	};
+
+	sde_te_active: sde-te-active {
+		pins = "gpio82";
+		function = "mdp_vsync";
+		drive-strength = <2>;
+		bias-pull-down;
+	};
+
+	sde_te_suspend: sde-te-suspend {
+		pins = "gpio82";
+		function = "mdp_vsync";
+		drive-strength = <2>;
+		bias-pull-down;
+	};
+
+	aw_irq: aw_irq {
+		pins = "gpio14";
+		function = "gpio";
+		drive-strength = <2>;
+		bias-pull-up;
+	};
+
+	aw_reset: aw_reset {
+		pins = "gpio75";
+		function = "gpio";
+		drive-strength = <2>;
+		bias-disable;
+	};
+
+	display_panel_avdd_default: display_panel_avdd_default {
+		pins = "gpio12";
+		function = "gpio";
+		drive-strength = <8>;
+		bias-disable = <0>;
+		output-high;
+	};
+
+	/* Modem-related pin common on both devices */
+	rf_cable_ant0_active: rf_cable_ant0_active {
+		pins = "gpio165";
+		function = "gpio";
+		drive-strength = <2>;
+		bias-pull-up;
+	};
+
+	usb_int_default: usb_int_default {
+		pins = "gpio198";
+		function = "gpio";
+		drive-strength = <2>;
+		bias-pull-down;
+		input-enable;
+	};
+
+	qupv3_se18_default_cts: qupv3_se18_default_cts {
+		pins = "gpio68";
+		function = "gpio";
+		drive-strength = <2>;
+		bias-disable;
+	};
+
+	qupv3_se18_default_rtsrx: qupv3_se18_default_rtsrx {
+		pins = "gpio69", "gpio71";
+		function = "gpio";
+		drive-strength = <2>;
+		bias-pull-down;
+	};
+
+	qupv3_se18_default_tx: qupv3_se18_default_tx {
+		pins = "gpio70";
+		function = "gpio";
+		drive-strength = <2>;
+		bias-pull-up;
+	};
+
+	qupv3_se18_ctsrx: qupv3_se18_ctsrx {
+		pins = "gpio68", "gpio71";
+		function = "qup18";
+		drive-strength = <2>;
+		bias-disable;
+	};
+
+	qupv3_se18_rts: qupv3_se18_rts {
+		pins = "gpio69";
+		function = "qup18";
+		drive-strength = <2>;
+		bias-pull-down;
+	};
+
+	qupv3_se18_tx: qupv3_se18_tx {
+		pins = "gpio70";
+		function = "qup18";
+		drive-strength = <2>;
+		bias-pull-up;
+	};
+
+	usb3phy_portselect_default: usb3phy_portselect_default {
+		pins = "gpio81";
+		function = "usb_phy";
+		drive-strength = <2>;
+		bias-disable;
+	};
+
+	usb3phy_portselect_gpio: usb3phy_portselect_gpio {
+		pins = "gpio81";
+		function = "gpio";
+		drive-strength = <2>;
+		bias-disable;
+	};
+
+	ext1_otg_default: ext1_otg_default {
+		pins = "gpio8";
+		function = "gpio";
+		drive-strength = <16>;
+		bias-pull-down;
+		input-enable;
+	};
+
+	cnss_wlan_en_active: cnss_wlan_en_active {
+		pins = "gpio64";
+		function = "gpio";
+		drive-strength = <16>;
+		output-high;
+		bias-pull-up;
+	};
+
+	cnss_wlan_en_sleep: cnss_wlan_en_sleep {
+		pins = "gpio64";
+		function = "gpio";
+		drive-strength = <2>;
+		output-low;
+		bias-pull-down;
+	};
+
+	bt_en_sleep: bt_en_sleep {
+		pins = "gpio65";
+		function = "gpio";
+		drive-strength = <2>;
+		output-low;
+		bias-pull-down;
+	};
+};
+
+&ufs_mem_hc {
+	reset-gpios = <&tlmm 203 GPIO_ACTIVE_LOW>;
+
+	vcc-supply = <&pm8350_l7>;
+	vcc-voltage-level = <2504000 2950000>;
+	vcc-max-microamp = <800000>;
+	vccq-supply = <&pm8350_l9>;
+	vccq-max-microamp = <900000>;
+
+	qcom,vddp-ref-clk-supply = <&pm8350_l9>;
+	qcom,vddp-ref-clk-max-microamp = <100>;
+
+	qcom,vddp-ref-clk-supply = <&pm8350_s12>;
+	qcom,vccq-parent-max-microamp = <210000>;
+
+	status = "okay";
+};
+
+&ufs_mem_phy {
+	vdda-phy-supply = <&pm8350_l5>;
+	vdda-phy-always-on;
+	vdda-max-microamp = <91600>;
+	vdda-pll-supply = <&pm8350_l6>;
+	vdda-pll-max-microamp = <19000>;
+
+	status = "okay";
+};
+
+&usb_1 {
+	/* Bug in interconnect driver breaks USB */
+	/delete-property/ interconnects;
+	/delete-property/ interconnect-names;
+
+	/*
+	 * USB3 is not tested (though it is enabled downstream) so limit to
+	 * high-speed for now.
+	 */
+	qcom,select-utmi-as-pipe-clk;
+
+	status = "okay";
+};
+
+&usb_1_dwc3 {
+	/* Mode switching is untested */
+	dr_mode = "peripheral";
+	maximum-speed = "high-speed";
+	phys = <&usb_1_hsphy>;
+	phy-names = "usb2-phy";
+};
+
+&usb_1_hsphy {
+	vdda-pll-supply = <&pm8350_l5>;
+	vdda18-supply = <&pm8350c_l1>;
+	vdda33-supply = <&pm8350_l2>;
+
+	status = "okay";
+};
+
+/* Enabling this is necessary only for displayport */
+&usb_1_qmpphy {
+	vdda-phy-supply = <&pm8350_l6>;
+	vdda-pll-supply = <&pm8350_l1>;
+
+	status = "okay";
+};
+
+&i2c2 {
+	clock-frequency = <100000>;
+	status = "okay";
+
+	bq27541: fuel-gauge@55 {
+		compatible = "ti,bq27541";
+		reg = <0x55>;
+		monitored-battery = <&bat>;
+	};
+};
+/* Crypto drivers currently fail & cause an XPU violation */
+&cryptobam {
+	status = "disabled";
+};
+
+&crypto {
+	status = "disabled";
+};
+
+&pcie0 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pcie0_default_state>;
+
+	perst-gpios = <&tlmm 94 GPIO_ACTIVE_HIGH>;
+	wake-gpios = <&tlmm 96 GPIO_ACTIVE_HIGH>;
+
+	status = "okay";
+};
+
+&pcie0_phy {
+	vdda-phy-supply = <&pm8350_l5>;
+	vdda-pll-supply = <&pm8350_l6>;
+
+	status = "okay";
+};
+
+&pcie1 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pcie1_default_state>;
+
+	perst-gpios = <&tlmm 97 GPIO_ACTIVE_HIGH>;
+	wake-gpios = <&tlmm 99 GPIO_ACTIVE_HIGH>;
+
+	status = "okay";
+};
+
+&pcie1_phy {
+	vdda-phy-supply = <&pm8350_l5>;
+	vdda-pll-supply = <&pm8350_l6>;
+
+	status = "okay";
+};
diff --git a/arch/arm64/boot/dts/qcom/sm8350-oneplus-lemonade.dts b/arch/arm64/boot/dts/qcom/sm8350-oneplus-lemonade.dts
new file mode 100644
index 000000000000..f2c27894f3c4
--- /dev/null
+++ b/arch/arm64/boot/dts/qcom/sm8350-oneplus-lemonade.dts
@@ -0,0 +1,82 @@ 
+// SPDX-License-Identifier: BSD-3-Clause
+/*
+ * Copyright (c) 2023 Igalia S.L.
+ * Authors:
+ *	Nia Espera <nespera@igalia.com>
+ */
+
+/dts-v1/;
+
+#include "sm8350-oneplus-common.dtsi"
+
+/ {
+	model = "OnePlus 9";
+	compatible = "oneplus,lemonade", "qcom,sm8350";
+};
+
+&i2c4 {
+	touchscreen@48 {
+		compatible = "samsung,s6sy761";
+		reg = <0x48>;
+		interrupts-extended = <&tlmm 23 0x2008>;
+
+		vdd-supply = <&pm8350c_l8>;
+		avdd-supply = <&pm8350c_l13>;
+
+		pinctrl-names = "default", "sleep";
+		pinctrl-0 = <&tp_rst_active &tp_irq_active>;
+		pinctrl-1 = <&tp_rst_suspend &tp_irq_suspend>;
+	};
+};
+
+&tlmm {
+	tp_rst_suspend: tp_rst_suspend {
+		pins = "gpio22";
+		function = "gpio";
+		drive-strength = <2>;
+		bias-pull-down;
+	};
+
+	tp_enable_2v8: tp_enable_2v8 {
+		pins = "gpio74";
+		function = "gpio";
+		drive-strength = <8>;
+		bias-pull-up;
+		output-high;
+	};
+
+	/* Modem antenna pins exclusive to lemonade */
+	rf_cable_ant1_active: rf_cable_ant1_active {
+		pins = "gpio27";
+		function = "gpio";
+		drive-strength = <2>;
+		bias-pull-up;
+	};
+	rf_cable_ant2_active: rf_cable_ant2_active {
+		pins = "gpio92";
+		function = "gpio";
+		drive-strength = <2>;
+		bias-pull-up;
+	};
+	rf_cable_ant3_active: rf_cable_ant3_active {
+		pins = "gpio44";
+		function = "gpio";
+		drive-strength = <2>;
+		bias-pull-up;
+	};
+	rf_cable_ant7_active: rf_cable_ant7_active {
+		pins = "gpio155";
+		function = "gpio";
+		drive-strength = <2>;
+		bias-pull-up;
+	};
+};
+
+&mpss {
+	pinctrl-names = "default";
+	pinctrl-1 = <&rf_cable_ant0_active
+		     &rf_cable_ant1_active
+		     &rf_cable_ant2_active
+		     &rf_cable_ant3_active
+		     &rf_cable_ant7_active>;
+};
diff --git a/arch/arm64/boot/dts/qcom/sm8350-oneplus-lemonadep.dts b/arch/arm64/boot/dts/qcom/sm8350-oneplus-lemonadep.dts
new file mode 100644
index 000000000000..de8597d26091
--- /dev/null
+++ b/arch/arm64/boot/dts/qcom/sm8350-oneplus-lemonadep.dts
@@ -0,0 +1,37 @@ 
+// SPDX-License-Identifier: BSD-3-Clause
+/*
+ * Copyright (c) 2023 Igalia S.L.
+ * Authors:
+ *	Nia Espera <nespera@igalia.com>
+ */
+
+/dts-v1/;
+
+#include "sm8350-oneplus-common.dtsi"
+
+/ {
+	model = "OnePlus 9 Pro";
+	compatible = "oneplus,lemonadep", "qcom,sm8350";
+};
+
+&tlmm {
+	tp_rst_suspend: tp_rst_suspend {
+		pins = "gpio22";
+		function = "gpio";
+		drive-strength = <8>;
+		bias-pull-down;
+	};
+
+	tp_enable_2v8: tp_enable_2v8 {
+		pins = "gpio31";
+		function = "gpio";
+		drive-strength = <8>;
+		bias-pull-up;
+		output-high;
+	};
+};
+
+&mpss {
+	pinctrl-names = "default";
+	pinctrl-1 = <&rf_cable_ant0_active>;
+};