| // SPDX-License-Identifier: (GPL-2.0+ OR MIT) |
| /* |
| * Google Cheza device tree source (common between revisions) |
| * |
| * Copyright 2018 Google LLC. |
| */ |
| |
| #include <dt-bindings/input/input.h> |
| #include <dt-bindings/regulator/qcom,rpmh-regulator.h> |
| #include "sdm845.dtsi" |
| |
| /* PMICs depend on spmi_bus label and so must come after SoC */ |
| #include "pm8005.dtsi" |
| #include "pm8998.dtsi" |
| |
| / { |
| aliases { |
| bluetooth0 = &bluetooth; |
| serial1 = &uart6; |
| serial0 = &uart9; |
| wifi0 = &wifi; |
| }; |
| |
| chosen { |
| stdout-path = "serial0:115200n8"; |
| }; |
| |
| backlight: backlight { |
| compatible = "pwm-backlight"; |
| pwms = <&cros_ec_pwm 0>; |
| enable-gpios = <&tlmm 37 GPIO_ACTIVE_HIGH>; |
| power-supply = <&ppvar_sys>; |
| pinctrl-names = "default"; |
| pinctrl-0 = <&ap_edp_bklten>; |
| }; |
| |
| /* FIXED REGULATORS - parents above children */ |
| |
| /* This is the top level supply and variable voltage */ |
| ppvar_sys: ppvar-sys-regulator { |
| compatible = "regulator-fixed"; |
| regulator-name = "ppvar_sys"; |
| regulator-always-on; |
| regulator-boot-on; |
| }; |
| |
| /* This divides ppvar_sys by 2, so voltage is variable */ |
| src_vph_pwr: src-vph-pwr-regulator { |
| compatible = "regulator-fixed"; |
| regulator-name = "src_vph_pwr"; |
| |
| /* EC turns on with switchcap_on_l; always on for AP */ |
| regulator-always-on; |
| regulator-boot-on; |
| |
| vin-supply = <&ppvar_sys>; |
| }; |
| |
| pp5000_a: pp5000-a-regulator { |
| compatible = "regulator-fixed"; |
| regulator-name = "pp5000_a"; |
| |
| /* EC turns on with en_pp5000_a; always on for AP */ |
| regulator-always-on; |
| regulator-boot-on; |
| regulator-min-microvolt = <5000000>; |
| regulator-max-microvolt = <5000000>; |
| |
| vin-supply = <&ppvar_sys>; |
| }; |
| |
| src_vreg_bob: src-vreg-bob-regulator { |
| compatible = "regulator-fixed"; |
| regulator-name = "src_vreg_bob"; |
| |
| /* EC turns on with vbob_en; always on for AP */ |
| regulator-always-on; |
| regulator-boot-on; |
| regulator-min-microvolt = <3600000>; |
| regulator-max-microvolt = <3600000>; |
| |
| vin-supply = <&ppvar_sys>; |
| }; |
| |
| pp3300_dx_edp: pp3300-dx-edp-regulator { |
| compatible = "regulator-fixed"; |
| regulator-name = "pp3300_dx_edp"; |
| |
| regulator-min-microvolt = <3300000>; |
| regulator-max-microvolt = <3300000>; |
| |
| gpio = <&tlmm 43 GPIO_ACTIVE_HIGH>; |
| enable-active-high; |
| pinctrl-names = "default"; |
| pinctrl-0 = <&en_pp3300_dx_edp>; |
| }; |
| |
| /* |
| * Apparently RPMh does not provide support for PM8998 S4 because it |
| * is always-on; model it as a fixed regulator. |
| */ |
| src_pp1800_s4a: pm8998-smps4 { |
| compatible = "regulator-fixed"; |
| regulator-name = "src_pp1800_s4a"; |
| |
| regulator-min-microvolt = <1800000>; |
| regulator-max-microvolt = <1800000>; |
| |
| regulator-always-on; |
| regulator-boot-on; |
| |
| vin-supply = <&src_vph_pwr>; |
| }; |
| |
| /* BOARD-SPECIFIC TOP LEVEL NODES */ |
| |
| gpio-keys { |
| compatible = "gpio-keys"; |
| pinctrl-names = "default"; |
| pinctrl-0 = <&pen_eject_odl>; |
| |
| switch-pen-insert { |
| label = "Pen Insert"; |
| /* Insert = low, eject = high */ |
| gpios = <&tlmm 119 GPIO_ACTIVE_LOW>; |
| linux,code = <SW_PEN_INSERTED>; |
| linux,input-type = <EV_SW>; |
| wakeup-source; |
| }; |
| }; |
| |
| panel: panel { |
| compatible = "innolux,p120zdg-bf1"; |
| power-supply = <&pp3300_dx_edp>; |
| backlight = <&backlight>; |
| no-hpd; |
| |
| panel_in: port { |
| panel_in_edp: endpoint { |
| remote-endpoint = <&sn65dsi86_out>; |
| }; |
| }; |
| }; |
| }; |
| |
| &cpufreq_hw { |
| /delete-property/ interrupts-extended; /* reference to lmh_cluster[01] */ |
| }; |
| |
| &psci { |
| /delete-node/ power-domain-cpu0; |
| /delete-node/ power-domain-cpu1; |
| /delete-node/ power-domain-cpu2; |
| /delete-node/ power-domain-cpu3; |
| /delete-node/ power-domain-cpu4; |
| /delete-node/ power-domain-cpu5; |
| /delete-node/ power-domain-cpu6; |
| /delete-node/ power-domain-cpu7; |
| /delete-node/ power-domain-cluster; |
| }; |
| |
| &cpus { |
| /delete-node/ domain-idle-states; |
| }; |
| |
| &cpu_idle_states { |
| LITTLE_CPU_SLEEP_0: cpu-sleep-0-0 { |
| compatible = "arm,idle-state"; |
| idle-state-name = "little-power-down"; |
| arm,psci-suspend-param = <0x40000003>; |
| entry-latency-us = <350>; |
| exit-latency-us = <461>; |
| min-residency-us = <1890>; |
| local-timer-stop; |
| }; |
| |
| LITTLE_CPU_SLEEP_1: cpu-sleep-0-1 { |
| compatible = "arm,idle-state"; |
| idle-state-name = "little-rail-power-down"; |
| arm,psci-suspend-param = <0x40000004>; |
| entry-latency-us = <360>; |
| exit-latency-us = <531>; |
| min-residency-us = <3934>; |
| local-timer-stop; |
| }; |
| |
| BIG_CPU_SLEEP_0: cpu-sleep-1-0 { |
| compatible = "arm,idle-state"; |
| idle-state-name = "big-power-down"; |
| arm,psci-suspend-param = <0x40000003>; |
| entry-latency-us = <264>; |
| exit-latency-us = <621>; |
| min-residency-us = <952>; |
| local-timer-stop; |
| }; |
| |
| BIG_CPU_SLEEP_1: cpu-sleep-1-1 { |
| compatible = "arm,idle-state"; |
| idle-state-name = "big-rail-power-down"; |
| arm,psci-suspend-param = <0x40000004>; |
| entry-latency-us = <702>; |
| exit-latency-us = <1061>; |
| min-residency-us = <4488>; |
| local-timer-stop; |
| }; |
| |
| CLUSTER_SLEEP_0: cluster-sleep-0 { |
| compatible = "arm,idle-state"; |
| idle-state-name = "cluster-power-down"; |
| arm,psci-suspend-param = <0x400000F4>; |
| entry-latency-us = <3263>; |
| exit-latency-us = <6562>; |
| min-residency-us = <9987>; |
| local-timer-stop; |
| }; |
| }; |
| |
| &CPU0 { |
| /delete-property/ power-domains; |
| /delete-property/ power-domain-names; |
| cpu-idle-states = <&LITTLE_CPU_SLEEP_0 |
| &LITTLE_CPU_SLEEP_1 |
| &CLUSTER_SLEEP_0>; |
| }; |
| |
| &CPU1 { |
| /delete-property/ power-domains; |
| /delete-property/ power-domain-names; |
| cpu-idle-states = <&LITTLE_CPU_SLEEP_0 |
| &LITTLE_CPU_SLEEP_1 |
| &CLUSTER_SLEEP_0>; |
| }; |
| |
| &CPU2 { |
| /delete-property/ power-domains; |
| /delete-property/ power-domain-names; |
| cpu-idle-states = <&LITTLE_CPU_SLEEP_0 |
| &LITTLE_CPU_SLEEP_1 |
| &CLUSTER_SLEEP_0>; |
| }; |
| |
| &CPU3 { |
| /delete-property/ power-domains; |
| /delete-property/ power-domain-names; |
| cpu-idle-states = <&LITTLE_CPU_SLEEP_0 |
| &LITTLE_CPU_SLEEP_1 |
| &CLUSTER_SLEEP_0>; |
| }; |
| |
| &CPU4 { |
| /delete-property/ power-domains; |
| /delete-property/ power-domain-names; |
| cpu-idle-states = <&BIG_CPU_SLEEP_0 |
| &BIG_CPU_SLEEP_1 |
| &CLUSTER_SLEEP_0>; |
| }; |
| |
| &CPU5 { |
| /delete-property/ power-domains; |
| /delete-property/ power-domain-names; |
| cpu-idle-states = <&BIG_CPU_SLEEP_0 |
| &BIG_CPU_SLEEP_1 |
| &CLUSTER_SLEEP_0>; |
| }; |
| |
| &CPU6 { |
| /delete-property/ power-domains; |
| /delete-property/ power-domain-names; |
| cpu-idle-states = <&BIG_CPU_SLEEP_0 |
| &BIG_CPU_SLEEP_1 |
| &CLUSTER_SLEEP_0>; |
| }; |
| |
| &CPU7 { |
| /delete-property/ power-domains; |
| /delete-property/ power-domain-names; |
| cpu-idle-states = <&BIG_CPU_SLEEP_0 |
| &BIG_CPU_SLEEP_1 |
| &CLUSTER_SLEEP_0>; |
| }; |
| |
| &lmh_cluster0 { |
| status = "disabled"; |
| }; |
| |
| &lmh_cluster1 { |
| status = "disabled"; |
| }; |
| |
| /* |
| * Reserved memory changes |
| * |
| * Putting this all together (out of order with the rest of the file) to keep |
| * all modifications to the memory map (from sdm845.dtsi) in one place. |
| */ |
| |
| /* |
| * Our mpss_region is 8MB bigger than the default one and that conflicts |
| * with venus_mem and cdsp_mem. |
| * |
| * For venus_mem we'll delete and re-create at a different address. |
| * |
| * cdsp_mem isn't used on cheza right now so we won't bother re-creating it; but |
| * that also means we need to delete cdsp_pas. |
| */ |
| /delete-node/ &venus_mem; |
| /delete-node/ &cdsp_mem; |
| /delete-node/ &cdsp_pas; |
| /delete-node/ &gpu_mem; |
| |
| /* Increase the size from 120 MB to 128 MB */ |
| &mpss_region { |
| reg = <0 0x8e000000 0 0x8000000>; |
| }; |
| |
| /* Increase the size from 2MB to 8MB */ |
| &rmtfs_mem { |
| reg = <0 0x88f00000 0 0x800000>; |
| }; |
| |
| / { |
| reserved-memory { |
| venus_mem: memory@96000000 { |
| reg = <0 0x96000000 0 0x500000>; |
| no-map; |
| }; |
| }; |
| }; |
| |
| &qspi { |
| status = "okay"; |
| pinctrl-names = "default", "sleep"; |
| pinctrl-0 = <&qspi_clk>, <&qspi_cs0>, <&qspi_data0>, <&qspi_data1>; |
| pinctrl-1 = <&qspi_sleep>; |
| |
| flash@0 { |
| compatible = "jedec,spi-nor"; |
| reg = <0>; |
| |
| /* |
| * In theory chip supports up to 104 MHz and controller up |
| * to 80 MHz, but above 25 MHz wasn't reliable so we'll use |
| * that for now. b:117440651 |
| */ |
| spi-max-frequency = <25000000>; |
| spi-tx-bus-width = <2>; |
| spi-rx-bus-width = <2>; |
| }; |
| }; |
| |
| |
| &apps_rsc { |
| /delete-property/ power-domains; |
| |
| regulators-0 { |
| compatible = "qcom,pm8998-rpmh-regulators"; |
| qcom,pmic-id = "a"; |
| |
| vdd-s1-supply = <&src_vph_pwr>; |
| vdd-s2-supply = <&src_vph_pwr>; |
| vdd-s3-supply = <&src_vph_pwr>; |
| vdd-s4-supply = <&src_vph_pwr>; |
| vdd-s5-supply = <&src_vph_pwr>; |
| vdd-s6-supply = <&src_vph_pwr>; |
| vdd-s7-supply = <&src_vph_pwr>; |
| vdd-s8-supply = <&src_vph_pwr>; |
| vdd-s9-supply = <&src_vph_pwr>; |
| vdd-s10-supply = <&src_vph_pwr>; |
| vdd-s11-supply = <&src_vph_pwr>; |
| vdd-s12-supply = <&src_vph_pwr>; |
| vdd-s13-supply = <&src_vph_pwr>; |
| vdd-l1-l27-supply = <&src_pp1025_s7a>; |
| vdd-l2-l8-l17-supply = <&src_pp1350_s3a>; |
| vdd-l3-l11-supply = <&src_pp1025_s7a>; |
| vdd-l4-l5-supply = <&src_pp1025_s7a>; |
| vdd-l6-supply = <&src_vph_pwr>; |
| vdd-l7-l12-l14-l15-supply = <&src_pp2040_s5a>; |
| vdd-l9-supply = <&src_pp2040_s5a>; |
| vdd-l10-l23-l25-supply = <&src_vreg_bob>; |
| vdd-l13-l19-l21-supply = <&src_vreg_bob>; |
| vdd-l16-l28-supply = <&src_vreg_bob>; |
| vdd-l18-l22-supply = <&src_vreg_bob>; |
| vdd-l20-l24-supply = <&src_vreg_bob>; |
| vdd-l26-supply = <&src_pp1350_s3a>; |
| vin-lvs-1-2-supply = <&src_pp1800_s4a>; |
| |
| src_pp1125_s2a: smps2 { |
| regulator-min-microvolt = <1100000>; |
| regulator-max-microvolt = <1100000>; |
| }; |
| |
| src_pp1350_s3a: smps3 { |
| regulator-min-microvolt = <1352000>; |
| regulator-max-microvolt = <1352000>; |
| }; |
| |
| src_pp2040_s5a: smps5 { |
| regulator-min-microvolt = <1904000>; |
| regulator-max-microvolt = <2040000>; |
| }; |
| |
| src_pp1025_s7a: smps7 { |
| regulator-min-microvolt = <900000>; |
| regulator-max-microvolt = <1028000>; |
| }; |
| |
| vdd_qusb_hs0: |
| vdda_hp_pcie_core: |
| vdda_mipi_csi0_0p9: |
| vdda_mipi_csi1_0p9: |
| vdda_mipi_csi2_0p9: |
| vdda_mipi_dsi0_pll: |
| vdda_mipi_dsi1_pll: |
| vdda_qlink_lv: |
| vdda_qlink_lv_ck: |
| vdda_qrefs_0p875: |
| vdda_pcie_core: |
| vdda_pll_cc_ebi01: |
| vdda_pll_cc_ebi23: |
| vdda_sp_sensor: |
| vdda_ufs1_core: |
| vdda_ufs2_core: |
| vdda_usb1_ss_core: |
| vdda_usb2_ss_core: |
| src_pp875_l1a: ldo1 { |
| regulator-min-microvolt = <880000>; |
| regulator-max-microvolt = <880000>; |
| regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; |
| }; |
| |
| vddpx_10: |
| src_pp1200_l2a: ldo2 { |
| regulator-min-microvolt = <1200000>; |
| regulator-max-microvolt = <1200000>; |
| regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; |
| |
| /* TODO: why??? */ |
| regulator-always-on; |
| }; |
| |
| pp1000_l3a_sdr845: ldo3 { |
| regulator-min-microvolt = <1000000>; |
| regulator-max-microvolt = <1000000>; |
| regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; |
| }; |
| |
| vdd_wcss_cx: |
| vdd_wcss_mx: |
| vdda_wcss_pll: |
| src_pp800_l5a: ldo5 { |
| regulator-min-microvolt = <800000>; |
| regulator-max-microvolt = <800000>; |
| regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; |
| }; |
| |
| vddpx_13: |
| src_pp1800_l6a: ldo6 { |
| regulator-min-microvolt = <1856000>; |
| regulator-max-microvolt = <1856000>; |
| regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; |
| }; |
| |
| pp1800_l7a_wcn3990: ldo7 { |
| regulator-min-microvolt = <1800000>; |
| regulator-max-microvolt = <1800000>; |
| regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; |
| }; |
| |
| src_pp1200_l8a: ldo8 { |
| regulator-min-microvolt = <1200000>; |
| regulator-max-microvolt = <1248000>; |
| regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; |
| }; |
| |
| pp1800_dx_pen: |
| src_pp1800_l9a: ldo9 { |
| regulator-min-microvolt = <1800000>; |
| regulator-max-microvolt = <1800000>; |
| regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; |
| }; |
| |
| src_pp1800_l10a: ldo10 { |
| regulator-min-microvolt = <1800000>; |
| regulator-max-microvolt = <1800000>; |
| regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; |
| }; |
| |
| pp1000_l11a_sdr845: ldo11 { |
| regulator-min-microvolt = <1000000>; |
| regulator-max-microvolt = <1048000>; |
| regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; |
| }; |
| |
| vdd_qfprom: |
| vdd_qfprom_sp: |
| vdda_apc1_cs_1p8: |
| vdda_gfx_cs_1p8: |
| vdda_qrefs_1p8: |
| vdda_qusb_hs0_1p8: |
| vddpx_11: |
| src_pp1800_l12a: ldo12 { |
| regulator-min-microvolt = <1800000>; |
| regulator-max-microvolt = <1800000>; |
| regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; |
| }; |
| |
| vddpx_2: |
| src_pp2950_l13a: ldo13 { |
| regulator-min-microvolt = <1800000>; |
| regulator-max-microvolt = <2960000>; |
| regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; |
| }; |
| |
| src_pp1800_l14a: ldo14 { |
| regulator-min-microvolt = <1800000>; |
| regulator-max-microvolt = <1800000>; |
| regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; |
| }; |
| |
| src_pp1800_l15a: ldo15 { |
| regulator-min-microvolt = <1800000>; |
| regulator-max-microvolt = <1800000>; |
| regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; |
| }; |
| |
| pp2700_l16a: ldo16 { |
| regulator-min-microvolt = <2704000>; |
| regulator-max-microvolt = <2704000>; |
| regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; |
| }; |
| |
| src_pp1300_l17a: ldo17 { |
| regulator-min-microvolt = <1304000>; |
| regulator-max-microvolt = <1304000>; |
| regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; |
| }; |
| |
| pp2700_l18a: ldo18 { |
| regulator-min-microvolt = <2704000>; |
| regulator-max-microvolt = <2960000>; |
| regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; |
| }; |
| |
| /* |
| * NOTE: this rail should have been called |
| * src_pp3300_l19a in the schematic |
| */ |
| src_pp3000_l19a: ldo19 { |
| regulator-min-microvolt = <3304000>; |
| regulator-max-microvolt = <3304000>; |
| |
| regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; |
| }; |
| |
| src_pp2950_l20a: ldo20 { |
| regulator-min-microvolt = <2704000>; |
| regulator-max-microvolt = <2960000>; |
| regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; |
| }; |
| |
| src_pp2950_l21a: ldo21 { |
| regulator-min-microvolt = <2704000>; |
| regulator-max-microvolt = <2960000>; |
| regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; |
| }; |
| |
| pp3300_hub: |
| src_pp3300_l22a: ldo22 { |
| regulator-min-microvolt = <3304000>; |
| regulator-max-microvolt = <3304000>; |
| regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; |
| /* |
| * HACK: Should add a usb hub node and driver |
| * to turn this on and off at suspend/resume time |
| */ |
| regulator-boot-on; |
| regulator-always-on; |
| }; |
| |
| pp3300_l23a_ch1_wcn3990: ldo23 { |
| regulator-min-microvolt = <3000000>; |
| regulator-max-microvolt = <3312000>; |
| regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; |
| }; |
| |
| vdda_qusb_hs0_3p1: |
| src_pp3075_l24a: ldo24 { |
| regulator-min-microvolt = <3088000>; |
| regulator-max-microvolt = <3088000>; |
| regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; |
| }; |
| |
| pp3300_l25a_ch0_wcn3990: ldo25 { |
| regulator-min-microvolt = <3304000>; |
| regulator-max-microvolt = <3304000>; |
| regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; |
| }; |
| |
| pp1200_hub: |
| vdda_hp_pcie_1p2: |
| vdda_hv_ebi0: |
| vdda_hv_ebi1: |
| vdda_hv_ebi2: |
| vdda_hv_ebi3: |
| vdda_mipi_csi_1p25: |
| vdda_mipi_dsi0_1p2: |
| vdda_mipi_dsi1_1p2: |
| vdda_pcie_1p2: |
| vdda_ufs1_1p2: |
| vdda_ufs2_1p2: |
| vdda_usb1_ss_1p2: |
| vdda_usb2_ss_1p2: |
| src_pp1200_l26a: ldo26 { |
| regulator-min-microvolt = <1200000>; |
| regulator-max-microvolt = <1200000>; |
| regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; |
| }; |
| |
| pp3300_dx_pen: |
| src_pp3300_l28a: ldo28 { |
| regulator-min-microvolt = <3304000>; |
| regulator-max-microvolt = <3304000>; |
| regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; |
| }; |
| |
| src_pp1800_lvs1: lvs1 { |
| regulator-min-microvolt = <1800000>; |
| regulator-max-microvolt = <1800000>; |
| }; |
| |
| src_pp1800_lvs2: lvs2 { |
| regulator-min-microvolt = <1800000>; |
| regulator-max-microvolt = <1800000>; |
| }; |
| }; |
| |
| regulators-1 { |
| compatible = "qcom,pm8005-rpmh-regulators"; |
| qcom,pmic-id = "c"; |
| |
| vdd-s1-supply = <&src_vph_pwr>; |
| vdd-s2-supply = <&src_vph_pwr>; |
| vdd-s3-supply = <&src_vph_pwr>; |
| vdd-s4-supply = <&src_vph_pwr>; |
| |
| src_pp600_s3c: smps3 { |
| regulator-min-microvolt = <600000>; |
| regulator-max-microvolt = <600000>; |
| }; |
| }; |
| }; |
| |
| edp_brij_i2c: &i2c3 { |
| status = "okay"; |
| clock-frequency = <400000>; |
| |
| sn65dsi86_bridge: bridge@2d { |
| compatible = "ti,sn65dsi86"; |
| reg = <0x2d>; |
| pinctrl-names = "default"; |
| pinctrl-0 = <&edp_brij_en &edp_brij_irq>; |
| |
| interrupt-parent = <&tlmm>; |
| interrupts = <10 IRQ_TYPE_LEVEL_HIGH>; |
| |
| enable-gpios = <&tlmm 102 GPIO_ACTIVE_HIGH>; |
| |
| vpll-supply = <&src_pp1800_s4a>; |
| vccio-supply = <&src_pp1800_s4a>; |
| vcca-supply = <&src_pp1200_l2a>; |
| vcc-supply = <&src_pp1200_l2a>; |
| |
| clocks = <&rpmhcc RPMH_LN_BB_CLK2>; |
| clock-names = "refclk"; |
| |
| no-hpd; |
| |
| ports { |
| #address-cells = <1>; |
| #size-cells = <0>; |
| |
| port@0 { |
| reg = <0>; |
| sn65dsi86_in: endpoint { |
| remote-endpoint = <&mdss_dsi0_out>; |
| }; |
| }; |
| |
| port@1 { |
| reg = <1>; |
| sn65dsi86_out: endpoint { |
| remote-endpoint = <&panel_in_edp>; |
| }; |
| }; |
| }; |
| }; |
| }; |
| |
| ap_pen_1v8: &i2c11 { |
| status = "okay"; |
| clock-frequency = <400000>; |
| |
| digitizer@9 { |
| compatible = "wacom,w9013", "hid-over-i2c"; |
| reg = <0x9>; |
| pinctrl-names = "default"; |
| pinctrl-0 = <&pen_irq_l>, <&pen_pdct_l>, <&pen_rst_l>; |
| |
| vdd-supply = <&pp3300_dx_pen>; |
| vddl-supply = <&pp1800_dx_pen>; |
| post-power-on-delay-ms = <100>; |
| |
| interrupt-parent = <&tlmm>; |
| interrupts = <24 IRQ_TYPE_LEVEL_LOW>; |
| |
| hid-descr-addr = <0x1>; |
| }; |
| }; |
| |
| amp_i2c: &i2c12 { |
| status = "okay"; |
| clock-frequency = <400000>; |
| }; |
| |
| ap_ts_i2c: &i2c14 { |
| status = "okay"; |
| clock-frequency = <400000>; |
| |
| touchscreen@10 { |
| compatible = "elan,ekth3500"; |
| reg = <0x10>; |
| pinctrl-names = "default"; |
| pinctrl-0 = <&ts_int_l &ts_reset_l>; |
| |
| interrupt-parent = <&tlmm>; |
| interrupts = <125 IRQ_TYPE_LEVEL_LOW>; |
| |
| vcc33-supply = <&src_pp3300_l28a>; |
| |
| reset-gpios = <&tlmm 118 GPIO_ACTIVE_LOW>; |
| }; |
| }; |
| |
| &gmu { |
| status = "okay"; |
| }; |
| |
| &gpu { |
| status = "okay"; |
| }; |
| |
| &ipa { |
| qcom,gsi-loader = "modem"; |
| status = "okay"; |
| }; |
| |
| &lpasscc { |
| status = "okay"; |
| }; |
| |
| &mdss { |
| status = "okay"; |
| }; |
| |
| &mdss_dsi0 { |
| status = "okay"; |
| vdda-supply = <&vdda_mipi_dsi0_1p2>; |
| |
| ports { |
| port@1 { |
| endpoint { |
| remote-endpoint = <&sn65dsi86_in>; |
| data-lanes = <0 1 2 3>; |
| }; |
| }; |
| }; |
| }; |
| |
| &mdss_dsi0_phy { |
| status = "okay"; |
| vdds-supply = <&vdda_mipi_dsi0_pll>; |
| }; |
| |
| /* |
| * Cheza fw does not properly program the GPU aperture to allow the |
| * GPU to update the SMMU pagetables for context switches. Work |
| * around this by dropping the "qcom,adreno-smmu" compat string. |
| */ |
| &adreno_smmu { |
| compatible = "qcom,sdm845-smmu-v2", "qcom,smmu-v2"; |
| }; |
| |
| &mss_pil { |
| status = "okay"; |
| |
| iommus = <&apps_smmu 0x781 0x0>, |
| <&apps_smmu 0x724 0x3>; |
| }; |
| |
| &pm8998_pwrkey { |
| status = "disabled"; |
| }; |
| |
| &qupv3_id_0 { |
| status = "okay"; |
| iommus = <&apps_smmu 0x0 0x3>; |
| }; |
| |
| &qupv3_id_1 { |
| status = "okay"; |
| iommus = <&apps_smmu 0x6c0 0x3>; |
| }; |
| |
| &sdhc_2 { |
| status = "okay"; |
| |
| pinctrl-names = "default"; |
| pinctrl-0 = <&sdc2_clk &sdc2_cmd &sdc2_data &sd_cd_odl>; |
| |
| vmmc-supply = <&src_pp2950_l21a>; |
| vqmmc-supply = <&vddpx_2>; |
| |
| cd-gpios = <&tlmm 44 GPIO_ACTIVE_LOW>; |
| }; |
| |
| &spi0 { |
| status = "okay"; |
| }; |
| |
| &spi5 { |
| status = "okay"; |
| |
| tpm@0 { |
| compatible = "google,cr50"; |
| reg = <0>; |
| pinctrl-names = "default"; |
| pinctrl-0 = <&h1_ap_int_odl>; |
| spi-max-frequency = <800000>; |
| interrupt-parent = <&tlmm>; |
| interrupts = <129 IRQ_TYPE_EDGE_RISING>; |
| }; |
| }; |
| |
| &spi10 { |
| status = "okay"; |
| |
| cros_ec: ec@0 { |
| compatible = "google,cros-ec-spi"; |
| reg = <0>; |
| interrupt-parent = <&tlmm>; |
| interrupts = <122 IRQ_TYPE_LEVEL_LOW>; |
| pinctrl-names = "default"; |
| pinctrl-0 = <&ec_ap_int_l>; |
| spi-max-frequency = <3000000>; |
| wakeup-source; |
| |
| cros_ec_pwm: pwm { |
| compatible = "google,cros-ec-pwm"; |
| #pwm-cells = <1>; |
| }; |
| |
| i2c_tunnel: i2c-tunnel { |
| compatible = "google,cros-ec-i2c-tunnel"; |
| google,remote-bus = <0>; |
| #address-cells = <1>; |
| #size-cells = <0>; |
| }; |
| }; |
| }; |
| |
| #include <arm/cros-ec-keyboard.dtsi> |
| #include <arm/cros-ec-sbs.dtsi> |
| |
| &uart6 { |
| status = "okay"; |
| |
| pinctrl-0 = <&qup_uart6_4pin>; |
| |
| bluetooth: bluetooth { |
| compatible = "qcom,wcn3990-bt"; |
| vddio-supply = <&src_pp1800_s4a>; |
| vddxo-supply = <&pp1800_l7a_wcn3990>; |
| vddrf-supply = <&src_pp1300_l17a>; |
| vddch0-supply = <&pp3300_l25a_ch0_wcn3990>; |
| max-speed = <3200000>; |
| }; |
| }; |
| |
| &uart9 { |
| status = "okay"; |
| }; |
| |
| &ufs_mem_hc { |
| status = "okay"; |
| |
| reset-gpios = <&tlmm 150 GPIO_ACTIVE_LOW>; |
| |
| vcc-supply = <&src_pp2950_l20a>; |
| vcc-max-microamp = <600000>; |
| }; |
| |
| &ufs_mem_phy { |
| status = "okay"; |
| |
| vdda-phy-supply = <&vdda_ufs1_core>; |
| vdda-pll-supply = <&vdda_ufs1_1p2>; |
| }; |
| |
| &usb_1 { |
| status = "okay"; |
| |
| /* We'll use this as USB 2.0 only */ |
| qcom,select-utmi-as-pipe-clk; |
| }; |
| |
| &usb_1_dwc3 { |
| /* |
| * The hardware design intends this port to be hooked up in peripheral |
| * mode, so we'll hardcode it here. Some details: |
| * - SDM845 expects only a single Type C connector so it has only one |
| * native Type C port but cheza has two Type C connectors. |
| * - The only source of DP is the single native Type C port. |
| * - On cheza we want to be able to hook DP up to _either_ of the |
| * two Type C connectors and want to be able to achieve 4 lanes of DP. |
| * - When you configure a Type C port for 4 lanes of DP you lose USB3. |
| * - In order to make everything work, the native Type C port is always |
| * configured as 4-lanes DP so it's always available. |
| * - The extra USB3 port on SDM845 goes to a USB 3 hub which is then |
| * sent to the two Type C connectors. |
| * - The extra USB2 lines from the native Type C port are always |
| * setup as "peripheral" so that we can mux them over to one connector |
| * or the other if someone needs the connector configured as a gadget |
| * (but they only get USB2 speeds). |
| * |
| * All the hardware muxes would allow us to hook things up in different |
| * ways to some potential benefit for static configurations (you could |
| * achieve extra USB2 bandwidth by using two different ports for the |
| * two connectors or possibly even get USB3 peripheral mode), but in |
| * each case you end up forcing to disconnect/reconnect an in-use |
| * USB session in some cases depending on what you hotplug into the |
| * other connector. Thus hardcoding this as peripheral makes sense. |
| */ |
| dr_mode = "peripheral"; |
| |
| /* |
| * We always need the high speed pins as 4-lanes DP in case someone |
| * hotplugs a DP peripheral. Thus limit this port to a max of high |
| * speed. |
| */ |
| maximum-speed = "high-speed"; |
| |
| /* |
| * We don't need the usb3-phy since we run in highspeed mode always, so |
| * re-define these properties removing the superspeed USB PHY reference. |
| */ |
| phys = <&usb_1_hsphy>; |
| phy-names = "usb2-phy"; |
| }; |
| |
| &usb_1_hsphy { |
| status = "okay"; |
| |
| vdd-supply = <&vdda_usb1_ss_core>; |
| vdda-pll-supply = <&vdda_qusb_hs0_1p8>; |
| vdda-phy-dpdm-supply = <&vdda_qusb_hs0_3p1>; |
| |
| 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_2 { |
| status = "okay"; |
| }; |
| |
| &usb_2_dwc3 { |
| /* We have this hooked up to a hub and we always use in host mode */ |
| dr_mode = "host"; |
| }; |
| |
| &usb_2_hsphy { |
| status = "okay"; |
| |
| vdd-supply = <&vdda_usb2_ss_core>; |
| vdda-pll-supply = <&vdda_qusb_hs0_1p8>; |
| vdda-phy-dpdm-supply = <&vdda_qusb_hs0_3p1>; |
| |
| qcom,imp-res-offset-value = <8>; |
| qcom,hstx-trim-value = <QUSB2_V2_HSTX_TRIM_22_8_MA>; |
| }; |
| |
| &usb_2_qmpphy { |
| status = "okay"; |
| |
| vdda-phy-supply = <&vdda_usb2_ss_1p2>; |
| vdda-pll-supply = <&vdda_usb2_ss_core>; |
| }; |
| |
| &wifi { |
| status = "okay"; |
| |
| vdd-0.8-cx-mx-supply = <&src_pp800_l5a >; |
| vdd-1.8-xo-supply = <&pp1800_l7a_wcn3990>; |
| vdd-1.3-rfa-supply = <&src_pp1300_l17a>; |
| vdd-3.3-ch0-supply = <&pp3300_l25a_ch0_wcn3990>; |
| }; |
| |
| /* PINCTRL - additions to nodes defined in sdm845.dtsi */ |
| |
| &qspi_cs0 { |
| bias-disable; /* External pullup */ |
| }; |
| |
| &qspi_clk { |
| bias-disable; /* Rely on Cr50 internal pulldown */ |
| }; |
| |
| &qspi_data0 { |
| bias-disable; /* Rely on Cr50 internal pulldown */ |
| }; |
| |
| &qspi_data1 { |
| bias-pull-down; |
| }; |
| |
| &qup_i2c3_default { |
| drive-strength = <2>; |
| |
| /* Has external pullup */ |
| bias-disable; |
| }; |
| |
| &qup_i2c11_default { |
| drive-strength = <2>; |
| |
| /* Has external pullup */ |
| bias-disable; |
| }; |
| |
| &qup_i2c12_default { |
| drive-strength = <2>; |
| |
| /* Has external pullup */ |
| bias-disable; |
| }; |
| |
| &qup_i2c14_default { |
| drive-strength = <2>; |
| |
| /* Has external pullup */ |
| bias-disable; |
| }; |
| |
| &qup_spi0_default { |
| drive-strength = <2>; |
| bias-disable; |
| }; |
| |
| &qup_spi5_default { |
| drive-strength = <2>; |
| bias-disable; |
| }; |
| |
| &qup_spi10_default { |
| drive-strength = <2>; |
| bias-disable; |
| }; |
| |
| &qup_uart9_rx { |
| drive-strength = <2>; |
| bias-pull-up; |
| }; |
| |
| &qup_uart9_tx { |
| drive-strength = <2>; |
| bias-disable; |
| }; |
| |
| /* PINCTRL - board-specific pinctrl */ |
| &pm8005_gpios { |
| gpio-line-names = "", |
| "", |
| "SLB", |
| ""; |
| }; |
| |
| &pm8998_adc { |
| channel@4d { |
| reg = <ADC5_AMUX_THM1_100K_PU>; |
| label = "sdm_temp"; |
| }; |
| |
| channel@4e { |
| reg = <ADC5_AMUX_THM2_100K_PU>; |
| label = "quiet_temp"; |
| }; |
| |
| channel@4f { |
| reg = <ADC5_AMUX_THM3_100K_PU>; |
| label = "lte_temp_1"; |
| }; |
| |
| channel@50 { |
| reg = <ADC5_AMUX_THM4_100K_PU>; |
| label = "lte_temp_2"; |
| }; |
| |
| channel@51 { |
| reg = <ADC5_AMUX_THM5_100K_PU>; |
| label = "charger_temp"; |
| }; |
| }; |
| |
| &pm8998_gpios { |
| gpio-line-names = "", |
| "", |
| "SW_CTRL", |
| "", |
| "", |
| "", |
| "", |
| "", |
| "", |
| "", |
| "", |
| "", |
| "", |
| "", |
| "", |
| "", |
| "", |
| "", |
| "", |
| "", |
| "", |
| "CFG_OPT1", |
| "WCSS_PWR_REQ", |
| "", |
| "CFG_OPT2", |
| "SLB"; |
| }; |
| |
| &tlmm { |
| /* |
| * pinctrl settings for pins that have no real owners. |
| */ |
| pinctrl-names = "default", "sleep"; |
| pinctrl-0 = <&bios_flash_wp_r_l>, |
| <&ap_suspend_l_deassert>; |
| |
| pinctrl-1 = <&bios_flash_wp_r_l>, |
| <&ap_suspend_l_assert>; |
| |
| /* |
| * Hogs prevent usermode from changing the value. A GPIO can be both |
| * here and in the pinctrl section. |
| */ |
| ap-suspend-l-hog { |
| gpio-hog; |
| gpios = <126 GPIO_ACTIVE_LOW>; |
| output-low; |
| }; |
| |
| ap_edp_bklten: ap-edp-bklten-state { |
| pins = "gpio37"; |
| function = "gpio"; |
| drive-strength = <2>; |
| bias-disable; |
| }; |
| |
| bios_flash_wp_r_l: bios-flash-wp-r-l-state { |
| pins = "gpio128"; |
| function = "gpio"; |
| bias-disable; |
| }; |
| |
| ec_ap_int_l: ec-ap-int-l-state { |
| pins = "gpio122"; |
| function = "gpio"; |
| bias-pull-up; |
| }; |
| |
| edp_brij_en: edp-brij-en-state { |
| pins = "gpio102"; |
| function = "gpio"; |
| drive-strength = <2>; |
| bias-disable; |
| }; |
| |
| edp_brij_irq: edp-brij-irq-state { |
| pins = "gpio10"; |
| function = "gpio"; |
| drive-strength = <2>; |
| bias-pull-down; |
| }; |
| |
| en_pp3300_dx_edp: en-pp3300-dx-edp-state { |
| pins = "gpio43"; |
| function = "gpio"; |
| drive-strength = <2>; |
| bias-disable; |
| }; |
| |
| h1_ap_int_odl: h1-ap-int-odl-state { |
| pins = "gpio129"; |
| function = "gpio"; |
| bias-pull-up; |
| }; |
| |
| pen_eject_odl: pen-eject-odl-state { |
| pins = "gpio119"; |
| function = "gpio"; |
| bias-pull-up; |
| }; |
| |
| pen_irq_l: pen-irq-l-state { |
| pins = "gpio24"; |
| function = "gpio"; |
| |
| /* Has external pullup */ |
| bias-disable; |
| }; |
| |
| pen_pdct_l: pen-pdct-l-state { |
| pins = "gpio63"; |
| function = "gpio"; |
| |
| /* Has external pullup */ |
| bias-disable; |
| }; |
| |
| pen_rst_l: pen-rst-l-state { |
| pins = "gpio23"; |
| function = "gpio"; |
| bias-disable; |
| drive-strength = <2>; |
| |
| /* |
| * The pen driver doesn't currently support |
| * driving this reset line. By specifying |
| * output-high here we're relying on the fact |
| * that this pin has a default pulldown at boot |
| * (which makes sure the pen was in reset if it |
| * was powered) and then we set it high here to |
| * take it out of reset. Better would be if the |
| * pen driver could control this and we could |
| * remove "output-high" here. |
| */ |
| output-high; |
| }; |
| |
| qspi_sleep: qspi-sleep-state { |
| pins = "gpio90", "gpio91", "gpio92", "gpio95"; |
| |
| /* |
| * When we're not actively transferring we want pins as GPIOs |
| * with output disabled so that the quad SPI IP block stops |
| * driving them. We rely on the normal pulls configured in |
| * the active state and don't redefine them here. Also note |
| * that we don't need the reverse (output-enable) in the |
| * normal mode since the "output-enable" only matters for |
| * GPIO function. |
| */ |
| function = "gpio"; |
| output-disable; |
| }; |
| |
| sdc2_clk: sdc2-clk-state { |
| pins = "sdc2_clk"; |
| bias-disable; |
| |
| /* |
| * It seems that mmc_test reports errors if drive |
| * strength is not 16. |
| */ |
| drive-strength = <16>; |
| }; |
| |
| sdc2_cmd: sdc2-cmd-state { |
| pins = "sdc2_cmd"; |
| bias-pull-up; |
| drive-strength = <16>; |
| }; |
| |
| sdc2_data: sdc2-data-state { |
| pins = "sdc2_data"; |
| bias-pull-up; |
| drive-strength = <16>; |
| }; |
| |
| sd_cd_odl: sd-cd-odl-state { |
| pins = "gpio44"; |
| function = "gpio"; |
| bias-pull-up; |
| }; |
| |
| ts_int_l: ts-int-l-state { |
| pins = "gpio125"; |
| function = "gpio"; |
| bias-pull-up; |
| }; |
| |
| ts_reset_l: ts-reset-l-state { |
| pins = "gpio118"; |
| function = "gpio"; |
| bias-disable; |
| drive-strength = <2>; |
| }; |
| |
| ap_suspend_l_assert: ap-suspend-l-assert-state { |
| pins = "gpio126"; |
| function = "gpio"; |
| bias-disable; |
| drive-strength = <2>; |
| output-low; |
| }; |
| |
| ap_suspend_l_deassert: ap-suspend-l-deassert-state { |
| pins = "gpio126"; |
| function = "gpio"; |
| bias-disable; |
| drive-strength = <2>; |
| output-high; |
| }; |
| }; |
| |
| &venus { |
| status = "okay"; |
| |
| video-firmware { |
| iommus = <&apps_smmu 0x10b2 0x0>; |
| }; |
| }; |