On 27.03.2023 07:43, Vinod Koul wrote: > On 25-03-23, 13:40, Konrad Dybcio wrote: >> >> >> On 25.03.2023 13:24, Vinod Koul wrote: >>> From: Bjorn Andersson <bjorn.andersson@xxxxxxxxxx> >>> >>> Introduce support for the Lenovo Flex 5G laptop, built on the Qualcomm >>> SC8180X platform. Supported peripherals includes keyboard, touchpad, >>> UFS storage, external USB and WiFi. >>> >>> Signed-off-by: Bjorn Andersson <bjorn.andersson@xxxxxxxxxx> >>> Signed-off-by: Vinod Koul <vkoul@xxxxxxxxxx> >>> --- >>> arch/arm64/boot/dts/qcom/Makefile | 1 + >>> .../boot/dts/qcom/sc8180x-lenovo-flex-5g.dts | 590 ++++++++++++++++++ >>> 2 files changed, 591 insertions(+) >>> create mode 100644 arch/arm64/boot/dts/qcom/sc8180x-lenovo-flex-5g.dts >>> >>> diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile >>> index fdce44a7a902..f096561f711e 100644 >>> --- a/arch/arm64/boot/dts/qcom/Makefile >>> +++ b/arch/arm64/boot/dts/qcom/Makefile >>> @@ -141,6 +141,7 @@ dtb-$(CONFIG_ARCH_QCOM) += sc7280-herobrine-zombie-nvme-lte.dtb >>> dtb-$(CONFIG_ARCH_QCOM) += sc7280-idp.dtb >>> dtb-$(CONFIG_ARCH_QCOM) += sc7280-idp2.dtb >>> dtb-$(CONFIG_ARCH_QCOM) += sc7280-crd-r3.dtb >>> +dtb-$(CONFIG_ARCH_QCOM) += sc8180x-lenovo-flex-5g.dtb >>> dtb-$(CONFIG_ARCH_QCOM) += sc8180x-primus.dtb >>> dtb-$(CONFIG_ARCH_QCOM) += sc8280xp-crd.dtb >>> dtb-$(CONFIG_ARCH_QCOM) += sc8280xp-lenovo-thinkpad-x13s.dtb >>> diff --git a/arch/arm64/boot/dts/qcom/sc8180x-lenovo-flex-5g.dts b/arch/arm64/boot/dts/qcom/sc8180x-lenovo-flex-5g.dts >>> new file mode 100644 >>> index 000000000000..76dad608fb85 >>> --- /dev/null >>> +++ b/arch/arm64/boot/dts/qcom/sc8180x-lenovo-flex-5g.dts >>> @@ -0,0 +1,590 @@ >>> +// SPDX-License-Identifier: BSD-3-Clause >>> +/* >>> + * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved. >>> + * Copyright (c) 2020-2023, Linaro Limited >>> + */ >>> + >>> +/dts-v1/; >>> + >>> +#include <dt-bindings/gpio/gpio.h> >>> +#include <dt-bindings/input/gpio-keys.h> >>> +#include <dt-bindings/input/input.h> >>> +#include <dt-bindings/regulator/qcom,rpmh-regulator.h> >>> +#include "sc8180x.dtsi" >>> +#include "sc8180x-pmics.dtsi" >>> + >>> +/ { >>> + model = "Lenovo Flex 5G"; >>> + compatible = "lenovo,flex-5g", "qcom,sc8180x"; >>> + >>> + aliases { >>> + serial0 = &uart13; >>> + }; >>> + >>> + backlight: backlight { >>> + compatible = "pwm-backlight"; >>> + pwms = <&pmc8180c_lpg 4 1000000>; >>> + enable-gpios = <&pmc8180c_gpios 8 GPIO_ACTIVE_HIGH>; >>> + >>> + pinctrl-names = "default"; >>> + pinctrl-0 = <&bl_pwm_default>; >>> + }; >>> + >>> + chosen { >>> + }; >> Unused, remove. > > ok > >> >>> + >>> + gpio-keys { >>> + compatible = "gpio-keys"; >>> + >>> + pinctrl-names = "default"; >>> + pinctrl-0 = <&hall_int_active_state>; >> property >> property-names > > ack here and everwhere else > >> >>> + >>> + lid { >>> + gpios = <&tlmm 121 GPIO_ACTIVE_LOW>; >>> + linux,input-type = <EV_SW>; >>> + linux,code = <SW_LID>; >>> + wakeup-source; >>> + wakeup-event-action = <EV_ACT_DEASSERTED>; >>> + }; >>> + }; >>> + >>> + reserved-memory { >>> + rmtfs_mem: rmtfs-region@85500000 { >>> + compatible = "qcom,rmtfs-mem"; >>> + reg = <0x0 0x85500000 0x0 0x200000>; >> You're using 0 and 0x0 in a mixed fashion. Please stick with one, >> preferably 0x0 everywhere. > > yep > >> >>> + no-map; >>> + >>> + qcom,client-id = <1>; >>> + qcom,vmid = <15>; >>> + }; >>> + >> [...] >> >>> + >>> +&dispcc { >>> + status = "okay"; >> Any reason for disabling dispcc by default? > > I think that is a good question. I would prefer disabling and enabling > in places it is required, we might have a headless system or a dev board > where we dont have display..? It's a double-edged sword: on one side we could disable clocks that were mistakenly enabled, but on the other hand we do keep some some clocks always-on within that driver.. Perhaps leave it on by default and shut it off per-board if need be. > >> >>> +}; >>> + >>> +&gpu { >>> + status = "okay"; >>> + >>> + zap-shader { >>> + memory-region = <&gpu_mem>; >>> + firmware-name = "qcom/sc8180x/qcdxkmsuc8180.mbn"; >>> + }; >>> +}; >>> + >>> +&i2c1 { >>> + clock-frequency = <100000>; >>> + >>> + pinctrl-names = "default"; >>> + pinctrl-0 = <&i2c1_active>, <&i2c1_hid_active>; >> property >> property-names >> >>> + >>> + status = "okay"; >>> + >>> + hid@10 { >>> + compatible = "hid-over-i2c"; >>> + reg = <0x10>; >>> + hid-descr-addr = <0x1>; >>> + >>> + interrupts-extended = <&tlmm 122 IRQ_TYPE_LEVEL_LOW>; >>> + }; >>> +}; >>> + >>> +&i2c7 { >>> + clock-frequency = <100000>; >>> + >>> + pinctrl-names = "default"; >>> + pinctrl-0 = <&i2c7_active>, <&i2c7_hid_active>; >>> + >>> + status = "okay"; >>> + >>> + hid@5 { >>> + compatible = "hid-over-i2c"; >>> + reg = <0x5>; >>> + hid-descr-addr = <0x20>; >>> + >>> + interrupts-extended = <&tlmm 37 IRQ_TYPE_LEVEL_LOW>; >>> + }; >>> + >>> + hid@2c { >>> + compatible = "hid-over-i2c"; >>> + reg = <0x2c>; >>> + hid-descr-addr = <0x20>; >>> + >>> + interrupts-extended = <&tlmm 24 IRQ_TYPE_LEVEL_LOW>; >>> + }; >>> +}; >>> + >>> +&mdss { >>> + status = "okay"; >>> +}; >>> + >>> +&mdss_edp { >>> + data-lanes = <0 1 2 3>; >>> + >>> + pinctrl-names = "default"; >>> + pinctrl-0 = <&edp_hpd_active>; >>> + >>> + status = "okay"; >>> + >>> + aux-bus { >>> + panel { >>> + compatible = "edp-panel"; >>> + no-hpd; >>> + >>> + backlight = <&backlight>; >>> + >>> + ports { >>> + port { >>> + auo_b140han06_in: endpoint { >>> + remote-endpoint = <&mdss_edp_out>; >>> + }; >>> + }; >>> + }; >>> + }; >>> + }; >>> + >>> + ports { >>> + port@1 { >>> + reg = <1>; >>> + mdss_edp_out: endpoint { >>> + remote-endpoint = <&auo_b140han06_in>; >>> + }; >>> + }; >>> + }; >>> +}; >>> + >>> +&pcie3 { >>> + perst-gpio = <&tlmm 178 GPIO_ACTIVE_LOW>; >>> + wake-gpio = <&tlmm 180 GPIO_ACTIVE_HIGH>; >>> + pinctrl-names = "default"; >>> + pinctrl-0 = <&pcie3_default_state>; >>> + >>> + status = "okay"; >>> +}; >>> + >>> +&pcie3_phy { >>> + vdda-phy-supply = <&vreg_l5e_0p88>; >>> + vdda-pll-supply = <&vreg_l3c_1p2>; >>> + >>> + status = "okay"; >>> +}; >>> + >>> +&pmc8180c_lpg { >>> + status = "okay"; >>> +}; >>> + >>> +&qupv3_id_0 { >>> + status = "okay"; >>> +}; >>> + >>> +&qupv3_id_1 { >>> + status = "okay"; >>> +}; >>> + >>> +&qupv3_id_2 { >>> + status = "okay"; >>> +}; >>> + >>> +&remoteproc_adsp { >>> + memory-region = <&adsp_mem>; >>> + firmware-name = "qcom/sc8180x/LENOVO/82AK/qcadsp8180.mbn"; >>> + >>> + status = "okay"; >>> +}; >>> + >>> +&remoteproc_cdsp { >>> + memory-region = <&cdsp_mem>; >>> + firmware-name = "qcom/sc8180x/LENOVO/82AK/qccdsp8180.mbn"; >>> + >>> + status = "okay"; >>> +}; >>> + >>> +&remoteproc_mpss { >>> + memory-region = <&mpss_mem>; >>> + firmware-name = "qcom/sc8180x/LENOVO/82AK/qcmpss8180_nm.mbn"; >>> + >>> + status = "okay"; >>> +}; >>> + >>> +&uart13 { >>> + pinctrl-names = "default"; >>> + pinctrl-0 = <&uart13_state>; >>> + >>> + status = "okay"; >>> + >>> + bluetooth { >>> + compatible = "qcom,wcn3998-bt"; >>> + >>> + vddio-supply = <&vreg_s4a_1p8>; >>> + vddxo-supply = <&vreg_l7a_1p8>; >>> + vddrf-supply = <&vreg_l9a_1p3>; >>> + vddch0-supply = <&vreg_l11c_3p3>; >>> + max-speed = <3200000>; >>> + }; >>> +}; >>> + >>> +&ufs_mem_hc { >>> + reset-gpios = <&tlmm 190 GPIO_ACTIVE_LOW>; >>> + >>> + vcc-supply = <&vreg_l10e_2p9>; >>> + vcc-max-microamp = <155000>; >>> + >>> + vccq2-supply = <&vreg_l7e_1p8>; >>> + vccq2-max-microamp = <425000>; >> Missing regulator-allow-set-load for regulators that have current >> ops assigned to them. >> >>> + >>> + status = "okay"; >>> +}; >>> + >>> +&ufs_mem_phy { >>> + vdda-phy-supply = <&vreg_l5e_0p88>; >>> + vdda-pll-supply = <&vreg_l3c_1p2>; >>> + >>> + status = "okay"; >>> +}; >>> + >>> +&usb_prim_hsphy { >>> + vdda-pll-supply = <&vreg_l5e_0p88>; >>> + vdda18-supply = <&vreg_l12a_1p8>; >>> + vdda33-supply = <&vreg_l16e_3p0>; >>> + >>> + status = "okay"; >>> +}; >>> + >>> +&usb_prim_qmpphy { >>> + vdda-phy-supply = <&vreg_l3c_1p2>; >>> + vdda-pll-supply = <&vreg_l5e_0p88>; >>> + >>> + status = "okay"; >>> +}; >>> + >>> +&usb_prim { >> We mostly use usb_1 / usb_2 for this > > Isnt this better from readablity pov? esp since this is board dts Generally both sound pretty reasonable but I'm just saying that all other trees name this differently.. Konrad > >> >>> + status = "okay"; >>> +}; >>> + >>> +&usb_prim_dwc3 { >>> + dr_mode = "host"; >>> +}; >>> + >>> +&usb_sec_hsphy { >>> + vdda-pll-supply = <&vreg_l5e_0p88>; >>> + vdda18-supply = <&vreg_l12a_1p8>; >>> + vdda33-supply = <&vreg_l16e_3p0>; >>> + >>> + status = "okay"; >>> +}; >>> + >>> +&usb_sec_qmpphy { >>> + vdda-phy-supply = <&vreg_l3c_1p2>; >>> + vdda-pll-supply = <&vreg_l5e_0p88>; >>> + >>> + status = "okay"; >>> +}; >>> + >>> +&usb_sec { >>> + status = "okay"; >>> +}; >>> + >>> +&usb_sec_dwc3 { >>> + dr_mode = "host"; >> No roleswitching? > > Laptop :-) Always in host mode > >> >>> +}; >>> + >>> +&wifi { >>> + memory-region = <&wlan_mem>; >> It comes from the common dt file, so this may as well stay there. > > I can do that >