On Sat, 24 May 2025 at 17:33, Dmitry Baryshkov
<[email protected]> wrote:
>
> 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).
GPU is not supported on SoC level (x1p42100/purwa), not device
specific. The idea I suggested to Jens was to mimic Asus Zenbook A14
as per discussion abou purwa GPU and purwa firmware in general [1]: to
already include correct filename and firmware path (since these are
known) such that once SoC lands the GPU support laptops with that SoC
will gain GPU support 'automatically'. As nothing consumes this
property (on purwa) just yet, adding it already does not cause any
harm.
Jens, as per the same discussion [1] the path is wrong here,
s/x1e80100/x1p42100/ for all purwa-specifc firmware. Unless the
decision about firmware paths was re-evaluated in Linaro/Qcom?
>
> > +
> > + 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";
> > +};
And here, s/x1e80100/x1p42100/
> > +
> > +&remoteproc_cdsp {
> > + firmware-name = "qcom/x1e80100/LENOVO/21NH/qccdsp8380.mbn",
> > + "qcom/x1e80100/LENOVO/21NH/cdsp_dtbs.elf";
> > +
> > + status = "okay";
> > +};
And here, s/x1e80100/x1p42100/
Regards,
Alex
[1]
https://lore.kernel.org/all/[email protected]/
> > +
> > +&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