On Sat, May 24, 2025 at 01:48:40PM +0200, Jens Glathe via B4 Relay wrote:
> From: Jens Glathe <[email protected]>
> 
> Device tree for the Lenovo Thinkbook 16 G7 QOY
> 
> The Laptop is a Snapdragon X1 / X1 Plus (Purwa) based device [1].
> 
> Supported features:
> 
> - USB type-c and type-a ports
> - Keyboard
> - Touchpad (all that are described in the dsdt)
> - Touchscreen (described in the dsdt, no known SKUss)
> - Display including PWM backlight control
> - PCIe devices
> - nvme
> - SDHC card reader
> - ath12k WCN7850 Wifi and Bluetooth
> - ADSP and CDSP
> - GPIO keys (Lid switch)
> - Sound via internal speakers / DMIC / USB / headphone jack
> - DP Altmode with 2 lanes (as all of these still do)
> - Integrated fingerprint reader (FPC)
> - Integrated UVC camera
> 
> Not supported yet:
> 
> - HDMI port.
> - EC and some fn hotkeys.
> 
> Limited support yet:
> 
> - SDHC card reader is based on the on-chip sdhc_2 controller, but the driver 
> from
> the Snapdragon Dev Kit is only a partial match. It can do normal slow sd 
> cards,
> but not UHS-I (SD104) and UHS-II.
> 
> - The GPU is not yet supported. Graphics is only software rendered.
> 
> This work was done without any schematics or non-public knowledge of the 
> device.
> So, it is based on the existing x1e device trees, dsdt analysis, using HWInfo
> ARM64, and pure guesswork. It has been confirmed, however, that the device 
> really
> has 4 NXP PTN3222 eUSB2 repeaters, one of which doesn't have a reset GPIO 
> (eusb5
> @43).
> 
> Signed-off-by: Jens Glathe <[email protected]>
> Co-developed by: Aleksandrs Vinarskis <[email protected]>
> ---
>  arch/arm64/boot/dts/qcom/Makefile                  |    3 +
>  arch/arm64/boot/dts/qcom/x1e80100-pmics.dtsi       |    2 +-
>  .../boot/dts/qcom/x1p42100-lenovo-thinkbook-16.dts | 1655 
> ++++++++++++++++++++
>  3 files changed, 1659 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/arm64/boot/dts/qcom/Makefile 
> b/arch/arm64/boot/dts/qcom/Makefile
> index 
> 669b888b27a1daa93ac15f47e8b9a302bb0922c2..aff4fe3e81ec0d6f6d52e2aa0da327b7576632d8
>  100644
> --- a/arch/arm64/boot/dts/qcom/Makefile
> +++ b/arch/arm64/boot/dts/qcom/Makefile
> @@ -327,3 +327,6 @@ x1e80100-qcp-el2-dtbs     := x1e80100-qcp.dtb x1-el2.dtbo
>  dtb-$(CONFIG_ARCH_QCOM)      += x1e80100-qcp.dtb x1e80100-qcp-el2.dtb
>  x1p42100-crd-el2-dtbs        := x1p42100-crd.dtb x1-el2.dtbo
>  dtb-$(CONFIG_ARCH_QCOM)      += x1p42100-crd.dtb x1p42100-crd-el2.dtb
> +x1p42100-lenovo-thinkbook-16-el2-dtbs        := 
> x1p42100-lenovo-thinkbook-16.dtb x1-el2.dtbo
> +dtb-$(CONFIG_ARCH_QCOM)      += x1p42100-lenovo-thinkbook-16.dtb 
> x1p42100-lenovo-thinkbook-16-el2.dtb
> +

No need for an extra empty line.

> diff --git a/arch/arm64/boot/dts/qcom/x1e80100-pmics.dtsi 
> b/arch/arm64/boot/dts/qcom/x1e80100-pmics.dtsi
> index 
> c02fd4d15c9649c222caaafa5ed2c777a10fb4f5..551b392eca4ef3b6041e03ad1385fef11cec1690
>  100644
> --- a/arch/arm64/boot/dts/qcom/x1e80100-pmics.dtsi
> +++ b/arch/arm64/boot/dts/qcom/x1e80100-pmics.dtsi
> @@ -170,7 +170,7 @@ trip1 {
>                       };
>               };
>  
> -             pm8010-thermal {
> +             pm8010_thermal: pm8010-thermal {
>                       polling-delay-passive = <100>;
>  
>                       thermal-sensors = <&pm8010_temp_alarm>;
> diff --git a/arch/arm64/boot/dts/qcom/x1p42100-lenovo-thinkbook-16.dts 
> b/arch/arm64/boot/dts/qcom/x1p42100-lenovo-thinkbook-16.dts
> new file mode 100644
> index 
> 0000000000000000000000000000000000000000..7089219ed08c1c4a60cc007f9d043a34a8071b4f
> --- /dev/null
> +++ b/arch/arm64/boot/dts/qcom/x1p42100-lenovo-thinkbook-16.dts
> @@ -0,0 +1,1655 @@
> +// SPDX-License-Identifier: BSD-3-Clause
> +/*
> + * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
> + * Copyright (c) 2024, Linaro Limited
> + * Copyright (c) 2025, Jens Glathe
> + */
> +
> +/dts-v1/;
> +
> +#include <dt-bindings/gpio/gpio.h>
> +#include <dt-bindings/input/gpio-keys.h>
> +#include <dt-bindings/input/input.h>
> +#include <dt-bindings/pinctrl/qcom,pmic-gpio.h>
> +#include <dt-bindings/regulator/qcom,rpmh-regulator.h>
> +
> +#include "x1p42100.dtsi"
> +#include "x1e80100-pmics.dtsi"
> +
> +/delete-node/ &pmc8380_6;
> +/delete-node/ &pmc8380_6_thermal;
> +/delete-node/ &pm8010;
> +/delete-node/ &pm8010_thermal;
> +
> +/ {
> +     model = "Lenovo ThinkBook 16 Gen 7 QOY";
> +     compatible = "lenovo,thinkbook-16", "qcom,x1p42100";
> +     chassis-type = "laptop";
> +
> +     aliases {
> +             serial0 = &uart21;
> +             serial1 = &uart14;
> +     };
> +
> +     wcd938x: audio-codec {
> +             compatible = "qcom,wcd9385-codec";
> +
> +             pinctrl-names = "default";
> +             pinctrl-0 = <&wcd_default>;
> +
> +             qcom,micbias1-microvolt = <1800000>;
> +             qcom,micbias2-microvolt = <1800000>;
> +             qcom,micbias3-microvolt = <1800000>;
> +             qcom,micbias4-microvolt = <1800000>;
> +             qcom,mbhc-buttons-vthreshold-microvolt = <75000 150000 237000 
> 500000 500000 500000 500000 500000>;
> +             qcom,mbhc-headset-vthreshold-microvolt = <1700000>;
> +             qcom,mbhc-headphone-vthreshold-microvolt = <50000>;
> +             qcom,rx-device = <&wcd_rx>;
> +             qcom,tx-device = <&wcd_tx>;
> +
> +             reset-gpios = <&tlmm 191 GPIO_ACTIVE_LOW>;
> +
> +             vdd-buck-supply = <&vreg_l15b_1p8>;
> +             vdd-rxtx-supply = <&vreg_l15b_1p8>;
> +             vdd-io-supply = <&vreg_l15b_1p8>;
> +             vdd-mic-bias-supply = <&vreg_bob1>;
> +
> +             #sound-dai-cells = <1>;
> +     };
> +
> +     backlight: backlight {
> +             compatible = "pwm-backlight";
> +             pwms = <&pm8550_pwm 3 500000>;
> +
> +             power-supply = <&vreg_edp_bl>;
> +     };
> +
> +     camera {
> +             compatible = "usb5986,1198";
> +
> +             vdd-supply = <&vreg_cam_5p0>;
> +
> +             status = "okay";

This is default, please drop.

> +     };

Camera isn't randomly wire to the board, it is on the USB bus. Please
follow DT bindings and put it accordingly, describing topology of the
bus.

> +
> +     gpio-keys {
> +             compatible = "gpio-keys";
> +
> +             pinctrl-0 = <&hall_int_n_default>;
> +             pinctrl-names = "default";
> +
> +             switch-lid {
> +                     gpios = <&tlmm 92 GPIO_ACTIVE_LOW>;
> +                     linux,input-type = <EV_SW>;
> +                     linux,code = <SW_LID>;
> +                     wakeup-source;
> +                     wakeup-event-action = <EV_ACT_DEASSERTED>;
> +             };
> +     };
> +
> +     pmic-glink {
> +             compatible = "qcom,x1e80100-pmic-glink",
> +                             "qcom,sm8550-pmic-glink",
> +                             "qcom,pmic-glink";

Align vertically on the double-quote

> +             #address-cells = <1>;
> +             #size-cells = <0>;
> +             orientation-gpios = <&tlmm 121 GPIO_ACTIVE_HIGH>,
> +                             <&tlmm 123 GPIO_ACTIVE_HIGH>;

And such lists should be aligned on the opening angle bracket.

> +
> +             /* Display-adjacent port */
> +             connector@0 {
> +                     compatible = "usb-c-connector";
> +                     reg = <0>;
> +                     power-role = "dual";
> +                     data-role = "dual";

Is it actually dual-role? What does UCSI report for it?

> +
> +                     ports {
> +                             #address-cells = <1>;
> +                             #size-cells = <0>;
> +
> +                             port@0 {
> +                                     reg = <0>;
> +
> +                                     pmic_glink_ss0_hs_in: endpoint {
> +                                             remote-endpoint = 
> <&usb_1_ss0_dwc3_hs>;
> +                                     };
> +                             };
> +
> +                             port@1 {
> +                                     reg = <1>;
> +
> +                                     pmic_glink_ss0_ss_in: endpoint {
> +                                             remote-endpoint = 
> <&usb_1_ss0_qmpphy_out>;
> +                                     };
> +                             };
> +
> +                             port@2 {
> +                                     reg = <2>;
> +
> +                                     pmic_glink_ss0_sbu: endpoint {
> +                                             remote-endpoint = 
> <&usb_1_ss0_sbu_mux>;
> +                                     };
> +                             };
> +                     };
> +             };
> +
> +             /* User-adjacent port */
> +             connector@1 {
> +                     compatible = "usb-c-connector";
> +                     reg = <1>;
> +                     power-role = "dual";
> +                     data-role = "dual";
> +
> +                     ports {
> +                             #address-cells = <1>;
> +                             #size-cells = <0>;
> +
> +                             port@0 {
> +                                     reg = <0>;
> +
> +                                     pmic_glink_ss1_hs_in: endpoint {
> +                                             remote-endpoint = 
> <&usb_1_ss1_dwc3_hs>;
> +                                     };
> +                             };
> +
> +                             port@1 {
> +                                     reg = <1>;
> +
> +                                     pmic_glink_ss1_ss_in: endpoint {
> +                                             remote-endpoint = 
> <&usb_1_ss1_qmpphy_out>;
> +                                     };
> +                             };
> +
> +                             port@2 {
> +                                     reg = <2>;
> +
> +                                     pmic_glink_ss1_sbu: endpoint {
> +                                             remote-endpoint = 
> <&usb_1_ss1_sbu_mux>;
> +                                     };
> +                             };
> +                     };
> +             };
> +     };
> +
> +     reserved-memory {
> +             linux,cma {

What for?

> +                     compatible = "shared-dma-pool";
> +                     size = <0x0 0x8000000>;
> +                     reusable;
> +                     linux,cma-default;
> +             };
> +     };
> +

[...]

> +
> +&gpu {
> +     status = "okay";

I think that you wrote that GPU isn't supported (yet).

> +
> +     zap-shader {
> +             firmware-name = "qcom/x1e80100/LENOVO/21NH/qcdxkmsucpurwa.mbn";
> +     };
> +};
> +
> +&i2c2 {
> +     clock-frequency = <400000>;
> +
> +     pinctrl-0 = <&qup_i2c2_data_clk>, <&tpad_default>, <&kybd_default>;

If keyboard doesn't share pinctrl with other devices, you can move it to the 
keyboard DT node.

> +     pinctrl-names = "default";
> +     status = "okay";
> +
> +     /* ELAN06FA */
> +     touchpad@15 {
> +             compatible = "hid-over-i2c";
> +             reg = <0x15>;
> +
> +             hid-descr-addr = <0x1>;
> +             interrupts-extended = <&tlmm 3 IRQ_TYPE_LEVEL_LOW>;
> +
> +             vdd-supply = <&vreg_misc_3p3>;
> +             vddl-supply = <&vreg_l12b_1p2>;
> +
> +             wakeup-source;
> +     };
> +
> +     /* CIRQ1080 or SYNA2BA6 */
> +     touchpad@2c {
> +             compatible = "hid-over-i2c";
> +             reg = <0x2c>;
> +
> +             hid-descr-addr = <0x20>;
> +             interrupts-extended = <&tlmm 3 IRQ_TYPE_LEVEL_LOW>;
> +
> +             vdd-supply = <&vreg_misc_3p3>;
> +             vddl-supply = <&vreg_l12b_1p2>;
> +
> +             wakeup-source;
> +     };
> +
> +     /* FTCS0038 */
> +     touchpad@38 {
> +             compatible = "hid-over-i2c";
> +             reg = <0x38>;
> +
> +             hid-descr-addr = <0x1>;
> +             interrupts-extended = <&tlmm 3 IRQ_TYPE_LEVEL_LOW>;
> +
> +             vdd-supply = <&vreg_misc_3p3>;
> +             vddl-supply = <&vreg_l12b_1p2>;
> +
> +             wakeup-source;
> +     };
> +
> +     keyboard@3a {
> +             compatible = "hid-over-i2c";
> +             reg = <0x3a>;
> +
> +             hid-descr-addr = <0x1>;
> +             interrupts-extended = <&tlmm 67 IRQ_TYPE_LEVEL_LOW>;
> +
> +             vdd-supply = <&vreg_misc_3p3>;
> +             vddl-supply = <&vreg_l12b_1p2>;
> +
> +             wakeup-source;
> +     };
> +
> +     /* GXTP5100 */
> +     touchpad@5d {
> +             compatible = "hid-over-i2c";
> +             reg = <0x5d>;
> +
> +             hid-descr-addr = <0x1>;
> +             interrupts-extended = <&tlmm 3 IRQ_TYPE_LEVEL_LOW>;
> +
> +             vdd-supply = <&vreg_misc_3p3>;
> +             vddl-supply = <&vreg_l12b_1p2>;
> +
> +             wakeup-source;
> +     };
> +};
> +
> +&i2c5 {
> +     clock-frequency = <400000>;
> +
> +     status = "okay";
> +
> +     eusb5_repeater: redriver@43 {
> +             compatible = "nxp,ptn3222";
> +             reg = <0x43>;
> +             #phy-cells = <0>;
> +
> +             vdd3v3-supply = <&vreg_l13b_3p0>;
> +             vdd1v8-supply = <&vreg_l4b_1p8>;
> +     };
> +
> +     eusb3_repeater: redriver@47 {
> +             compatible = "nxp,ptn3222";
> +             reg = <0x47>;
> +             #phy-cells = <0>;
> +
> +             vdd3v3-supply = <&vreg_l13b_3p0>;
> +             vdd1v8-supply = <&vreg_l4b_1p8>;
> +
> +             reset-gpios = <&tlmm 6 GPIO_ACTIVE_LOW>;
> +
> +             pinctrl-0 = <&eusb3_reset_n>;
> +             pinctrl-names = "default";
> +     };
> +
> +     eusb9_repeater: redriver@4b {
> +             compatible = "nxp,ptn3222";
> +             reg = <0x4b>;
> +             #phy-cells = <0>;
> +
> +             vdd3v3-supply = <&vreg_l13b_3p0>;
> +             vdd1v8-supply = <&vreg_l4b_1p8>;
> +
> +             reset-gpios = <&tlmm 7 GPIO_ACTIVE_LOW>;
> +
> +             pinctrl-0 = <&eusb9_reset_n>;
> +             pinctrl-names = "default";
> +     };
> +
> +     eusb6_repeater: redriver@4f {
> +             compatible = "nxp,ptn3222";
> +             reg = <0x4f>;
> +             #phy-cells = <0>;
> +
> +             vdd3v3-supply = <&vreg_l13b_3p0>;
> +             vdd1v8-supply = <&vreg_l4b_1p8>;
> +
> +             reset-gpios = <&tlmm 184 GPIO_ACTIVE_LOW>;
> +
> +             pinctrl-0 = <&eusb6_reset_n>;
> +             pinctrl-names = "default";
> +     };
> +};
> +
> +&i2c8 {
> +     clock-frequency = <400000>;
> +
> +     status = "okay";
> +
> +     /* ILIT2911 or GTCH1563 */
> +     touchscreen@10 {
> +             compatible = "hid-over-i2c";
> +             reg = <0x10>;
> +
> +             hid-descr-addr = <0x1>;
> +             interrupts-extended = <&tlmm 51 IRQ_TYPE_LEVEL_LOW>;
> +
> +             vdd-supply = <&vreg_misc_3p3>;
> +             vddl-supply = <&vreg_l15b_1p8>;
> +
> +             pinctrl-0 = <&ts0_default>;
> +             pinctrl-names = "default";
> +     };
> +};
> +
> +&lpass_tlmm {
> +     spkr_01_sd_n_active: spkr-01-sd-n-active-state {
> +             pins = "gpio12";
> +             function = "gpio";
> +             drive-strength = <16>;
> +             bias-disable;
> +             output-low;
> +     };
> +};
> +
> +&lpass_vamacro {
> +     pinctrl-0 = <&dmic01_default>, <&dmic23_default>;
> +     pinctrl-names = "default";
> +
> +     vdd-micb-supply = <&vreg_l1b_1p8>;
> +     qcom,dmic-sample-rate = <4800000>;
> +};
> +
> +&mdss {
> +     status = "okay";
> +};
> +
> +&mdss_dp0 {
> +     status = "okay";
> +};
> +
> +&mdss_dp0_out {
> +     data-lanes = <0 1>;
> +     link-frequencies = /bits/ 64 <1620000000 2700000000 5400000000 
> 8100000000>;
> +};
> +
> +&mdss_dp1 {
> +     status = "okay";
> +};
> +
> +&mdss_dp1_out {
> +     data-lanes = <0 1>;
> +     link-frequencies = /bits/ 64 <1620000000 2700000000 5400000000 
> 8100000000>;
> +};
> +
> +&mdss_dp3 {
> +     /delete-property/ #sound-dai-cells;
> +
> +     status = "okay";
> +
> +     aux-bus {
> +             panel {
> +                     compatible = "edp-panel";
> +
> +                     backlight = <&backlight>;
> +
> +                     enable-gpios = <&pmc8380_3_gpios 4 GPIO_ACTIVE_HIGH>;
> +                     pinctrl-0 = <&edp_bl_en>;
> +                     pinctrl-names = "default";
> +
> +                     power-supply = <&vreg_edp_3p3>;
> +
> +                     port {
> +                             edp_panel_in: endpoint {
> +                                     remote-endpoint = <&mdss_dp3_out>;
> +                             };
> +                     };
> +             };
> +     };
> +
> +     ports {
> +             port@1 {
> +                     reg = <1>;
> +
> +                     mdss_dp3_out: endpoint {
> +                             data-lanes = <0 1 2 3>;
> +                             link-frequencies = /bits/ 64 <1620000000 
> 2700000000 5400000000 8100000000>;
> +
> +                             remote-endpoint = <&edp_panel_in>;
> +                     };
> +             };
> +     };
> +};
> +
> +&mdss_dp3_phy {

What about DP0 / DP1 PHYs?

> +     vdda-phy-supply = <&vreg_l3j_0p8>;
> +     vdda-pll-supply = <&vreg_l2j_1p2>;
> +
> +     status = "okay";
> +};
> +

[...]

> +
> +&qupv3_0 {
> +     status = "okay";
> +};
> +
> +&qupv3_1 {
> +     status = "okay";
> +};
> +
> +&qupv3_2 {
> +     status = "okay";
> +};

Don't you also wan to enable corresponding GPI DMA devices?

> +
> +&remoteproc_adsp {
> +     firmware-name = "qcom/x1e80100/LENOVO/21NH/qcadsp8380.mbn",
> +                     "qcom/x1e80100/LENOVO/21NH/adsp_dtbs.elf";
> +
> +     status = "okay";
> +};
> +
> +&remoteproc_cdsp {
> +     firmware-name = "qcom/x1e80100/LENOVO/21NH/qccdsp8380.mbn",
> +                     "qcom/x1e80100/LENOVO/21NH/cdsp_dtbs.elf";
> +
> +     status = "okay";
> +};
> +
> +&sdhc_2 {
> +     cd-gpios = <&tlmm 71 GPIO_ACTIVE_LOW>;
> +     pinctrl-0 = <&sdc2_default &sdc2_card_det_n>;
> +     pinctrl-1 = <&sdc2_sleep &sdc2_card_det_n>;
> +     pinctrl-names = "default", "sleep";
> +     vmmc-supply = <&vreg_l9b_2p9>;
> +     vqmmc-supply = <&vreg_l6b_1p8>;
> +     status = "okay";
> +};
> +
> +&smb2360_0 {
> +     status = "okay";
> +};
> +
> +&smb2360_0_eusb2_repeater {
> +     vdd18-supply = <&vreg_l3d_1p8>;
> +     vdd3-supply = <&vreg_l2b_3p0>;
> +};
> +
> +&smb2360_1 {
> +     status = "okay";
> +};
> +
> +&smb2360_1_eusb2_repeater {
> +     vdd18-supply = <&vreg_l3d_1p8>;
> +     vdd3-supply = <&vreg_l14b_3p0>;
> +};
> +
> +&swr0 {
> +     status = "okay";
> +
> +     pinctrl-0 = <&wsa_swr_active>, <&spkr_01_sd_n_active>;
> +     pinctrl-names = "default";
> +
> +     /* WSA8845, Left Speaker */
> +     left_spkr: speaker@0,0 {
> +             compatible = "sdw20217020400";
> +             reg = <0 0>;
> +             reset-gpios = <&lpass_tlmm 12 GPIO_ACTIVE_LOW>;
> +             #sound-dai-cells = <0>;
> +             sound-name-prefix = "SpkrLeft";
> +             vdd-1p8-supply = <&vreg_l15b_1p8>;
> +             vdd-io-supply = <&vreg_l12b_1p2>;
> +             qcom,port-mapping = <1 2 3 7 10 13>;
> +     };
> +
> +     /* WSA8845, Right Speaker */
> +     right_spkr: speaker@0,1 {
> +             compatible = "sdw20217020400";
> +             reg = <0 1>;
> +             reset-gpios = <&lpass_tlmm 12 GPIO_ACTIVE_LOW>;
> +             #sound-dai-cells = <0>;
> +             sound-name-prefix = "SpkrRight";
> +             vdd-1p8-supply = <&vreg_l15b_1p8>;
> +             vdd-io-supply = <&vreg_l12b_1p2>;
> +             qcom,port-mapping = <4 5 6 7 11 13>;
> +     };
> +};
> +
> +&swr1 {
> +     status = "okay";
> +
> +     /* WCD9385 RX */
> +     wcd_rx: codec@0,4 {
> +             compatible = "sdw20217010d00";
> +             reg = <0 4>;
> +             qcom,rx-port-mapping = <1 2 3 4 5>;
> +     };
> +};
> +
> +&swr2 {
> +     status = "okay";
> +
> +     /* WCD9385 TX */
> +     wcd_tx: codec@0,3 {
> +             compatible = "sdw20217010d00";
> +             reg = <0 3>;
> +             qcom,tx-port-mapping = <2 2 3 4>;
> +     };
> +};
> +
> +&tlmm {
> +     gpio-reserved-ranges = <34 2>, /* Unused */
> +             <72 2>, /* Secure EC I2C connection (?) */
> +             <238 1>; /* UFS Reset */
> +
> +     cam_reg_en: cam-reg-en-state {
> +             pins = "gpio44";
> +             function = "gpio";
> +             drive-strength = <16>;
> +             bias-disable;
> +     };
> +
> +     eusb3_reset_n: eusb3-reset-n-state {
> +             pins = "gpio6";
> +             function = "gpio";
> +             drive-strength = <2>;
> +             bias-disable;
> +             output-low;
> +     };
> +
> +     eusb6_reset_n: eusb6-reset-n-state {
> +             pins = "gpio184";
> +             function = "gpio";
> +             drive-strength = <2>;
> +             bias-disable;
> +             output-low;
> +     };
> +
> +     eusb9_reset_n: eusb9-reset-n-state {
> +             pins = "gpio7";
> +             function = "gpio";
> +             drive-strength = <2>;
> +             bias-disable;
> +             output-low;
> +     };
> +
> +     edp_reg_en: edp-reg-en-state {
> +             pins = "gpio70";
> +             function = "gpio";
> +             drive-strength = <16>;
> +             bias-disable;
> +     };
> +
> +     hall_int_n_default: hall-int-n-state {
> +             pins = "gpio92";
> +             function = "gpio";
> +             bias-disable;
> +     };
> +
> +     kybd_default: kybd-default-state {
> +             pins = "gpio67";
> +             function = "gpio";
> +             bias-disable;
> +     };
> +
> +     nvme_reg_en: nvme-reg-en-state {
> +             pins = "gpio18";
> +             function = "gpio";
> +             drive-strength = <2>;
> +             bias-disable;
> +     };
> +
> +     pcie4_default: pcie4-default-state {
> +             clkreq-n-pins {
> +                     pins = "gpio147";
> +                     function = "pcie4_clk";
> +                     drive-strength = <2>;
> +                     bias-pull-up;
> +             };
> +
> +             perst-n-pins {
> +                     pins = "gpio146";
> +                     function = "gpio";
> +                     drive-strength = <2>;
> +                     bias-disable;
> +             };
> +
> +             wake-n-pins {
> +                     pins = "gpio148";
> +                     function = "gpio";
> +                     drive-strength = <2>;
> +                     bias-pull-up;
> +             };
> +     };
> +
> +     pcie6a_default: pcie6a-default-state {
> +             clkreq-n-pins {
> +                     pins = "gpio153";
> +                     function = "pcie6a_clk";
> +                     drive-strength = <2>;
> +                     bias-pull-up;
> +             };
> +
> +             perst-n-pins {
> +                     pins = "gpio152";
> +                     function = "gpio";
> +                     drive-strength = <2>;
> +                     bias-disable;
> +             };
> +
> +             wake-n-pins {
> +                     pins = "gpio154";
> +                     function = "gpio";
> +                     drive-strength = <2>;
> +                     bias-pull-up;
> +             };
> +     };
> +
> +     sdc2_card_det_n: sdc2-card-det-state {
> +             pins = "gpio71";
> +             function = "gpio";
> +             drive-strength = <2>;
> +             bias-pull-up;
> +     };
> +
> +     tpad_default: tpad-default-state {
> +             pins = "gpio3";
> +             function = "gpio";
> +             bias-pull-up;
> +     };
> +
> +     ts0_default: ts0-default-state {
> +             int-n-pins {
> +                     pins = "gpio51";
> +                     function = "gpio";
> +                     bias-disable;
> +             };
> +
> +             reset-n-pins {
> +                     pins = "gpio48";
> +                     function = "gpio";
> +                     output-high;
> +                     drive-strength = <16>;
> +             };
> +     };
> +
> +     usb_1_ss0_sbu_default: usb-1-ss0-sbu-state {
> +             mode-pins {
> +                     pins = "gpio166";
> +                     function = "gpio";
> +                     bias-disable;
> +                     drive-strength = <2>;
> +                     output-high;
> +             };
> +
> +             oe-n-pins {
> +                     pins = "gpio168";
> +                     function = "gpio";
> +                     bias-disable;
> +                     drive-strength = <2>;
> +             };
> +
> +             sel-pins {
> +                     pins = "gpio167";
> +                     function = "gpio";
> +                     bias-disable;
> +                     drive-strength = <2>;
> +             };
> +
> +     };
> +
> +     usb_1_ss1_sbu_default: usb-1-ss1-sbu-state {
> +             mode-pins {
> +                     pins = "gpio177";
> +                     function = "gpio";
> +                     bias-disable;
> +                     drive-strength = <2>;
> +                     output-high;
> +             };
> +
> +             oe-n-pins {
> +                     pins = "gpio179";
> +                     function = "gpio";
> +                     bias-disable;
> +                     drive-strength = <2>;
> +             };
> +
> +             sel-pins {
> +                     pins = "gpio178";
> +                     function = "gpio";
> +                     bias-disable;
> +                     drive-strength = <2>;
> +             };
> +     };
> +
> +     wcd_default: wcd-reset-n-active-state {
> +             pins = "gpio191";
> +             function = "gpio";
> +             drive-strength = <16>;
> +             bias-disable;
> +             output-low;
> +     };
> +
> +     wcn_bt_en: wcn-bt-en-state {
> +             pins = "gpio116";
> +             function = "gpio";
> +             drive-strength = <16>;
> +             output-low;
> +             bias-pull-down;
> +     };
> +
> +     wcn_sw_en: wcn-sw-en-state {
> +             pins = "gpio214";
> +             function = "gpio";
> +             drive-strength = <16>;
> +             bias-disable;
> +     };
> +
> +     wcn_wlan_en: wcn-wlan-en-state {
> +             pins = "gpio117";
> +             function = "gpio";
> +             drive-strength = <16>;
> +             bias-disable;
> +     };
> +};
> +
> +&uart14 {
> +     status = "okay";
> +
> +     bluetooth {
> +             compatible = "qcom,wcn7850-bt";
> +             max-speed = <3200000>;
> +
> +             vddaon-supply = <&vreg_pmu_aon_0p59>;
> +             vddwlcx-supply = <&vreg_pmu_wlcx_0p8>;
> +             vddwlmx-supply = <&vreg_pmu_wlmx_0p85>;
> +             vddrfacmn-supply = <&vreg_pmu_rfa_cmn>;
> +             vddrfa0p8-supply = <&vreg_pmu_rfa_0p8>;
> +             vddrfa1p2-supply = <&vreg_pmu_rfa_1p2>;
> +             vddrfa1p8-supply = <&vreg_pmu_rfa_1p8>;
> +     };
> +};
> +
> +&usb_1_ss0_hsphy {
> +     vdd-supply = <&vreg_l3j_0p8>;
> +     vdda12-supply = <&vreg_l2j_1p2>;
> +
> +     phys = <&smb2360_0_eusb2_repeater>;
> +
> +     status = "okay";
> +};
> +
> +&usb_1_ss0_qmpphy {
> +     vdda-phy-supply = <&vreg_l3e_1p2>;
> +     vdda-pll-supply = <&vreg_l1j_0p8>;
> +
> +     status = "okay";
> +};
> +
> +&usb_1_ss0 {
> +     status = "okay";
> +};
> +
> +&usb_1_ss0_dwc3 {
> +     dr_mode = "host";

So pmic-glink declares corresponding port as dual-role, but USB
controller is host-only?

> +};
> +
> +&usb_1_ss0_dwc3_hs {
> +     remote-endpoint = <&pmic_glink_ss0_hs_in>;
> +};
> +
> +&usb_1_ss0_qmpphy_out {
> +     remote-endpoint = <&pmic_glink_ss0_ss_in>;
> +};
> +
> +&usb_1_ss1_hsphy {
> +     vdd-supply = <&vreg_l3j_0p8>;
> +     vdda12-supply = <&vreg_l2j_1p2>;
> +
> +     phys = <&smb2360_1_eusb2_repeater>;
> +
> +     status = "okay";
> +};
> +
> +&usb_1_ss1_qmpphy {
> +     vdda-phy-supply = <&vreg_l2j_1p2>;
> +     vdda-pll-supply = <&vreg_l2d_0p9>;
> +
> +     status = "okay";
> +};
> +
> +&usb_1_ss1 {
> +     status = "okay";
> +};
> +
> +&usb_1_ss1_dwc3 {
> +     dr_mode = "host";

And this one...

> +};
> +
> +&usb_1_ss1_dwc3_hs {
> +     remote-endpoint = <&pmic_glink_ss1_hs_in>;
> +};
> +
> +&usb_1_ss1_qmpphy_out {
> +     remote-endpoint = <&pmic_glink_ss1_ss_in>;
> +};
> +
> +&usb_1_ss2 {
> +     status = "okay";
> +};
> +
> +&usb_1_ss2_dwc3 {
> +     dr_mode = "host";
> +     maximum-speed = "high-speed";
> +     phys = <&usb_1_ss2_hsphy>;
> +     phy-names = "usb2-phy";
> +};
> +
> +&usb_1_ss2_hsphy {
> +     vdd-supply = <&vreg_l3j_0p8>;
> +     vdda12-supply = <&vreg_l2j_1p2>;
> +
> +     phys = <&eusb5_repeater>;
> +
> +     status = "okay";
> +};
> +
> +&usb_2 {
> +     status = "okay";
> +};
> +
> +&usb_2_dwc3 {
> +     dr_mode = "host";
> +};
> +
> +&usb_2_hsphy {
> +     vdd-supply = <&vreg_l2e_0p8>;
> +     vdda12-supply = <&vreg_l3e_1p2>;
> +
> +     phys = <&eusb9_repeater>;
> +
> +     status = "okay";
> +};
> +
> +&usb_mp {
> +     status = "okay";
> +};
> +
> +&usb_mp_hsphy0 {
> +     vdd-supply = <&vreg_l2e_0p8>;
> +     vdda12-supply = <&vreg_l3e_1p2>;
> +
> +     phys = <&eusb6_repeater>;
> +
> +     status = "okay";
> +};
> +
> +&usb_mp_qmpphy0 {
> +     vdda-phy-supply = <&vreg_l3e_1p2>;
> +     vdda-pll-supply = <&vreg_l3c_0p8>;
> +
> +     status = "okay";
> +};
> +
> +&usb_mp_hsphy1 {
> +     vdd-supply = <&vreg_l2e_0p8>;
> +     vdda12-supply = <&vreg_l3e_1p2>;
> +
> +     phys = <&eusb3_repeater>;
> +
> +     status = "okay";
> +};
> +
> +&usb_mp_qmpphy1 {
> +     vdda-phy-supply = <&vreg_l3e_1p2>;
> +     vdda-pll-supply = <&vreg_l3c_0p8>;
> +
> +     status = "okay";
> +};
> 
> -- 
> 2.48.1
> 
> 

-- 
With best wishes
Dmitry

Reply via email to