Message ID | 20220708020930.7183-1-mollysophia379@gmail.com |
---|---|
State | Superseded |
Headers | show |
Series | [v4,1/2] arm64: dts: qcom: Add support for Xiaomi Mi Mix2s | expand |
On 8.07.2022 04:09, MollySophia wrote: > Add support for Xiaomi Mi Mix2s (polaris) handsets. > > Currently working features: > - UFS > - Touchscreen > - USB 2 > - Bluetooth > - Wi-Fi > - GPU > - Venus > - Display (need jdi-fhd-nt35596s panel driver, which I have sent a > patch but it haven't been into upstream yet) > > Signed-off-by: MollySophia <mollysophia379@gmail.com> > --- > arch/arm64/boot/dts/qcom/Makefile | 1 + > .../boot/dts/qcom/sdm845-xiaomi-polaris.dts | 963 ++++++++++++++++++ > 2 files changed, 964 insertions(+) > create mode 100644 arch/arm64/boot/dts/qcom/sdm845-xiaomi-polaris.dts > > diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile > index 77ba2c9661d3..628b95e1012b 100644 > --- a/arch/arm64/boot/dts/qcom/Makefile > +++ b/arch/arm64/boot/dts/qcom/Makefile > @@ -112,6 +112,7 @@ dtb-$(CONFIG_ARCH_QCOM) += sdm845-sony-xperia-tama-apollo.dtb > dtb-$(CONFIG_ARCH_QCOM) += sdm845-shift-axolotl.dtb > dtb-$(CONFIG_ARCH_QCOM) += sdm845-xiaomi-beryllium-ebbg.dtb > dtb-$(CONFIG_ARCH_QCOM) += sdm845-xiaomi-beryllium-tianma.dtb > +dtb-$(CONFIG_ARCH_QCOM) += sdm845-xiaomi-polaris.dtb Please fix the tab/space situation. > dtb-$(CONFIG_ARCH_QCOM) += sdm850-lenovo-yoga-c630.dtb > dtb-$(CONFIG_ARCH_QCOM) += sdm850-samsung-w737.dtb > dtb-$(CONFIG_ARCH_QCOM) += sm6125-sony-xperia-seine-pdx201.dtb > diff --git a/arch/arm64/boot/dts/qcom/sdm845-xiaomi-polaris.dts b/arch/arm64/boot/dts/qcom/sdm845-xiaomi-polaris.dts > new file mode 100644 > index 000000000000..d3e535a542ef > --- /dev/null > +++ b/arch/arm64/boot/dts/qcom/sdm845-xiaomi-polaris.dts > @@ -0,0 +1,963 @@ > +// SPDX-License-Identifier: GPL-2.0 Could you relicense this to BSD3? > +/* > + * Copyright (c) 2020, Xilin Wu <strongtz@yeah.net> > + * Copyright (c) 2022, Molly Sophia <mollysophia379@gmail.com> > + */ > + > +/dts-v1/; > + > +#include <dt-bindings/gpio/gpio.h> > +#include <dt-bindings/pinctrl/qcom,pmic-gpio.h> > +#include <dt-bindings/regulator/qcom,rpmh-regulator.h> > +#include <dt-bindings/input/linux-event-codes.h> > +#include <dt-bindings/sound/qcom,q6afe.h> > +#include <dt-bindings/sound/qcom,q6asm.h> > +#include <dt-bindings/sound/qcom,q6afe.h> > +#include <dt-bindings/sound/qcom,q6asm.h> > +#include <dt-bindings/sound/qcom,q6voice.h> > +#include "sdm845.dtsi" > +#include "pm8998.dtsi" > +#include "pmi8998.dtsi" > +#include "pm8005.dtsi" > + > +/* > + * Delete following upstream (sdm845.dtsi) reserved > + * memory mappings which are different in this device. > + */ > +/delete-node/ &rmtfs_mem; > +/delete-node/ &adsp_mem; > +/delete-node/ &wlan_msa_mem; > +/delete-node/ &mpss_region; > +/delete-node/ &venus_mem; > +/delete-node/ &cdsp_mem; > +/delete-node/ &mba_region; > +/delete-node/ &slpi_mem; > +/delete-node/ &spss_mem; > + > +/ { > + model = "Xiaomi Mi MIX 2s"; 2S? [1] > + compatible = "xiaomi,polaris", "qcom,sdm845"; > + chassis-type = "handset"; > + > + /* required for bootloader to select correct board */ > + qcom,board-id = <0x2a 0x0>; > + qcom,msm-id = <0x141 0x20001>; Other boards put msm-id before board-id. > + > + aliases { > + serial0 = &uart9; > + serial1 = &uart6; > + }; > + > + volume-keys { > + compatible = "gpio-keys"; > + autorepeat; > + > + pinctrl-names = "default"; > + pinctrl-0 = <&vol_up_pin_a>; > + > + key-vol-up { > + label = "Volume Up"; > + linux,code = <KEY_VOLUMEUP>; > + gpios = <&pm8998_gpio 6 GPIO_ACTIVE_LOW>; > + debounce-interval = <15>; > + }; > + }; > + > + reserved-memory { > + adsp_mem: memory@8c500000 { > + reg = <0 0x8c500000 0 0x1e00000>; > + no-map; > + }; > + > + wlan_msa_mem: memory@8e300000 { > + reg = <0 0x8e300000 0 0x100000>; > + no-map; > + }; > + > + mpss_region: memory@8e400000 { > + reg = <0 0x8e400000 0 0x7800000>; > + no-map; > + }; > + > + venus_mem: memory@95c00000 { > + reg = <0 0x95c00000 0 0x500000>; > + no-map; > + }; > + > + cdsp_mem: memory@96100000 { > + reg = <0 0x96100000 0 0x800000>; > + no-map; > + }; > + > + mba_region: memory@96900000 { > + reg = <0 0x96900000 0 0x200000>; > + no-map; > + }; > + > + slpi_mem: memory@96b00000 { > + reg = <0 0x96b00000 0 0x1400000>; > + no-map; > + }; > + > + spss_mem: memory@97f00000 { > + reg = <0 0x97f00000 0 0x100000>; > + no-map; > + }; > + > + rmtfs_mem: memory@f6301000 { > + compatible = "qcom,rmtfs-mem"; > + reg = <0 0xf6301000 0 0x200000>; > + no-map; > + > + qcom,client-id = <1>; > + qcom,vmid = <15>; > + }; > + }; > + > + battery: battery { > + compatible = "simple-battery"; > + > + charge-full-design-microamp-hours = <3400000>; > + voltage-min-design-microvolt = <3400000>; That's specific to your device, but 3v4 looks veeery low.. > + voltage-max-design-microvolt = <4400000>; > + }; > + > + vreg_tp_vddio: tp-vddio-vreg { > + compatible = "regulator-fixed"; > + regulator-name = "vreg_tp_vddio"; > + > + regulator-min-microvolt = <1800000>; > + regulator-max-microvolt = <1800000>; > + > + gpio = <&tlmm 23 0>; > + regulator-always-on; > + regulator-boot-on; > + enable-active-high; > + }; > + > + vreg_s4a_1p8: vreg-s4a-1p8 { > + compatible = "regulator-fixed"; > + regulator-name = "vreg_s4a_1p8"; > + > + regulator-min-microvolt = <1800000>; > + regulator-max-microvolt = <1800000>; > + regulator-always-on; > + }; > +}; > + > +&apps_rsc { > + pm8998-rpmh-regulators { > + compatible = "qcom,pm8998-rpmh-regulators"; > + qcom,pmic-id = "a"; > + > + vreg_s2a_1p1: smps2 { > + regulator-min-microvolt = <1100000>; > + regulator-max-microvolt = <1100000>; > + }; > + > + vreg_s3a_1p35: smps3 { > + regulator-min-microvolt = <1352000>; > + regulator-max-microvolt = <1352000>; > + }; > + > + vreg_s5a_2p04: smps5 { > + regulator-min-microvolt = <1904000>; > + regulator-max-microvolt = <2040000>; > + }; > + > + vreg_s7a_1p025: smps7 { > + regulator-min-microvolt = <900000>; > + regulator-max-microvolt = <1028000>; > + }; > + > + vdda_mipi_dsi0_pll: > + vdda_ufs1_core: > + vreg_l1a_0p875: ldo1 { > + regulator-min-microvolt = <880000>; > + regulator-max-microvolt = <880000>; > + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; > + }; > + > + vreg_l2a_1p2: ldo2 { > + regulator-min-microvolt = <1200000>; > + regulator-max-microvolt = <1200000>; > + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; > + regulator-always-on; > + }; > + > + vreg_l3a_1p0: ldo3 { > + regulator-min-microvolt = <1000000>; > + regulator-max-microvolt = <1000000>; > + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; > + }; > + > + vreg_l5a_0p8: ldo5 { > + regulator-min-microvolt = <800000>; > + regulator-max-microvolt = <800000>; > + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; > + }; > + > + vreg_l6a_1p8: ldo6 { > + regulator-min-microvolt = <1856000>; > + regulator-max-microvolt = <1856000>; > + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; > + }; > + > + vreg_l7a_1p8: ldo7 { > + regulator-min-microvolt = <1800000>; > + regulator-max-microvolt = <1800000>; > + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; > + }; > + > + vreg_l8a_1p2: ldo8 { > + regulator-min-microvolt = <1200000>; > + regulator-max-microvolt = <1248000>; > + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; > + }; > + > + vreg_l9a_1p8: ldo9 { > + regulator-min-microvolt = <1704000>; > + regulator-max-microvolt = <2928000>; > + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; > + }; > + > + vreg_l10a_2p95: ldo10 { > + regulator-min-microvolt = <1704000>; > + regulator-max-microvolt = <2928000>; > + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; > + }; > + > + vreg_l11a_1p05: ldo11 { > + regulator-min-microvolt = <1000000>; > + regulator-max-microvolt = <1048000>; > + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; > + }; > + > + vreg_l12a_1p8: ldo12 { > + regulator-min-microvolt = <1800000>; > + regulator-max-microvolt = <1800000>; > + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; > + }; > + > + vreg_l13a_2p95: ldo13 { > + regulator-min-microvolt = <1800000>; > + regulator-max-microvolt = <2960000>; > + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; > + }; > + > + vreg_l14a_1p8: ldo14 { > + regulator-min-microvolt = <1800000>; > + regulator-max-microvolt = <1880000>; > + regulator-always-on; > + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; > + }; > + > + vreg_l15a_1p8: ldo15 { > + regulator-min-microvolt = <1800000>; > + regulator-max-microvolt = <1800000>; > + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; > + }; > + > + vreg_l16a_2p7: ldo16 { > + regulator-min-microvolt = <2704000>; > + regulator-max-microvolt = <2704000>; > + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; > + }; > + > + vreg_l17a_1p3: ldo17 { > + regulator-always-on; > + regulator-min-microvolt = <1304000>; > + regulator-max-microvolt = <1304000>; > + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; > + }; > + > + vreg_l18a_2p9: ldo18 { > + regulator-min-microvolt = <2704000>; > + regulator-max-microvolt = <2960000>; > + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; > + }; > + > + vreg_l19a_3p1: ldo19 { > + regulator-min-microvolt = <2856000>; > + regulator-max-microvolt = <3104000>; > + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; > + }; > + > + vreg_l20a_2p95: ldo20 { > + regulator-min-microvolt = <2704000>; > + regulator-max-microvolt = <2960000>; > + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; > + }; > + > + vreg_l21a_2p95: ldo21 { > + regulator-min-microvolt = <2704000>; > + regulator-max-microvolt = <2960000>; > + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; > + }; > + > + vreg_l22a_3p3: ldo22 { > + regulator-min-microvolt = <2864000>; > + regulator-max-microvolt = <3312000>; > + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; > + }; > + > + vreg_l23a_3p3: ldo23 { > + regulator-min-microvolt = <3000000>; > + regulator-max-microvolt = <3312000>; > + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; > + }; > + > + vreg_l24a_3p075: ldo24 { > + regulator-min-microvolt = <3088000>; > + regulator-max-microvolt = <3088000>; > + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; > + }; > + > + vreg_l25a_3p3: ldo25 { > + regulator-always-on; > + regulator-min-microvolt = <3000000>; > + regulator-max-microvolt = <3312000>; > + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; > + }; > + > + vdda_mipi_dsi0_1p2: > + vdda_ufs1_1p2: > + vreg_l26a_1p2: ldo26 { > + regulator-min-microvolt = <1200000>; > + regulator-max-microvolt = <1200000>; > + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; > + }; > + > + vreg_l28a_3p0: ldo28 { > + regulator-min-microvolt = <2856000>; > + regulator-max-microvolt = <3008000>; > + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; > + regulator-always-on; > + }; > + > + vreg_lvs1a_1p8: lvs1 { > + regulator-min-microvolt = <1800000>; > + regulator-max-microvolt = <1800000>; > + }; > + > + vreg_lvs2a_1p8: lvs2 { > + regulator-min-microvolt = <1800000>; > + regulator-max-microvolt = <1800000>; > + }; > + }; > + > + pmi8998-rpmh-regulators { > + compatible = "qcom,pmi8998-rpmh-regulators"; > + qcom,pmic-id = "b"; > + > + vreg_bob: bob { > + regulator-min-microvolt = <3312000>; > + regulator-max-microvolt = <3600000>; > + regulator-initial-mode = <RPMH_REGULATOR_MODE_AUTO>; > + regulator-allow-bypass; > + }; > + }; > + > + pm8005-rpmh-regulators { > + compatible = "qcom,pm8005-rpmh-regulators"; > + qcom,pmic-id = "c"; > + > + vreg_smp3c_0p6: smps3 { > + regulator-always-on; > + regulator-min-microvolt = <600000>; > + regulator-max-microvolt = <600000>; > + }; > + }; > +}; > + > +&gpi_dma0 { > + status = "okay"; > +}; /\ & \/ are incorrectly sorted. > + > +&gpi_dma1 { > + status = "okay"; > +}; > + > +&cdsp_pas { > + status = "okay"; Can you please move the status = "okay" down in all nodes? > + firmware-name = "qcom/sdm845/polaris/cdsp.mbn"; > +}; > + > +&dsi0 { > + status = "okay"; > + vdda-supply = <&vdda_mipi_dsi0_1p2>; > + > + display_panel: panel@0 { > + status = "okay"; This is redundant. > + compatible = "jdi,fhd-nt35596s"; > + #address-cells = <1>; > + #size-cells = <0>; > + reg = <0>; > + > + vddio-supply = <&vreg_l14a_1p8>; > + vddpos-supply = <&lab>; > + vddneg-supply = <&ibb>; > + > + reset-gpios = <&tlmm 6 GPIO_ACTIVE_LOW>; > + > + backlight = <&pmi8998_wled>; > + > + pinctrl-names = "default", "sleep"; > + pinctrl-0 = <&sde_dsi_active>; > + pinctrl-1 = <&sde_dsi_suspend>; > + > + port { > + panel_in: endpoint { > + remote-endpoint = <&dsi0_out>; > + }; > + }; > + }; > +}; > + > +&dsi0_out { > + remote-endpoint = <&panel_in>; > + data-lanes = <0 1 2 3>; > +}; > + > +&dsi0_phy { > + status = "okay"; > + vdds-supply = <&vdda_mipi_dsi0_pll>; > +}; > + > +&gcc { > + protected-clocks = <GCC_QSPI_CORE_CLK>, > + <GCC_QSPI_CORE_CLK_SRC>, > + <GCC_QSPI_CNOC_PERIPH_AHB_CLK>, > + <GCC_LPASS_Q6_AXI_CLK>, > + <GCC_LPASS_SWAY_CLK>; > +}; > + > +&gmu { > + status = "okay"; > +}; > + > +&gpu { > + status = "okay"; > + > + zap-shader { > + memory-region = <&gpu_mem>; > + firmware-name = "qcom/sdm845/polaris/a630_zap.mbn"; > + }; > +}; > + > +&ibb { > + regulator-min-microvolt = <4600000>; > + regulator-max-microvolt = <6000000>; > + regulator-over-current-protection; > + regulator-pull-down; > + regulator-soft-start; > + qcom,discharge-resistor-kohms = <300>; Reverse-Christmas-tree, please. > +}; > + > +&lab { > + regulator-min-microvolt = <4600000>; > + regulator-max-microvolt = <6000000>; > + // regulator-over-current-protection; No dead code. Either remove it or leave it. There is however a bug (?) in the labibb driver that will make the OCP interrupt fire on every screen power on (at least on the devices I tried, but I doubt it should be like this). > + regulator-pull-down; > + regulator-soft-start; > +}; > + > +&i2c5 { > + #dma-cells = <3>; The dma property is SoC-wide, please create a separate patch and add it to sdm845.dtsi. > + status = "okay"; > + clock-frequency = <400000>; > + > + dmas = <&gpi_dma0 0 5 QCOM_GPI_I2C>, > + <&gpi_dma0 1 5 QCOM_GPI_I2C>; > + dma-names = "tx", "rx"; > + > + tas2559_codec: codec@4c{ > + #sound-dai-cells = <1>; > + compatible = "ti,tas2559"; > + reg = <0x4c>; > + ti,tas2559-reset-gpio = <&tlmm 14 0>; > + ti,tas2560-reset-gpio = <&tlmm 25 0>; > + ti,tas2559-addr = <0x4c>; > + ti,tas2560-addr = <0x4d>; > + }; > +}; > + > +&i2c14 { > + #dma-cells = <3>; ditto > + status = "okay"; > + clock-frequency = <400000>; > + > + dmas = <&gpi_dma1 0 6 QCOM_GPI_I2C>, > + <&gpi_dma1 1 6 QCOM_GPI_I2C>; > + dma-names = "tx", "rx"; > + > + touchscreen@20 { > + compatible = "syna,rmi4-i2c"; > + reg = <0x20>; > + #address-cells = <1>; > + #size-cells = <0>; > + interrupts-extended = <&tlmm 125 0x2008>; > + > + pinctrl-names = "default", "sleep"; > + pinctrl-0 = <&ts_int_default &ts_reset_default>; > + pinctrl-1 = <&ts_int_sleep &ts_reset_sleep>; > + > + vdd-supply = <&vreg_l28a_3p0>; > + vio-supply = <&vreg_tp_vddio>; > + > + syna,reset-delay-ms = <200>; > + syna,startup-delay-ms = <200>; > + > + rmi4-f01@1 { > + reg = <0x1>; > + syna,nosleep-mode = <0x1>; Decimal? > + }; > + > + rmi4-f12@12 { > + reg = <0x12>; > + syna,sensor-type = <1>; > + syna,clip-x-low = <0>; > + syna,clip-x-high = <1080>; > + syna,clip-y-low = <0>; > + syna,clip-y-high = <2160>; > + syna,rezero-wait-ms = <200>; > + }; > + }; > +}; > + > +&qup_i2c14_default { > + mux { > + pins = "gpio33", "gpio34"; > + function = "qup14"; > + }; This part is identical to the one in sdm845.dtsi. > + > + config { > + pins = "gpio33", "gpio34"; > + drive-strength = <2>; > + bias-disable; > + }; > +}; > + > +&ipa { > + status = "okay"; > + > + memory-region = <&ipa_fw_mem>; > + firmware-name = "qcom/sdm845/polaris/ipa_fws.mbn"; > +}; > + > +&slpi_pas { > + status = "okay"; > + firmware-name = "qcom/sdm845/polaris/slpi.mbn"; > +}; > + > +&mdss { > + status = "okay"; > +}; Sorted incorrectly. > + > +/* Modem/wifi*/ I think this comment is redundant. > +&mss_pil { > + status = "okay"; > + firmware-name = "qcom/sdm845/polaris/mba.mbn", "qcom/sdm845/polaris/modem.mbn"; > +}; > + > +&pm8998_gpio { > + vol_up_pin_a: vol-up-active { > + pins = "gpio6"; > + function = "normal"; > + input-enable; > + bias-pull-up; > + qcom,drive-strength = <PMIC_GPIO_STRENGTH_NO>; > + }; > +}; > + > +&pm8998_pon { > + resin { > + compatible = "qcom,pm8941-resin"; > + interrupts = <0x0 0x8 1 IRQ_TYPE_EDGE_BOTH>; > + debounce = <15625>; > + bias-pull-up; > + linux,code = <KEY_VOLUMEDOWN>; > + }; > +}; > + > +&pmi8998_haptics { This is not in mainline. > + status = "okay"; > + > + qcom,wave-play-rate-us = <4255>; > +}; > + > +&pmi8998_charger { Neither is this. > + status = "okay"; > + monitored-battery = <&battery>; > +}; > + > +&pmi8998_fg { Or this. > + status = "okay"; > + > + power-supplies = <&pmi8998_charger>; > + monitored-battery = <&battery>; > +}; > + > +&pmi8998_rradc { > + status = "okay"; > +}; > + > +&pmi8998_wled { > + status = "okay"; > + qcom,current-boost-limit = <970>; > + qcom,ovp-millivolt = <29600>; > + qcom,current-limit-microamp = <20000>; > + qcom,num-strings = <2>; > + qcom,switching-freq = <600>; > + qcom,external-pfet; > + qcom,cabc; > +}; > + > +&q6afedai { > + qi2s@22 { > + reg = <22>; > + qcom,sd-lines = <0>; > + }; > +}; > + > +&q6asmdai { > + dai@0 { > + reg = <0>; > + }; > + > + dai@1 { > + reg = <1>; > + }; > + > + dai@2 { > + reg = <2>; > + }; > +}; > + > +&q6cvp { I don't think that's in mainline either.. > + status = "okay"; > +}; > + > +&q6cvs { Or this.. > + status = "okay"; > +}; > + > +&q6mvm { And this.. > + status = "okay"; > +}; > + > +&qupv3_id_0 { > + status = "okay"; > +}; > + > +&qupv3_id_1 { > + status = "okay"; > +}; > + > +&sound { > + compatible = "qcom,db845c-sndcard"; > + pinctrl-0 = <&quat_mi2s_active > + &quat_mi2s_sd0_active>; > + pinctrl-names = "default"; > + model = "Xiaomi Mi Mix2s"; > + audio-routing = > + "RX_BIAS", "MCLK", > + "AMIC1", "MIC BIAS1", > + "AMIC2", "MIC BIAS2", > + "AMIC3", "MIC BIAS3"; > + > + mm1-dai-link { > + link-name = "MultiMedia1"; > + cpu { > + sound-dai = <&q6asmdai MSM_FRONTEND_DAI_MULTIMEDIA1>; > + }; > + }; > + > + mm2-dai-link { > + link-name = "MultiMedia2"; > + cpu { > + sound-dai = <&q6asmdai MSM_FRONTEND_DAI_MULTIMEDIA2>; > + }; > + }; > + > + mm3-dai-link { > + link-name = "MultiMedia3"; > + cpu { > + sound-dai = <&q6asmdai MSM_FRONTEND_DAI_MULTIMEDIA3>; > + }; > + }; > + > + dai-link-voicemmode1 { > + link-name = "VoiceMMode1"; > + cpu { > + sound-dai = <&q6voicedai VOICEMMODE1>; Consequently, some nodes will have to go since they're referencing a device that does not have a driver or even exist in mainline. I suppose you can remove the sound node entirely for the time being, unless you have any kind of sound output without them. > + }; > + }; > + > + tas2559-dai-link { > + link-name = "Primary Spkr Playback"; > + cpu { > + sound-dai = <&q6afedai QUATERNARY_MI2S_RX>; > + }; > + > + platform { > + sound-dai = <&q6routing>; > + }; > + > + codec { > + sound-dai = <&tas2559_codec 0>; > + }; > + }; > + > + slim-dai-link { > + link-name = "SLIM Playback"; > + cpu { > + sound-dai = <&q6afedai SLIMBUS_0_RX>; > + }; > + > + platform { > + sound-dai = <&q6routing>; > + }; > + > + codec { > + sound-dai = <&wcd9340 0>; > + }; > + }; > + > + slimcap-dai-link { > + link-name = "SLIM Capture"; > + cpu { > + sound-dai = <&q6afedai SLIMBUS_0_TX>; > + }; > + > + platform { > + sound-dai = <&q6routing>; > + }; > + > + codec { > + sound-dai = <&wcd9340 1>; > + }; > + }; > +}; > + > +&tlmm { > + gpio-reserved-ranges = <0 4>, <81 4>; > + > + ts_reset_default: ts-reset-default { > + mux { Please drop the extra mux{} / config{}. You can do it like this: ts_reset_default: ts-reset-default { pins = "gpio99"; function = "gpio"; drive-strength = <16>; output-high; }; > + pins = "gpio99"; > + function = "gpio"; > + }; > + > + config { > + pins = "gpio99"; > + drive-strength = <16>; > + output-high; > + }; > + }; > + > + ts_int_default: ts-int-default { > + mux { > + pins = "gpio125"; > + function = "gpio"; > + }; > + > + config { > + pins = "gpio125"; > + bias-pull-down; > + drive-strength = <16>; > + input-enable; > + }; > + }; > + > + ts_reset_sleep: ts-reset-sleep { > + mux { > + pins = "gpio99"; > + function = "gpio"; > + }; > + > + config { > + pins = "gpio99"; > + bias-disable; > + drive-strength = <2>; > + }; > + }; > + > + ts_int_sleep: ts-int-sleep { > + mux { > + pins = "gpio125"; > + function = "gpio"; > + }; > + > + config { > + pins = "gpio125"; > + bias-pull-down; > + drive-strength = <2>; > + input-enable; > + }; > + }; > + > + sde_dsi_active: sde-dsi-active { > + mux { > + pins = "gpio6", "gpio10"; > + function = "gpio"; > + }; > + > + config { > + pins = "gpio6", "gpio10"; > + drive-strength = <8>; > + bias-disable = <0>; > + }; > + }; > + > + sde_dsi_suspend: sde-dsi-suspend { > + mux { > + pins = "gpio6", "gpio10"; > + function = "gpio"; > + }; > + > + config { > + pins = "gpio6", "gpio10"; > + drive-strength = <2>; > + bias-pull-down; > + }; > + }; > + > + wcd_intr_default: wcd-intr-default { > + pins = <54>; > + function = "gpio"; > + > + input-enable; > + bias-pull-down; > + drive-strength = <2>; > + }; > +}; > + > +&uart6 { > + status = "okay"; > + > + bluetooth { > + compatible = "qcom,wcn3990-bt"; > + > + /* > + * This path is relative to the qca/ > + * subdir under lib/firmware. > + */ This comment should fit in a single line. > + firmware-name = "polaris/crnv21.bin"; > + > + vddio-supply = <&vreg_s4a_1p8>; > + vddxo-supply = <&vreg_l7a_1p8>; > + vddrf-supply = <&vreg_l17a_1p3>; > + vddch0-supply = <&vreg_l25a_3p3>; > + max-speed = <3200000>; > + }; > +}; > + > +&usb_1 { > + status = "okay"; > + /* We'll use this as USB 2.0 only */ > + qcom,select-utmi-as-pipe-clk; > +}; > + > +&usb_1_dwc3 { > + dr_mode = "peripheral"; > + > + /* fastest mode for USB 2 */ Tiiiny nit, but since you have to send v(n+1) anyway, please make this comment start with an uppercase letter. > + maximum-speed = "high-speed"; > + > + /* Remove USB3 phy */ > + phys = <&usb_1_hsphy>; > + phy-names = "usb2-phy"; > +}; > + > +&usb_1_hsphy { > + status = "okay"; > + > + vdd-supply = <&vreg_l1a_0p875>; > + vdda-pll-supply = <&vreg_l12a_1p8>; > + vdda-phy-dpdm-supply = <&vreg_l24a_3p075>; > + > + qcom,imp-res-offset-value = <8>; > + qcom,hstx-trim-value = <QUSB2_V2_HSTX_TRIM_21_6_MA>; > + qcom,preemphasis-level = <QUSB2_V2_PREEMPHASIS_5_PERCENT>; > + qcom,preemphasis-width = <QUSB2_V2_PREEMPHASIS_WIDTH_HALF_BIT>; > +}; > + > +&usb_1_qmpphy { > + status = "okay"; > + > + vdda-phy-supply = <&vreg_l26a_1p2>; > + vdda-pll-supply = <&vreg_l1a_0p875>; > +}; > + > +&ufs_mem_hc { > + status = "okay"; > + reset-gpios = <&tlmm 150 GPIO_ACTIVE_LOW>; > + vcc-supply = <&vreg_l20a_2p95>; > + vcc-max-microamp = <800000>; > +}; > + > +&ufs_mem_phy { > + status = "okay"; > + vdda-phy-supply = <&vdda_ufs1_core>; > + vdda-pll-supply = <&vdda_ufs1_1p2>; > +}; > + > +&venus { > + status = "okay"; > + firmware-name = "qcom/sdm845/polaris/venus.mbn"; > +}; > + > +&wcd9340{ Missing space. Konrad > + pinctrl-0 = <&wcd_intr_default>; > + pinctrl-names = "default"; > + clock-names = "extclk"; > + clocks = <&rpmhcc RPMH_LN_BB_CLK2>; > + reset-gpios = <&tlmm 64 0>; > + vdd-buck-supply = <&vreg_s4a_1p8>; > + vdd-buck-sido-supply = <&vreg_s4a_1p8>; > + vdd-tx-supply = <&vreg_s4a_1p8>; > + vdd-rx-supply = <&vreg_s4a_1p8>; > + vdd-io-supply = <&vreg_s4a_1p8>; > + qcom,micbias1-microvolt = <2700000>; > + qcom,micbias2-microvolt = <1800000>; > + qcom,micbias3-microvolt = <2700000>; > + qcom,micbias4-microvolt = <2700000>; > +}; > + > +&wifi { > + status = "okay"; > + > + vdd-0.8-cx-mx-supply = <&vreg_l5a_0p8>; > + vdd-1.8-xo-supply = <&vreg_l7a_1p8>; > + vdd-1.3-rfa-supply = <&vreg_l17a_1p3>; > + vdd-3.3-ch0-supply = <&vreg_l25a_3p3>; > + vdd-3.3-ch1-supply = <&vreg_l23a_3p3>; > + > + qcom,snoc-host-cap-skip-quirk; > +}; > + > +/* PINCTRL - additions to nodes defined in sdm845.dtsi */ > + > +&qup_uart6_default { > + pinmux { > + pins = "gpio45", "gpio46", "gpio47", "gpio48"; > + function = "qup6"; > + }; > + > + cts { > + pins = "gpio45"; > + bias-disable; > + }; > + > + rts-tx { > + pins = "gpio46", "gpio47"; > + drive-strength = <2>; > + bias-disable; > + }; > + > + rx { > + pins = "gpio48"; > + bias-pull-up; > + }; > +}; >
On 09/07/2022 09:33, Konrad Dybcio wrote: > > > On 8.07.2022 04:09, MollySophia wrote: >> Add support for Xiaomi Mi Mix2s (polaris) handsets. >> >> Currently working features: >> - UFS >> - Touchscreen >> - USB 2 >> - Bluetooth >> - Wi-Fi >> - GPU >> - Venus >> - Display (need jdi-fhd-nt35596s panel driver, which I have sent a >> patch but it haven't been into upstream yet) >> >> Signed-off-by: MollySophia <mollysophia379@gmail.com> >> --- >> arch/arm64/boot/dts/qcom/Makefile | 1 + >> .../boot/dts/qcom/sdm845-xiaomi-polaris.dts | 963 ++++++++++++++++++ >> 2 files changed, 964 insertions(+) >> create mode 100644 arch/arm64/boot/dts/qcom/sdm845-xiaomi-polaris.dts >> >> diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile >> index 77ba2c9661d3..628b95e1012b 100644 >> --- a/arch/arm64/boot/dts/qcom/Makefile >> +++ b/arch/arm64/boot/dts/qcom/Makefile >> @@ -112,6 +112,7 @@ dtb-$(CONFIG_ARCH_QCOM) += sdm845-sony-xperia-tama-apollo.dtb >> dtb-$(CONFIG_ARCH_QCOM) += sdm845-shift-axolotl.dtb >> dtb-$(CONFIG_ARCH_QCOM) += sdm845-xiaomi-beryllium-ebbg.dtb >> dtb-$(CONFIG_ARCH_QCOM) += sdm845-xiaomi-beryllium-tianma.dtb >> +dtb-$(CONFIG_ARCH_QCOM) += sdm845-xiaomi-polaris.dtb > Please fix the tab/space situation. > >> dtb-$(CONFIG_ARCH_QCOM) += sdm850-lenovo-yoga-c630.dtb >> dtb-$(CONFIG_ARCH_QCOM) += sdm850-samsung-w737.dtb >> dtb-$(CONFIG_ARCH_QCOM) += sm6125-sony-xperia-seine-pdx201.dtb >> diff --git a/arch/arm64/boot/dts/qcom/sdm845-xiaomi-polaris.dts b/arch/arm64/boot/dts/qcom/sdm845-xiaomi-polaris.dts >> new file mode 100644 >> index 000000000000..d3e535a542ef >> --- /dev/null >> +++ b/arch/arm64/boot/dts/qcom/sdm845-xiaomi-polaris.dts >> @@ -0,0 +1,963 @@ >> +// SPDX-License-Identifier: GPL-2.0 > Could you relicense this to BSD3? > >> +/* >> + * Copyright (c) 2020, Xilin Wu <strongtz@yeah.net> >> + * Copyright (c) 2022, Molly Sophia <mollysophia379@gmail.com> >> + */ >> + >> +/dts-v1/; >> + >> +#include <dt-bindings/gpio/gpio.h> >> +#include <dt-bindings/pinctrl/qcom,pmic-gpio.h> >> +#include <dt-bindings/regulator/qcom,rpmh-regulator.h> >> +#include <dt-bindings/input/linux-event-codes.h> >> +#include <dt-bindings/sound/qcom,q6afe.h> >> +#include <dt-bindings/sound/qcom,q6asm.h> >> +#include <dt-bindings/sound/qcom,q6afe.h> >> +#include <dt-bindings/sound/qcom,q6asm.h> >> +#include <dt-bindings/sound/qcom,q6voice.h> >> +#include "sdm845.dtsi" >> +#include "pm8998.dtsi" >> +#include "pmi8998.dtsi" >> +#include "pm8005.dtsi" >> + >> +/* >> + * Delete following upstream (sdm845.dtsi) reserved >> + * memory mappings which are different in this device. >> + */ >> +/delete-node/ &rmtfs_mem; >> +/delete-node/ &adsp_mem; >> +/delete-node/ &wlan_msa_mem; >> +/delete-node/ &mpss_region; >> +/delete-node/ &venus_mem; >> +/delete-node/ &cdsp_mem; >> +/delete-node/ &mba_region; >> +/delete-node/ &slpi_mem; >> +/delete-node/ &spss_mem; >> + >> +/ { >> + model = "Xiaomi Mi MIX 2s"; > 2S? [1] > >> + compatible = "xiaomi,polaris", "qcom,sdm845"; >> + chassis-type = "handset"; >> + >> + /* required for bootloader to select correct board */ >> + qcom,board-id = <0x2a 0x0>; >> + qcom,msm-id = <0x141 0x20001>; > Other boards put msm-id before board-id. This seems arbitrary > >> + >> + aliases { >> + serial0 = &uart9; >> + serial1 = &uart6; >> + }; >> + >> + volume-keys { >> + compatible = "gpio-keys"; >> + autorepeat; >> + >> + pinctrl-names = "default"; >> + pinctrl-0 = <&vol_up_pin_a>; >> + >> + key-vol-up { >> + label = "Volume Up"; >> + linux,code = <KEY_VOLUMEUP>; >> + gpios = <&pm8998_gpio 6 GPIO_ACTIVE_LOW>; >> + debounce-interval = <15>; >> + }; >> + }; >> + >> + reserved-memory { >> + adsp_mem: memory@8c500000 { >> + reg = <0 0x8c500000 0 0x1e00000>; >> + no-map; >> + }; >> + >> + wlan_msa_mem: memory@8e300000 { >> + reg = <0 0x8e300000 0 0x100000>; >> + no-map; >> + }; >> + >> + mpss_region: memory@8e400000 { >> + reg = <0 0x8e400000 0 0x7800000>; >> + no-map; >> + }; >> + >> + venus_mem: memory@95c00000 { >> + reg = <0 0x95c00000 0 0x500000>; >> + no-map; >> + }; >> + >> + cdsp_mem: memory@96100000 { >> + reg = <0 0x96100000 0 0x800000>; >> + no-map; >> + }; >> + >> + mba_region: memory@96900000 { >> + reg = <0 0x96900000 0 0x200000>; >> + no-map; >> + }; >> + >> + slpi_mem: memory@96b00000 { >> + reg = <0 0x96b00000 0 0x1400000>; >> + no-map; >> + }; >> + >> + spss_mem: memory@97f00000 { >> + reg = <0 0x97f00000 0 0x100000>; >> + no-map; >> + }; >> + >> + rmtfs_mem: memory@f6301000 { >> + compatible = "qcom,rmtfs-mem"; >> + reg = <0 0xf6301000 0 0x200000>; >> + no-map; >> + >> + qcom,client-id = <1>; >> + qcom,vmid = <15>; >> + }; >> + }; >> + >> + battery: battery { >> + compatible = "simple-battery"; >> + >> + charge-full-design-microamp-hours = <3400000>; >> + voltage-min-design-microvolt = <3400000>; > That's specific to your device, but 3v4 looks veeery low.. Most lipoly's can safely go down to 3.4v, no permanent damage until 3.2v. That said this value is currently unused on all devices except the OnePlus 6 afaik. > > >> + voltage-max-design-microvolt = <4400000>; >> + }; >> + >> + vreg_tp_vddio: tp-vddio-vreg { >> + compatible = "regulator-fixed"; >> + regulator-name = "vreg_tp_vddio"; >> + >> + regulator-min-microvolt = <1800000>; >> + regulator-max-microvolt = <1800000>; >> + >> + gpio = <&tlmm 23 0>; >> + regulator-always-on; >> + regulator-boot-on; >> + enable-active-high; >> + }; >> + >> + vreg_s4a_1p8: vreg-s4a-1p8 { >> + compatible = "regulator-fixed"; >> + regulator-name = "vreg_s4a_1p8"; >> + >> + regulator-min-microvolt = <1800000>; >> + regulator-max-microvolt = <1800000>; >> + regulator-always-on; >> + }; >> +}; >> + >> +&apps_rsc { >> + pm8998-rpmh-regulators { >> + compatible = "qcom,pm8998-rpmh-regulators"; >> + qcom,pmic-id = "a"; >> + >> + vreg_s2a_1p1: smps2 { >> + regulator-min-microvolt = <1100000>; >> + regulator-max-microvolt = <1100000>; >> + }; >> + >> + vreg_s3a_1p35: smps3 { >> + regulator-min-microvolt = <1352000>; >> + regulator-max-microvolt = <1352000>; >> + }; >> + >> + vreg_s5a_2p04: smps5 { >> + regulator-min-microvolt = <1904000>; >> + regulator-max-microvolt = <2040000>; >> + }; >> + >> + vreg_s7a_1p025: smps7 { >> + regulator-min-microvolt = <900000>; >> + regulator-max-microvolt = <1028000>; >> + }; >> + >> + vdda_mipi_dsi0_pll: >> + vdda_ufs1_core: >> + vreg_l1a_0p875: ldo1 { >> + regulator-min-microvolt = <880000>; >> + regulator-max-microvolt = <880000>; >> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; >> + }; >> + >> + vreg_l2a_1p2: ldo2 { >> + regulator-min-microvolt = <1200000>; >> + regulator-max-microvolt = <1200000>; >> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; >> + regulator-always-on; >> + }; >> + >> + vreg_l3a_1p0: ldo3 { >> + regulator-min-microvolt = <1000000>; >> + regulator-max-microvolt = <1000000>; >> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; >> + }; >> + >> + vreg_l5a_0p8: ldo5 { >> + regulator-min-microvolt = <800000>; >> + regulator-max-microvolt = <800000>; >> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; >> + }; >> + >> + vreg_l6a_1p8: ldo6 { >> + regulator-min-microvolt = <1856000>; >> + regulator-max-microvolt = <1856000>; >> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; >> + }; >> + >> + vreg_l7a_1p8: ldo7 { >> + regulator-min-microvolt = <1800000>; >> + regulator-max-microvolt = <1800000>; >> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; >> + }; >> + >> + vreg_l8a_1p2: ldo8 { >> + regulator-min-microvolt = <1200000>; >> + regulator-max-microvolt = <1248000>; >> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; >> + }; >> + >> + vreg_l9a_1p8: ldo9 { >> + regulator-min-microvolt = <1704000>; >> + regulator-max-microvolt = <2928000>; >> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; >> + }; >> + >> + vreg_l10a_2p95: ldo10 { >> + regulator-min-microvolt = <1704000>; >> + regulator-max-microvolt = <2928000>; >> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; >> + }; >> + >> + vreg_l11a_1p05: ldo11 { >> + regulator-min-microvolt = <1000000>; >> + regulator-max-microvolt = <1048000>; >> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; >> + }; >> + >> + vreg_l12a_1p8: ldo12 { >> + regulator-min-microvolt = <1800000>; >> + regulator-max-microvolt = <1800000>; >> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; >> + }; >> + >> + vreg_l13a_2p95: ldo13 { >> + regulator-min-microvolt = <1800000>; >> + regulator-max-microvolt = <2960000>; >> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; >> + }; >> + >> + vreg_l14a_1p8: ldo14 { >> + regulator-min-microvolt = <1800000>; >> + regulator-max-microvolt = <1880000>; >> + regulator-always-on; >> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; >> + }; >> + >> + vreg_l15a_1p8: ldo15 { >> + regulator-min-microvolt = <1800000>; >> + regulator-max-microvolt = <1800000>; >> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; >> + }; >> + >> + vreg_l16a_2p7: ldo16 { >> + regulator-min-microvolt = <2704000>; >> + regulator-max-microvolt = <2704000>; >> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; >> + }; >> + >> + vreg_l17a_1p3: ldo17 { >> + regulator-always-on; >> + regulator-min-microvolt = <1304000>; >> + regulator-max-microvolt = <1304000>; >> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; >> + }; >> + >> + vreg_l18a_2p9: ldo18 { >> + regulator-min-microvolt = <2704000>; >> + regulator-max-microvolt = <2960000>; >> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; >> + }; >> + >> + vreg_l19a_3p1: ldo19 { >> + regulator-min-microvolt = <2856000>; >> + regulator-max-microvolt = <3104000>; >> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; >> + }; >> + >> + vreg_l20a_2p95: ldo20 { >> + regulator-min-microvolt = <2704000>; >> + regulator-max-microvolt = <2960000>; >> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; >> + }; >> + >> + vreg_l21a_2p95: ldo21 { >> + regulator-min-microvolt = <2704000>; >> + regulator-max-microvolt = <2960000>; >> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; >> + }; >> + >> + vreg_l22a_3p3: ldo22 { >> + regulator-min-microvolt = <2864000>; >> + regulator-max-microvolt = <3312000>; >> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; >> + }; >> + >> + vreg_l23a_3p3: ldo23 { >> + regulator-min-microvolt = <3000000>; >> + regulator-max-microvolt = <3312000>; >> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; >> + }; >> + >> + vreg_l24a_3p075: ldo24 { >> + regulator-min-microvolt = <3088000>; >> + regulator-max-microvolt = <3088000>; >> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; >> + }; >> + >> + vreg_l25a_3p3: ldo25 { >> + regulator-always-on; >> + regulator-min-microvolt = <3000000>; >> + regulator-max-microvolt = <3312000>; >> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; >> + }; >> + >> + vdda_mipi_dsi0_1p2: >> + vdda_ufs1_1p2: >> + vreg_l26a_1p2: ldo26 { >> + regulator-min-microvolt = <1200000>; >> + regulator-max-microvolt = <1200000>; >> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; >> + }; >> + >> + vreg_l28a_3p0: ldo28 { >> + regulator-min-microvolt = <2856000>; >> + regulator-max-microvolt = <3008000>; >> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; >> + regulator-always-on; >> + }; >> + >> + vreg_lvs1a_1p8: lvs1 { >> + regulator-min-microvolt = <1800000>; >> + regulator-max-microvolt = <1800000>; >> + }; >> + >> + vreg_lvs2a_1p8: lvs2 { >> + regulator-min-microvolt = <1800000>; >> + regulator-max-microvolt = <1800000>; >> + }; >> + }; >> + >> + pmi8998-rpmh-regulators { >> + compatible = "qcom,pmi8998-rpmh-regulators"; >> + qcom,pmic-id = "b"; >> + >> + vreg_bob: bob { >> + regulator-min-microvolt = <3312000>; >> + regulator-max-microvolt = <3600000>; >> + regulator-initial-mode = <RPMH_REGULATOR_MODE_AUTO>; >> + regulator-allow-bypass; >> + }; >> + }; >> + >> + pm8005-rpmh-regulators { >> + compatible = "qcom,pm8005-rpmh-regulators"; >> + qcom,pmic-id = "c"; >> + >> + vreg_smp3c_0p6: smps3 { >> + regulator-always-on; >> + regulator-min-microvolt = <600000>; >> + regulator-max-microvolt = <600000>; >> + }; >> + }; >> +}; >> + >> +&gpi_dma0 { >> + status = "okay"; >> +}; > /\ & \/ are incorrectly sorted. > >> + >> +&gpi_dma1 { >> + status = "okay"; >> +}; >> + >> +&cdsp_pas { >> + status = "okay"; > Can you please move the status = "okay" down in all nodes? > > >> + firmware-name = "qcom/sdm845/polaris/cdsp.mbn"; >> +}; >> + >> +&dsi0 { >> + status = "okay"; >> + vdda-supply = <&vdda_mipi_dsi0_1p2>; >> + >> + display_panel: panel@0 { >> + status = "okay"; > This is redundant. > >> + compatible = "jdi,fhd-nt35596s"; >> + #address-cells = <1>; >> + #size-cells = <0>; >> + reg = <0>; >> + >> + vddio-supply = <&vreg_l14a_1p8>; >> + vddpos-supply = <&lab>; >> + vddneg-supply = <&ibb>; >> + >> + reset-gpios = <&tlmm 6 GPIO_ACTIVE_LOW>; >> + >> + backlight = <&pmi8998_wled>; >> + >> + pinctrl-names = "default", "sleep"; >> + pinctrl-0 = <&sde_dsi_active>; >> + pinctrl-1 = <&sde_dsi_suspend>; >> + >> + port { >> + panel_in: endpoint { >> + remote-endpoint = <&dsi0_out>; >> + }; >> + }; >> + }; >> +}; >> + >> +&dsi0_out { >> + remote-endpoint = <&panel_in>; >> + data-lanes = <0 1 2 3>; >> +}; >> + >> +&dsi0_phy { >> + status = "okay"; >> + vdds-supply = <&vdda_mipi_dsi0_pll>; >> +}; >> + >> +&gcc { >> + protected-clocks = <GCC_QSPI_CORE_CLK>, >> + <GCC_QSPI_CORE_CLK_SRC>, >> + <GCC_QSPI_CNOC_PERIPH_AHB_CLK>, >> + <GCC_LPASS_Q6_AXI_CLK>, >> + <GCC_LPASS_SWAY_CLK>; >> +}; >> + >> +&gmu { >> + status = "okay"; >> +}; >> + >> +&gpu { >> + status = "okay"; >> + >> + zap-shader { >> + memory-region = <&gpu_mem>; >> + firmware-name = "qcom/sdm845/polaris/a630_zap.mbn"; >> + }; >> +}; >> + >> +&ibb { >> + regulator-min-microvolt = <4600000>; >> + regulator-max-microvolt = <6000000>; >> + regulator-over-current-protection; >> + regulator-pull-down; >> + regulator-soft-start; >> + qcom,discharge-resistor-kohms = <300>; > Reverse-Christmas-tree, please. > >> +}; >> + >> +&lab { >> + regulator-min-microvolt = <4600000>; >> + regulator-max-microvolt = <6000000>; >> + // regulator-over-current-protection; > No dead code. Either remove it or leave it. There is however a bug (?) > in the labibb driver that will make the OCP interrupt fire on every screen > power on (at least on the devices I tried, but I doubt it should be like this). > >> + regulator-pull-down; >> + regulator-soft-start; >> +}; >> + >> +&i2c5 { >> + #dma-cells = <3>; > The dma property is SoC-wide, please create a separate patch and add it to sdm845.dtsi. Not all devices use DMA for i2c, currently there is a {bug?} in the GPI_DMA driver where when you add the DMA properties it will not properly default to FIFO if the firmware doesn't support DMA on that particular controller. > > >> + status = "okay"; >> + clock-frequency = <400000>; >> + >> + dmas = <&gpi_dma0 0 5 QCOM_GPI_I2C>, >> + <&gpi_dma0 1 5 QCOM_GPI_I2C>; >> + dma-names = "tx", "rx"; (these would need to be added too) >> + >> + tas2559_codec: codec@4c{ >> + #sound-dai-cells = <1>; >> + compatible = "ti,tas2559"; >> + reg = <0x4c>; >> + ti,tas2559-reset-gpio = <&tlmm 14 0>; >> + ti,tas2560-reset-gpio = <&tlmm 25 0>; >> + ti,tas2559-addr = <0x4c>; >> + ti,tas2560-addr = <0x4d>; >> + }; >> +}; >> + >> +&i2c14 { >> + #dma-cells = <3>; > ditto > >> + status = "okay"; >> + clock-frequency = <400000>; >> + >> + dmas = <&gpi_dma1 0 6 QCOM_GPI_I2C>, >> + <&gpi_dma1 1 6 QCOM_GPI_I2C>; >> + dma-names = "tx", "rx"; >> + >> + touchscreen@20 { >> + compatible = "syna,rmi4-i2c"; >> + reg = <0x20>; >> + #address-cells = <1>; >> + #size-cells = <0>; >> + interrupts-extended = <&tlmm 125 0x2008>; >> + >> + pinctrl-names = "default", "sleep"; >> + pinctrl-0 = <&ts_int_default &ts_reset_default>; >> + pinctrl-1 = <&ts_int_sleep &ts_reset_sleep>; >> + >> + vdd-supply = <&vreg_l28a_3p0>; >> + vio-supply = <&vreg_tp_vddio>; >> + >> + syna,reset-delay-ms = <200>; >> + syna,startup-delay-ms = <200>; >> + >> + rmi4-f01@1 { >> + reg = <0x1>; >> + syna,nosleep-mode = <0x1>; > Decimal? > >> + }; >> + >> + rmi4-f12@12 { >> + reg = <0x12>; >> + syna,sensor-type = <1>; >> + syna,clip-x-low = <0>; >> + syna,clip-x-high = <1080>; >> + syna,clip-y-low = <0>; >> + syna,clip-y-high = <2160>; >> + syna,rezero-wait-ms = <200>; >> + }; >> + }; >> +}; >> + >> +&qup_i2c14_default { >> + mux { >> + pins = "gpio33", "gpio34"; >> + function = "qup14"; >> + }; > This part is identical to the one in sdm845.dtsi. > >> + >> + config { >> + pins = "gpio33", "gpio34"; >> + drive-strength = <2>; >> + bias-disable; >> + }; >> +}; >> + >> +&ipa { >> + status = "okay"; >> + >> + memory-region = <&ipa_fw_mem>; >> + firmware-name = "qcom/sdm845/polaris/ipa_fws.mbn"; >> +}; >> + >> +&slpi_pas { >> + status = "okay"; >> + firmware-name = "qcom/sdm845/polaris/slpi.mbn"; >> +}; >> + >> +&mdss { >> + status = "okay"; >> +}; > Sorted incorrectly. (ie, no alphabetically) > >> + >> +/* Modem/wifi*/ > I think this comment is redundant. > >> +&mss_pil { >> + status = "okay"; >> + firmware-name = "qcom/sdm845/polaris/mba.mbn", "qcom/sdm845/polaris/modem.mbn"; >> +}; >> + >> +&pm8998_gpio { >> + vol_up_pin_a: vol-up-active { >> + pins = "gpio6"; >> + function = "normal"; >> + input-enable; >> + bias-pull-up; >> + qcom,drive-strength = <PMIC_GPIO_STRENGTH_NO>; >> + }; >> +}; >> + >> +&pm8998_pon { >> + resin { >> + compatible = "qcom,pm8941-resin"; >> + interrupts = <0x0 0x8 1 IRQ_TYPE_EDGE_BOTH>; >> + debounce = <15625>; >> + bias-pull-up; >> + linux,code = <KEY_VOLUMEDOWN>; >> + }; >> +}; >> + >> +&pmi8998_haptics { > This is not in mainline. > >> + status = "okay"; >> + >> + qcom,wave-play-rate-us = <4255>; >> +}; >> + >> +&pmi8998_charger { > Neither is this. > >> + status = "okay"; >> + monitored-battery = <&battery>; >> +}; >> + >> +&pmi8998_fg { > Or this. > >> + status = "okay"; >> + >> + power-supplies = <&pmi8998_charger>; >> + monitored-battery = <&battery>; >> +}; >> + >> +&pmi8998_rradc { >> + status = "okay"; >> +}; >> + >> +&pmi8998_wled { >> + status = "okay"; >> + qcom,current-boost-limit = <970>; >> + qcom,ovp-millivolt = <29600>; >> + qcom,current-limit-microamp = <20000>; >> + qcom,num-strings = <2>; >> + qcom,switching-freq = <600>; >> + qcom,external-pfet; >> + qcom,cabc; >> +}; >> + >> +&q6afedai { >> + qi2s@22 { >> + reg = <22>; >> + qcom,sd-lines = <0>; >> + }; >> +}; >> + >> +&q6asmdai { >> + dai@0 { >> + reg = <0>; >> + }; >> + >> + dai@1 { >> + reg = <1>; >> + }; >> + >> + dai@2 { >> + reg = <2>; >> + }; >> +}; >> + >> +&q6cvp { > I don't think that's in mainline either.. >> + status = "okay"; >> +}; >> + >> +&q6cvs { > Or this.. >> + status = "okay"; >> +}; >> + >> +&q6mvm { > And this.. >> + status = "okay"; >> +}; >> + >> +&qupv3_id_0 { >> + status = "okay"; >> +}; >> + >> +&qupv3_id_1 { >> + status = "okay"; >> +}; >> + >> +&sound { >> + compatible = "qcom,db845c-sndcard"; >> + pinctrl-0 = <&quat_mi2s_active >> + &quat_mi2s_sd0_active>; >> + pinctrl-names = "default"; >> + model = "Xiaomi Mi Mix2s"; >> + audio-routing = >> + "RX_BIAS", "MCLK", >> + "AMIC1", "MIC BIAS1", >> + "AMIC2", "MIC BIAS2", >> + "AMIC3", "MIC BIAS3"; >> + >> + mm1-dai-link { >> + link-name = "MultiMedia1"; >> + cpu { >> + sound-dai = <&q6asmdai MSM_FRONTEND_DAI_MULTIMEDIA1>; >> + }; >> + }; >> + >> + mm2-dai-link { >> + link-name = "MultiMedia2"; >> + cpu { >> + sound-dai = <&q6asmdai MSM_FRONTEND_DAI_MULTIMEDIA2>; >> + }; >> + }; >> + >> + mm3-dai-link { >> + link-name = "MultiMedia3"; >> + cpu { >> + sound-dai = <&q6asmdai MSM_FRONTEND_DAI_MULTIMEDIA3>; >> + }; >> + }; >> + >> + dai-link-voicemmode1 { >> + link-name = "VoiceMMode1"; >> + cpu { >> + sound-dai = <&q6voicedai VOICEMMODE1>; > Consequently, some nodes will have to go since they're referencing > a device that does not have a driver or even exist in mainline. I > suppose you can remove the sound node entirely for the time being, > unless you have any kind of sound output without them. The voicemmode dai is only used for call audio, sound should otherwise work without it. That said, it's news to be that nodes without drivers can't go into mainline... > >> + }; >> + }; >> + >> + tas2559-dai-link { >> + link-name = "Primary Spkr Playback"; >> + cpu { >> + sound-dai = <&q6afedai QUATERNARY_MI2S_RX>; >> + }; >> + >> + platform { >> + sound-dai = <&q6routing>; >> + }; >> + >> + codec { >> + sound-dai = <&tas2559_codec 0>; >> + }; >> + }; >> + >> + slim-dai-link { >> + link-name = "SLIM Playback"; >> + cpu { >> + sound-dai = <&q6afedai SLIMBUS_0_RX>; >> + }; >> + >> + platform { >> + sound-dai = <&q6routing>; >> + }; >> + >> + codec { >> + sound-dai = <&wcd9340 0>; >> + }; >> + }; >> + >> + slimcap-dai-link { >> + link-name = "SLIM Capture"; >> + cpu { >> + sound-dai = <&q6afedai SLIMBUS_0_TX>; >> + }; >> + >> + platform { >> + sound-dai = <&q6routing>; >> + }; >> + >> + codec { >> + sound-dai = <&wcd9340 1>; >> + }; >> + }; >> +}; >> + >> +&tlmm { >> + gpio-reserved-ranges = <0 4>, <81 4>; >> + >> + ts_reset_default: ts-reset-default { >> + mux { > Please drop the extra mux{} / config{}. You can do it like this: > > ts_reset_default: ts-reset-default { > pins = "gpio99"; > function = "gpio"; > drive-strength = <16>; > output-high; > }; > >> + pins = "gpio99"; >> + function = "gpio"; >> + }; >> + >> + config { >> + pins = "gpio99"; >> + drive-strength = <16>; >> + output-high; >> + }; >> + }; >> + >> + ts_int_default: ts-int-default { >> + mux { >> + pins = "gpio125"; >> + function = "gpio"; >> + }; >> + >> + config { >> + pins = "gpio125"; >> + bias-pull-down; >> + drive-strength = <16>; >> + input-enable; >> + }; >> + }; >> + >> + ts_reset_sleep: ts-reset-sleep { >> + mux { >> + pins = "gpio99"; >> + function = "gpio"; >> + }; >> + >> + config { >> + pins = "gpio99"; >> + bias-disable; >> + drive-strength = <2>; >> + }; >> + }; >> + >> + ts_int_sleep: ts-int-sleep { >> + mux { >> + pins = "gpio125"; >> + function = "gpio"; >> + }; >> + >> + config { >> + pins = "gpio125"; >> + bias-pull-down; >> + drive-strength = <2>; >> + input-enable; >> + }; >> + }; >> + >> + sde_dsi_active: sde-dsi-active { >> + mux { >> + pins = "gpio6", "gpio10"; >> + function = "gpio"; >> + }; >> + >> + config { >> + pins = "gpio6", "gpio10"; >> + drive-strength = <8>; >> + bias-disable = <0>; >> + }; >> + }; >> + >> + sde_dsi_suspend: sde-dsi-suspend { >> + mux { >> + pins = "gpio6", "gpio10"; >> + function = "gpio"; >> + }; >> + >> + config { >> + pins = "gpio6", "gpio10"; >> + drive-strength = <2>; >> + bias-pull-down; >> + }; >> + }; >> + >> + wcd_intr_default: wcd-intr-default { >> + pins = <54>; >> + function = "gpio"; >> + >> + input-enable; >> + bias-pull-down; >> + drive-strength = <2>; >> + }; >> +}; >> + >> +&uart6 { >> + status = "okay"; >> + >> + bluetooth { >> + compatible = "qcom,wcn3990-bt"; >> + >> + /* >> + * This path is relative to the qca/ >> + * subdir under lib/firmware. >> + */ > This comment should fit in a single line. > >> + firmware-name = "polaris/crnv21.bin"; >> + >> + vddio-supply = <&vreg_s4a_1p8>; >> + vddxo-supply = <&vreg_l7a_1p8>; >> + vddrf-supply = <&vreg_l17a_1p3>; >> + vddch0-supply = <&vreg_l25a_3p3>; >> + max-speed = <3200000>; >> + }; >> +}; >> + >> +&usb_1 { >> + status = "okay"; >> + /* We'll use this as USB 2.0 only */ >> + qcom,select-utmi-as-pipe-clk; >> +}; >> + >> +&usb_1_dwc3 { >> + dr_mode = "peripheral"; >> + >> + /* fastest mode for USB 2 */ > Tiiiny nit, but since you have to send v(n+1) anyway, please make this > comment start with an uppercase letter. > > >> + maximum-speed = "high-speed"; >> + >> + /* Remove USB3 phy */ >> + phys = <&usb_1_hsphy>; >> + phy-names = "usb2-phy"; >> +}; >> + >> +&usb_1_hsphy { >> + status = "okay"; >> + >> + vdd-supply = <&vreg_l1a_0p875>; >> + vdda-pll-supply = <&vreg_l12a_1p8>; >> + vdda-phy-dpdm-supply = <&vreg_l24a_3p075>; >> + >> + qcom,imp-res-offset-value = <8>; >> + qcom,hstx-trim-value = <QUSB2_V2_HSTX_TRIM_21_6_MA>; >> + qcom,preemphasis-level = <QUSB2_V2_PREEMPHASIS_5_PERCENT>; >> + qcom,preemphasis-width = <QUSB2_V2_PREEMPHASIS_WIDTH_HALF_BIT>; >> +}; >> + >> +&usb_1_qmpphy { >> + status = "okay"; >> + >> + vdda-phy-supply = <&vreg_l26a_1p2>; >> + vdda-pll-supply = <&vreg_l1a_0p875>; >> +}; >> + >> +&ufs_mem_hc { >> + status = "okay"; >> + reset-gpios = <&tlmm 150 GPIO_ACTIVE_LOW>; >> + vcc-supply = <&vreg_l20a_2p95>; >> + vcc-max-microamp = <800000>; >> +}; >> + >> +&ufs_mem_phy { >> + status = "okay"; >> + vdda-phy-supply = <&vdda_ufs1_core>; >> + vdda-pll-supply = <&vdda_ufs1_1p2>; >> +}; >> + >> +&venus { >> + status = "okay"; >> + firmware-name = "qcom/sdm845/polaris/venus.mbn"; >> +}; >> + >> +&wcd9340{ > Missing space. > > Konrad >> + pinctrl-0 = <&wcd_intr_default>; >> + pinctrl-names = "default"; >> + clock-names = "extclk"; >> + clocks = <&rpmhcc RPMH_LN_BB_CLK2>; >> + reset-gpios = <&tlmm 64 0>; >> + vdd-buck-supply = <&vreg_s4a_1p8>; >> + vdd-buck-sido-supply = <&vreg_s4a_1p8>; >> + vdd-tx-supply = <&vreg_s4a_1p8>; >> + vdd-rx-supply = <&vreg_s4a_1p8>; >> + vdd-io-supply = <&vreg_s4a_1p8>; >> + qcom,micbias1-microvolt = <2700000>; >> + qcom,micbias2-microvolt = <1800000>; >> + qcom,micbias3-microvolt = <2700000>; >> + qcom,micbias4-microvolt = <2700000>; >> +}; >> + >> +&wifi { >> + status = "okay"; >> + >> + vdd-0.8-cx-mx-supply = <&vreg_l5a_0p8>; >> + vdd-1.8-xo-supply = <&vreg_l7a_1p8>; >> + vdd-1.3-rfa-supply = <&vreg_l17a_1p3>; >> + vdd-3.3-ch0-supply = <&vreg_l25a_3p3>; >> + vdd-3.3-ch1-supply = <&vreg_l23a_3p3>; >> + >> + qcom,snoc-host-cap-skip-quirk; >> +}; >> + >> +/* PINCTRL - additions to nodes defined in sdm845.dtsi */ This comment can be dropped >> + >> +&qup_uart6_default { >> + pinmux { >> + pins = "gpio45", "gpio46", "gpio47", "gpio48"; >> + function = "qup6"; >> + }; >> + >> + cts { >> + pins = "gpio45"; >> + bias-disable; >> + }; >> + >> + rts-tx { >> + pins = "gpio46", "gpio47"; >> + drive-strength = <2>; >> + bias-disable; >> + }; >> + >> + rx { >> + pins = "gpio48"; >> + bias-pull-up; >> + }; >> +}; >> >
diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile index 77ba2c9661d3..628b95e1012b 100644 --- a/arch/arm64/boot/dts/qcom/Makefile +++ b/arch/arm64/boot/dts/qcom/Makefile @@ -112,6 +112,7 @@ dtb-$(CONFIG_ARCH_QCOM) += sdm845-sony-xperia-tama-apollo.dtb dtb-$(CONFIG_ARCH_QCOM) += sdm845-shift-axolotl.dtb dtb-$(CONFIG_ARCH_QCOM) += sdm845-xiaomi-beryllium-ebbg.dtb dtb-$(CONFIG_ARCH_QCOM) += sdm845-xiaomi-beryllium-tianma.dtb +dtb-$(CONFIG_ARCH_QCOM) += sdm845-xiaomi-polaris.dtb dtb-$(CONFIG_ARCH_QCOM) += sdm850-lenovo-yoga-c630.dtb dtb-$(CONFIG_ARCH_QCOM) += sdm850-samsung-w737.dtb dtb-$(CONFIG_ARCH_QCOM) += sm6125-sony-xperia-seine-pdx201.dtb diff --git a/arch/arm64/boot/dts/qcom/sdm845-xiaomi-polaris.dts b/arch/arm64/boot/dts/qcom/sdm845-xiaomi-polaris.dts new file mode 100644 index 000000000000..d3e535a542ef --- /dev/null +++ b/arch/arm64/boot/dts/qcom/sdm845-xiaomi-polaris.dts @@ -0,0 +1,963 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2020, Xilin Wu <strongtz@yeah.net> + * Copyright (c) 2022, Molly Sophia <mollysophia379@gmail.com> + */ + +/dts-v1/; + +#include <dt-bindings/gpio/gpio.h> +#include <dt-bindings/pinctrl/qcom,pmic-gpio.h> +#include <dt-bindings/regulator/qcom,rpmh-regulator.h> +#include <dt-bindings/input/linux-event-codes.h> +#include <dt-bindings/sound/qcom,q6afe.h> +#include <dt-bindings/sound/qcom,q6asm.h> +#include <dt-bindings/sound/qcom,q6afe.h> +#include <dt-bindings/sound/qcom,q6asm.h> +#include <dt-bindings/sound/qcom,q6voice.h> +#include "sdm845.dtsi" +#include "pm8998.dtsi" +#include "pmi8998.dtsi" +#include "pm8005.dtsi" + +/* + * Delete following upstream (sdm845.dtsi) reserved + * memory mappings which are different in this device. + */ +/delete-node/ &rmtfs_mem; +/delete-node/ &adsp_mem; +/delete-node/ &wlan_msa_mem; +/delete-node/ &mpss_region; +/delete-node/ &venus_mem; +/delete-node/ &cdsp_mem; +/delete-node/ &mba_region; +/delete-node/ &slpi_mem; +/delete-node/ &spss_mem; + +/ { + model = "Xiaomi Mi MIX 2s"; + compatible = "xiaomi,polaris", "qcom,sdm845"; + chassis-type = "handset"; + + /* required for bootloader to select correct board */ + qcom,board-id = <0x2a 0x0>; + qcom,msm-id = <0x141 0x20001>; + + aliases { + serial0 = &uart9; + serial1 = &uart6; + }; + + volume-keys { + compatible = "gpio-keys"; + autorepeat; + + pinctrl-names = "default"; + pinctrl-0 = <&vol_up_pin_a>; + + key-vol-up { + label = "Volume Up"; + linux,code = <KEY_VOLUMEUP>; + gpios = <&pm8998_gpio 6 GPIO_ACTIVE_LOW>; + debounce-interval = <15>; + }; + }; + + reserved-memory { + adsp_mem: memory@8c500000 { + reg = <0 0x8c500000 0 0x1e00000>; + no-map; + }; + + wlan_msa_mem: memory@8e300000 { + reg = <0 0x8e300000 0 0x100000>; + no-map; + }; + + mpss_region: memory@8e400000 { + reg = <0 0x8e400000 0 0x7800000>; + no-map; + }; + + venus_mem: memory@95c00000 { + reg = <0 0x95c00000 0 0x500000>; + no-map; + }; + + cdsp_mem: memory@96100000 { + reg = <0 0x96100000 0 0x800000>; + no-map; + }; + + mba_region: memory@96900000 { + reg = <0 0x96900000 0 0x200000>; + no-map; + }; + + slpi_mem: memory@96b00000 { + reg = <0 0x96b00000 0 0x1400000>; + no-map; + }; + + spss_mem: memory@97f00000 { + reg = <0 0x97f00000 0 0x100000>; + no-map; + }; + + rmtfs_mem: memory@f6301000 { + compatible = "qcom,rmtfs-mem"; + reg = <0 0xf6301000 0 0x200000>; + no-map; + + qcom,client-id = <1>; + qcom,vmid = <15>; + }; + }; + + battery: battery { + compatible = "simple-battery"; + + charge-full-design-microamp-hours = <3400000>; + voltage-min-design-microvolt = <3400000>; + voltage-max-design-microvolt = <4400000>; + }; + + vreg_tp_vddio: tp-vddio-vreg { + compatible = "regulator-fixed"; + regulator-name = "vreg_tp_vddio"; + + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + + gpio = <&tlmm 23 0>; + regulator-always-on; + regulator-boot-on; + enable-active-high; + }; + + vreg_s4a_1p8: vreg-s4a-1p8 { + compatible = "regulator-fixed"; + regulator-name = "vreg_s4a_1p8"; + + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-always-on; + }; +}; + +&apps_rsc { + pm8998-rpmh-regulators { + compatible = "qcom,pm8998-rpmh-regulators"; + qcom,pmic-id = "a"; + + vreg_s2a_1p1: smps2 { + regulator-min-microvolt = <1100000>; + regulator-max-microvolt = <1100000>; + }; + + vreg_s3a_1p35: smps3 { + regulator-min-microvolt = <1352000>; + regulator-max-microvolt = <1352000>; + }; + + vreg_s5a_2p04: smps5 { + regulator-min-microvolt = <1904000>; + regulator-max-microvolt = <2040000>; + }; + + vreg_s7a_1p025: smps7 { + regulator-min-microvolt = <900000>; + regulator-max-microvolt = <1028000>; + }; + + vdda_mipi_dsi0_pll: + vdda_ufs1_core: + vreg_l1a_0p875: ldo1 { + regulator-min-microvolt = <880000>; + regulator-max-microvolt = <880000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l2a_1p2: ldo2 { + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <1200000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + regulator-always-on; + }; + + vreg_l3a_1p0: ldo3 { + regulator-min-microvolt = <1000000>; + regulator-max-microvolt = <1000000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l5a_0p8: ldo5 { + regulator-min-microvolt = <800000>; + regulator-max-microvolt = <800000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l6a_1p8: ldo6 { + regulator-min-microvolt = <1856000>; + regulator-max-microvolt = <1856000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l7a_1p8: ldo7 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l8a_1p2: ldo8 { + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <1248000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l9a_1p8: ldo9 { + regulator-min-microvolt = <1704000>; + regulator-max-microvolt = <2928000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l10a_2p95: ldo10 { + regulator-min-microvolt = <1704000>; + regulator-max-microvolt = <2928000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l11a_1p05: ldo11 { + regulator-min-microvolt = <1000000>; + regulator-max-microvolt = <1048000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l12a_1p8: ldo12 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l13a_2p95: ldo13 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <2960000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l14a_1p8: ldo14 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1880000>; + regulator-always-on; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l15a_1p8: ldo15 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l16a_2p7: ldo16 { + regulator-min-microvolt = <2704000>; + regulator-max-microvolt = <2704000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l17a_1p3: ldo17 { + regulator-always-on; + regulator-min-microvolt = <1304000>; + regulator-max-microvolt = <1304000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l18a_2p9: ldo18 { + regulator-min-microvolt = <2704000>; + regulator-max-microvolt = <2960000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l19a_3p1: ldo19 { + regulator-min-microvolt = <2856000>; + regulator-max-microvolt = <3104000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l20a_2p95: ldo20 { + regulator-min-microvolt = <2704000>; + regulator-max-microvolt = <2960000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l21a_2p95: ldo21 { + regulator-min-microvolt = <2704000>; + regulator-max-microvolt = <2960000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l22a_3p3: ldo22 { + regulator-min-microvolt = <2864000>; + regulator-max-microvolt = <3312000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l23a_3p3: ldo23 { + regulator-min-microvolt = <3000000>; + regulator-max-microvolt = <3312000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l24a_3p075: ldo24 { + regulator-min-microvolt = <3088000>; + regulator-max-microvolt = <3088000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l25a_3p3: ldo25 { + regulator-always-on; + regulator-min-microvolt = <3000000>; + regulator-max-microvolt = <3312000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vdda_mipi_dsi0_1p2: + vdda_ufs1_1p2: + vreg_l26a_1p2: ldo26 { + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <1200000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l28a_3p0: ldo28 { + regulator-min-microvolt = <2856000>; + regulator-max-microvolt = <3008000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + regulator-always-on; + }; + + vreg_lvs1a_1p8: lvs1 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + }; + + vreg_lvs2a_1p8: lvs2 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + }; + }; + + pmi8998-rpmh-regulators { + compatible = "qcom,pmi8998-rpmh-regulators"; + qcom,pmic-id = "b"; + + vreg_bob: bob { + regulator-min-microvolt = <3312000>; + regulator-max-microvolt = <3600000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_AUTO>; + regulator-allow-bypass; + }; + }; + + pm8005-rpmh-regulators { + compatible = "qcom,pm8005-rpmh-regulators"; + qcom,pmic-id = "c"; + + vreg_smp3c_0p6: smps3 { + regulator-always-on; + regulator-min-microvolt = <600000>; + regulator-max-microvolt = <600000>; + }; + }; +}; + +&gpi_dma0 { + status = "okay"; +}; + +&gpi_dma1 { + status = "okay"; +}; + +&cdsp_pas { + status = "okay"; + firmware-name = "qcom/sdm845/polaris/cdsp.mbn"; +}; + +&dsi0 { + status = "okay"; + vdda-supply = <&vdda_mipi_dsi0_1p2>; + + display_panel: panel@0 { + status = "okay"; + compatible = "jdi,fhd-nt35596s"; + #address-cells = <1>; + #size-cells = <0>; + reg = <0>; + + vddio-supply = <&vreg_l14a_1p8>; + vddpos-supply = <&lab>; + vddneg-supply = <&ibb>; + + reset-gpios = <&tlmm 6 GPIO_ACTIVE_LOW>; + + backlight = <&pmi8998_wled>; + + pinctrl-names = "default", "sleep"; + pinctrl-0 = <&sde_dsi_active>; + pinctrl-1 = <&sde_dsi_suspend>; + + port { + panel_in: endpoint { + remote-endpoint = <&dsi0_out>; + }; + }; + }; +}; + +&dsi0_out { + remote-endpoint = <&panel_in>; + data-lanes = <0 1 2 3>; +}; + +&dsi0_phy { + status = "okay"; + vdds-supply = <&vdda_mipi_dsi0_pll>; +}; + +&gcc { + protected-clocks = <GCC_QSPI_CORE_CLK>, + <GCC_QSPI_CORE_CLK_SRC>, + <GCC_QSPI_CNOC_PERIPH_AHB_CLK>, + <GCC_LPASS_Q6_AXI_CLK>, + <GCC_LPASS_SWAY_CLK>; +}; + +&gmu { + status = "okay"; +}; + +&gpu { + status = "okay"; + + zap-shader { + memory-region = <&gpu_mem>; + firmware-name = "qcom/sdm845/polaris/a630_zap.mbn"; + }; +}; + +&ibb { + regulator-min-microvolt = <4600000>; + regulator-max-microvolt = <6000000>; + regulator-over-current-protection; + regulator-pull-down; + regulator-soft-start; + qcom,discharge-resistor-kohms = <300>; +}; + +&lab { + regulator-min-microvolt = <4600000>; + regulator-max-microvolt = <6000000>; + // regulator-over-current-protection; + regulator-pull-down; + regulator-soft-start; +}; + +&i2c5 { + #dma-cells = <3>; + status = "okay"; + clock-frequency = <400000>; + + dmas = <&gpi_dma0 0 5 QCOM_GPI_I2C>, + <&gpi_dma0 1 5 QCOM_GPI_I2C>; + dma-names = "tx", "rx"; + + tas2559_codec: codec@4c{ + #sound-dai-cells = <1>; + compatible = "ti,tas2559"; + reg = <0x4c>; + ti,tas2559-reset-gpio = <&tlmm 14 0>; + ti,tas2560-reset-gpio = <&tlmm 25 0>; + ti,tas2559-addr = <0x4c>; + ti,tas2560-addr = <0x4d>; + }; +}; + +&i2c14 { + #dma-cells = <3>; + status = "okay"; + clock-frequency = <400000>; + + dmas = <&gpi_dma1 0 6 QCOM_GPI_I2C>, + <&gpi_dma1 1 6 QCOM_GPI_I2C>; + dma-names = "tx", "rx"; + + touchscreen@20 { + compatible = "syna,rmi4-i2c"; + reg = <0x20>; + #address-cells = <1>; + #size-cells = <0>; + interrupts-extended = <&tlmm 125 0x2008>; + + pinctrl-names = "default", "sleep"; + pinctrl-0 = <&ts_int_default &ts_reset_default>; + pinctrl-1 = <&ts_int_sleep &ts_reset_sleep>; + + vdd-supply = <&vreg_l28a_3p0>; + vio-supply = <&vreg_tp_vddio>; + + syna,reset-delay-ms = <200>; + syna,startup-delay-ms = <200>; + + rmi4-f01@1 { + reg = <0x1>; + syna,nosleep-mode = <0x1>; + }; + + rmi4-f12@12 { + reg = <0x12>; + syna,sensor-type = <1>; + syna,clip-x-low = <0>; + syna,clip-x-high = <1080>; + syna,clip-y-low = <0>; + syna,clip-y-high = <2160>; + syna,rezero-wait-ms = <200>; + }; + }; +}; + +&qup_i2c14_default { + mux { + pins = "gpio33", "gpio34"; + function = "qup14"; + }; + + config { + pins = "gpio33", "gpio34"; + drive-strength = <2>; + bias-disable; + }; +}; + +&ipa { + status = "okay"; + + memory-region = <&ipa_fw_mem>; + firmware-name = "qcom/sdm845/polaris/ipa_fws.mbn"; +}; + +&slpi_pas { + status = "okay"; + firmware-name = "qcom/sdm845/polaris/slpi.mbn"; +}; + +&mdss { + status = "okay"; +}; + +/* Modem/wifi*/ +&mss_pil { + status = "okay"; + firmware-name = "qcom/sdm845/polaris/mba.mbn", "qcom/sdm845/polaris/modem.mbn"; +}; + +&pm8998_gpio { + vol_up_pin_a: vol-up-active { + pins = "gpio6"; + function = "normal"; + input-enable; + bias-pull-up; + qcom,drive-strength = <PMIC_GPIO_STRENGTH_NO>; + }; +}; + +&pm8998_pon { + resin { + compatible = "qcom,pm8941-resin"; + interrupts = <0x0 0x8 1 IRQ_TYPE_EDGE_BOTH>; + debounce = <15625>; + bias-pull-up; + linux,code = <KEY_VOLUMEDOWN>; + }; +}; + +&pmi8998_haptics { + status = "okay"; + + qcom,wave-play-rate-us = <4255>; +}; + +&pmi8998_charger { + status = "okay"; + monitored-battery = <&battery>; +}; + +&pmi8998_fg { + status = "okay"; + + power-supplies = <&pmi8998_charger>; + monitored-battery = <&battery>; +}; + +&pmi8998_rradc { + status = "okay"; +}; + +&pmi8998_wled { + status = "okay"; + qcom,current-boost-limit = <970>; + qcom,ovp-millivolt = <29600>; + qcom,current-limit-microamp = <20000>; + qcom,num-strings = <2>; + qcom,switching-freq = <600>; + qcom,external-pfet; + qcom,cabc; +}; + +&q6afedai { + qi2s@22 { + reg = <22>; + qcom,sd-lines = <0>; + }; +}; + +&q6asmdai { + dai@0 { + reg = <0>; + }; + + dai@1 { + reg = <1>; + }; + + dai@2 { + reg = <2>; + }; +}; + +&q6cvp { + status = "okay"; +}; + +&q6cvs { + status = "okay"; +}; + +&q6mvm { + status = "okay"; +}; + +&qupv3_id_0 { + status = "okay"; +}; + +&qupv3_id_1 { + status = "okay"; +}; + +&sound { + compatible = "qcom,db845c-sndcard"; + pinctrl-0 = <&quat_mi2s_active + &quat_mi2s_sd0_active>; + pinctrl-names = "default"; + model = "Xiaomi Mi Mix2s"; + audio-routing = + "RX_BIAS", "MCLK", + "AMIC1", "MIC BIAS1", + "AMIC2", "MIC BIAS2", + "AMIC3", "MIC BIAS3"; + + mm1-dai-link { + link-name = "MultiMedia1"; + cpu { + sound-dai = <&q6asmdai MSM_FRONTEND_DAI_MULTIMEDIA1>; + }; + }; + + mm2-dai-link { + link-name = "MultiMedia2"; + cpu { + sound-dai = <&q6asmdai MSM_FRONTEND_DAI_MULTIMEDIA2>; + }; + }; + + mm3-dai-link { + link-name = "MultiMedia3"; + cpu { + sound-dai = <&q6asmdai MSM_FRONTEND_DAI_MULTIMEDIA3>; + }; + }; + + dai-link-voicemmode1 { + link-name = "VoiceMMode1"; + cpu { + sound-dai = <&q6voicedai VOICEMMODE1>; + }; + }; + + tas2559-dai-link { + link-name = "Primary Spkr Playback"; + cpu { + sound-dai = <&q6afedai QUATERNARY_MI2S_RX>; + }; + + platform { + sound-dai = <&q6routing>; + }; + + codec { + sound-dai = <&tas2559_codec 0>; + }; + }; + + slim-dai-link { + link-name = "SLIM Playback"; + cpu { + sound-dai = <&q6afedai SLIMBUS_0_RX>; + }; + + platform { + sound-dai = <&q6routing>; + }; + + codec { + sound-dai = <&wcd9340 0>; + }; + }; + + slimcap-dai-link { + link-name = "SLIM Capture"; + cpu { + sound-dai = <&q6afedai SLIMBUS_0_TX>; + }; + + platform { + sound-dai = <&q6routing>; + }; + + codec { + sound-dai = <&wcd9340 1>; + }; + }; +}; + +&tlmm { + gpio-reserved-ranges = <0 4>, <81 4>; + + ts_reset_default: ts-reset-default { + mux { + pins = "gpio99"; + function = "gpio"; + }; + + config { + pins = "gpio99"; + drive-strength = <16>; + output-high; + }; + }; + + ts_int_default: ts-int-default { + mux { + pins = "gpio125"; + function = "gpio"; + }; + + config { + pins = "gpio125"; + bias-pull-down; + drive-strength = <16>; + input-enable; + }; + }; + + ts_reset_sleep: ts-reset-sleep { + mux { + pins = "gpio99"; + function = "gpio"; + }; + + config { + pins = "gpio99"; + bias-disable; + drive-strength = <2>; + }; + }; + + ts_int_sleep: ts-int-sleep { + mux { + pins = "gpio125"; + function = "gpio"; + }; + + config { + pins = "gpio125"; + bias-pull-down; + drive-strength = <2>; + input-enable; + }; + }; + + sde_dsi_active: sde-dsi-active { + mux { + pins = "gpio6", "gpio10"; + function = "gpio"; + }; + + config { + pins = "gpio6", "gpio10"; + drive-strength = <8>; + bias-disable = <0>; + }; + }; + + sde_dsi_suspend: sde-dsi-suspend { + mux { + pins = "gpio6", "gpio10"; + function = "gpio"; + }; + + config { + pins = "gpio6", "gpio10"; + drive-strength = <2>; + bias-pull-down; + }; + }; + + wcd_intr_default: wcd-intr-default { + pins = <54>; + function = "gpio"; + + input-enable; + bias-pull-down; + drive-strength = <2>; + }; +}; + +&uart6 { + status = "okay"; + + bluetooth { + compatible = "qcom,wcn3990-bt"; + + /* + * This path is relative to the qca/ + * subdir under lib/firmware. + */ + firmware-name = "polaris/crnv21.bin"; + + vddio-supply = <&vreg_s4a_1p8>; + vddxo-supply = <&vreg_l7a_1p8>; + vddrf-supply = <&vreg_l17a_1p3>; + vddch0-supply = <&vreg_l25a_3p3>; + max-speed = <3200000>; + }; +}; + +&usb_1 { + status = "okay"; + /* We'll use this as USB 2.0 only */ + qcom,select-utmi-as-pipe-clk; +}; + +&usb_1_dwc3 { + dr_mode = "peripheral"; + + /* fastest mode for USB 2 */ + maximum-speed = "high-speed"; + + /* Remove USB3 phy */ + phys = <&usb_1_hsphy>; + phy-names = "usb2-phy"; +}; + +&usb_1_hsphy { + status = "okay"; + + vdd-supply = <&vreg_l1a_0p875>; + vdda-pll-supply = <&vreg_l12a_1p8>; + vdda-phy-dpdm-supply = <&vreg_l24a_3p075>; + + qcom,imp-res-offset-value = <8>; + qcom,hstx-trim-value = <QUSB2_V2_HSTX_TRIM_21_6_MA>; + qcom,preemphasis-level = <QUSB2_V2_PREEMPHASIS_5_PERCENT>; + qcom,preemphasis-width = <QUSB2_V2_PREEMPHASIS_WIDTH_HALF_BIT>; +}; + +&usb_1_qmpphy { + status = "okay"; + + vdda-phy-supply = <&vreg_l26a_1p2>; + vdda-pll-supply = <&vreg_l1a_0p875>; +}; + +&ufs_mem_hc { + status = "okay"; + reset-gpios = <&tlmm 150 GPIO_ACTIVE_LOW>; + vcc-supply = <&vreg_l20a_2p95>; + vcc-max-microamp = <800000>; +}; + +&ufs_mem_phy { + status = "okay"; + vdda-phy-supply = <&vdda_ufs1_core>; + vdda-pll-supply = <&vdda_ufs1_1p2>; +}; + +&venus { + status = "okay"; + firmware-name = "qcom/sdm845/polaris/venus.mbn"; +}; + +&wcd9340{ + pinctrl-0 = <&wcd_intr_default>; + pinctrl-names = "default"; + clock-names = "extclk"; + clocks = <&rpmhcc RPMH_LN_BB_CLK2>; + reset-gpios = <&tlmm 64 0>; + vdd-buck-supply = <&vreg_s4a_1p8>; + vdd-buck-sido-supply = <&vreg_s4a_1p8>; + vdd-tx-supply = <&vreg_s4a_1p8>; + vdd-rx-supply = <&vreg_s4a_1p8>; + vdd-io-supply = <&vreg_s4a_1p8>; + qcom,micbias1-microvolt = <2700000>; + qcom,micbias2-microvolt = <1800000>; + qcom,micbias3-microvolt = <2700000>; + qcom,micbias4-microvolt = <2700000>; +}; + +&wifi { + status = "okay"; + + vdd-0.8-cx-mx-supply = <&vreg_l5a_0p8>; + vdd-1.8-xo-supply = <&vreg_l7a_1p8>; + vdd-1.3-rfa-supply = <&vreg_l17a_1p3>; + vdd-3.3-ch0-supply = <&vreg_l25a_3p3>; + vdd-3.3-ch1-supply = <&vreg_l23a_3p3>; + + qcom,snoc-host-cap-skip-quirk; +}; + +/* PINCTRL - additions to nodes defined in sdm845.dtsi */ + +&qup_uart6_default { + pinmux { + pins = "gpio45", "gpio46", "gpio47", "gpio48"; + function = "qup6"; + }; + + cts { + pins = "gpio45"; + bias-disable; + }; + + rts-tx { + pins = "gpio46", "gpio47"; + drive-strength = <2>; + bias-disable; + }; + + rx { + pins = "gpio48"; + bias-pull-up; + }; +};
Add support for Xiaomi Mi Mix2s (polaris) handsets. Currently working features: - UFS - Touchscreen - USB 2 - Bluetooth - Wi-Fi - GPU - Venus - Display (need jdi-fhd-nt35596s panel driver, which I have sent a patch but it haven't been into upstream yet) Signed-off-by: MollySophia <mollysophia379@gmail.com> --- arch/arm64/boot/dts/qcom/Makefile | 1 + .../boot/dts/qcom/sdm845-xiaomi-polaris.dts | 963 ++++++++++++++++++ 2 files changed, 964 insertions(+) create mode 100644 arch/arm64/boot/dts/qcom/sdm845-xiaomi-polaris.dts