mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-01-24 15:29:28 +07:00
d64420e816
Rockchip SoCs use 2 different numbering schemes. Where the gpio- controllers just count 0-31 for their 32 gpios, the underlying iomux controller splits these into 4 separate entities A-D. Device-schematics always use these iomux-values to identify pins, so to make mapping schematics to devicetree easier Andy Yan introduced named constants for the pins but so far we only used them on new additions. Using a sed-script created by Emil Renner Berthing bulk-convert the remaining raw gpio numbers into their descriptive counterparts and also gets rid of the unhelpful RK_FUNC_x -> x and RK_GPIOx -> x mappings: /rockchip,pins *=/bcheck b # to end of script :append-next-line N :check /^[^;]*$/bappend-next-line s/<RK_GPIO\([0-9]\) /<\1 /g s/<\([^ ][^ ]* *\)0 /<\1RK_PA0 /g s/<\([^ ][^ ]* *\)1 /<\1RK_PA1 /g s/<\([^ ][^ ]* *\)2 /<\1RK_PA2 /g s/<\([^ ][^ ]* *\)3 /<\1RK_PA3 /g s/<\([^ ][^ ]* *\)4 /<\1RK_PA4 /g s/<\([^ ][^ ]* *\)5 /<\1RK_PA5 /g s/<\([^ ][^ ]* *\)6 /<\1RK_PA6 /g s/<\([^ ][^ ]* *\)7 /<\1RK_PA7 /g s/<\([^ ][^ ]* *\)8 /<\1RK_PB0 /g s/<\([^ ][^ ]* *\)9 /<\1RK_PB1 /g s/<\([^ ][^ ]* *\)10 /<\1RK_PB2 /g s/<\([^ ][^ ]* *\)11 /<\1RK_PB3 /g s/<\([^ ][^ ]* *\)12 /<\1RK_PB4 /g s/<\([^ ][^ ]* *\)13 /<\1RK_PB5 /g s/<\([^ ][^ ]* *\)14 /<\1RK_PB6 /g s/<\([^ ][^ ]* *\)15 /<\1RK_PB7 /g s/<\([^ ][^ ]* *\)16 /<\1RK_PC0 /g s/<\([^ ][^ ]* *\)17 /<\1RK_PC1 /g s/<\([^ ][^ ]* *\)18 /<\1RK_PC2 /g s/<\([^ ][^ ]* *\)19 /<\1RK_PC3 /g s/<\([^ ][^ ]* *\)20 /<\1RK_PC4 /g s/<\([^ ][^ ]* *\)21 /<\1RK_PC5 /g s/<\([^ ][^ ]* *\)22 /<\1RK_PC6 /g s/<\([^ ][^ ]* *\)23 /<\1RK_PC7 /g s/<\([^ ][^ ]* *\)24 /<\1RK_PD0 /g s/<\([^ ][^ ]* *\)25 /<\1RK_PD1 /g s/<\([^ ][^ ]* *\)26 /<\1RK_PD2 /g s/<\([^ ][^ ]* *\)27 /<\1RK_PD3 /g s/<\([^ ][^ ]* *\)28 /<\1RK_PD4 /g s/<\([^ ][^ ]* *\)29 /<\1RK_PD5 /g s/<\([^ ][^ ]* *\)30 /<\1RK_PD6 /g s/<\([^ ][^ ]* *\)31 /<\1RK_PD7 /g s/<\([^ ][^ ]* *[^ ][^ ]* *\)0 /<\1RK_FUNC_GPIO /g s/<\([^ ][^ ]* *[^ ][^ ]* *\)RK_FUNC_\([1-9]\) /<\1\2 /g Suggested-by: Emil Renner Berthing <esmil@mailme.dk> Signed-off-by: Heiko Stuebner <heiko@sntech.de> Tested-by: Katsuhiro Suzuki <katsuhiro@katsuster.net> Acked-by: Robin Murphy <robin.murphy@arm.com>
827 lines
17 KiB
Plaintext
827 lines
17 KiB
Plaintext
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
|
/*
|
|
* Google Gru (and derivatives) board device tree source
|
|
*
|
|
* Copyright 2016-2017 Google, Inc
|
|
*/
|
|
|
|
#include <dt-bindings/input/input.h>
|
|
#include "rk3399.dtsi"
|
|
#include "rk3399-op1-opp.dtsi"
|
|
|
|
/ {
|
|
chosen {
|
|
stdout-path = "serial2:115200n8";
|
|
};
|
|
|
|
/*
|
|
* Power Tree
|
|
*
|
|
* In general an attempt is made to include all rails called out by
|
|
* the schematic as long as those rails interact in some way with
|
|
* the AP. AKA:
|
|
* - Rails that only connect to the EC (or devices that the EC talks to)
|
|
* are not included.
|
|
* - Rails _are_ included if the rails go to the AP even if the AP
|
|
* doesn't currently care about them / they are always on. The idea
|
|
* here is that it makes it easier to map to the schematic or extend
|
|
* later.
|
|
*
|
|
* If two rails are substantially the same from the AP's point of
|
|
* view, though, we won't create a full fixed regulator. We'll just
|
|
* put the child rail as an alias of the parent rail. Sometimes rails
|
|
* look the same to the AP because one of these is true:
|
|
* - The EC controls the enable and the EC always enables a rail as
|
|
* long as the AP is running.
|
|
* - The rails are actually connected to each other by a jumper and
|
|
* the distinction is just there to add clarity/flexibility to the
|
|
* schematic.
|
|
*/
|
|
|
|
ppvar_sys: ppvar-sys {
|
|
compatible = "regulator-fixed";
|
|
regulator-name = "ppvar_sys";
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
};
|
|
|
|
pp1200_lpddr: pp1200-lpddr {
|
|
compatible = "regulator-fixed";
|
|
regulator-name = "pp1200_lpddr";
|
|
|
|
/* EC turns on w/ lpddr_pwr_en; always on for AP */
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
regulator-min-microvolt = <1200000>;
|
|
regulator-max-microvolt = <1200000>;
|
|
|
|
vin-supply = <&ppvar_sys>;
|
|
};
|
|
|
|
pp1800: pp1800 {
|
|
compatible = "regulator-fixed";
|
|
regulator-name = "pp1800";
|
|
|
|
/* Always on when ppvar_sys shows power good */
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
regulator-min-microvolt = <1800000>;
|
|
regulator-max-microvolt = <1800000>;
|
|
|
|
vin-supply = <&ppvar_sys>;
|
|
};
|
|
|
|
pp3300: pp3300 {
|
|
compatible = "regulator-fixed";
|
|
regulator-name = "pp3300";
|
|
|
|
/* Always on; plain and simple */
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
regulator-min-microvolt = <3300000>;
|
|
regulator-max-microvolt = <3300000>;
|
|
|
|
vin-supply = <&ppvar_sys>;
|
|
};
|
|
|
|
pp5000: pp5000 {
|
|
compatible = "regulator-fixed";
|
|
regulator-name = "pp5000";
|
|
|
|
/* EC turns on w/ pp5000_en; always on for AP */
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
regulator-min-microvolt = <5000000>;
|
|
regulator-max-microvolt = <5000000>;
|
|
|
|
vin-supply = <&ppvar_sys>;
|
|
};
|
|
|
|
ppvar_bigcpu_pwm: ppvar-bigcpu-pwm {
|
|
compatible = "pwm-regulator";
|
|
regulator-name = "ppvar_bigcpu_pwm";
|
|
|
|
pwms = <&pwm1 0 3337 0>;
|
|
pwm-supply = <&ppvar_sys>;
|
|
pwm-dutycycle-range = <100 0>;
|
|
pwm-dutycycle-unit = <100>;
|
|
|
|
/* EC turns on w/ ap_core_en; always on for AP */
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
regulator-min-microvolt = <800107>;
|
|
regulator-max-microvolt = <1302232>;
|
|
};
|
|
|
|
ppvar_bigcpu: ppvar-bigcpu {
|
|
compatible = "vctrl-regulator";
|
|
regulator-name = "ppvar_bigcpu";
|
|
|
|
regulator-min-microvolt = <800107>;
|
|
regulator-max-microvolt = <1302232>;
|
|
|
|
ctrl-supply = <&ppvar_bigcpu_pwm>;
|
|
ctrl-voltage-range = <800107 1302232>;
|
|
|
|
regulator-settling-time-up-us = <322>;
|
|
};
|
|
|
|
ppvar_litcpu_pwm: ppvar-litcpu-pwm {
|
|
compatible = "pwm-regulator";
|
|
regulator-name = "ppvar_litcpu_pwm";
|
|
|
|
pwms = <&pwm2 0 3337 0>;
|
|
pwm-supply = <&ppvar_sys>;
|
|
pwm-dutycycle-range = <100 0>;
|
|
pwm-dutycycle-unit = <100>;
|
|
|
|
/* EC turns on w/ ap_core_en; always on for AP */
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
regulator-min-microvolt = <797743>;
|
|
regulator-max-microvolt = <1307837>;
|
|
};
|
|
|
|
ppvar_litcpu: ppvar-litcpu {
|
|
compatible = "vctrl-regulator";
|
|
regulator-name = "ppvar_litcpu";
|
|
|
|
regulator-min-microvolt = <797743>;
|
|
regulator-max-microvolt = <1307837>;
|
|
|
|
ctrl-supply = <&ppvar_litcpu_pwm>;
|
|
ctrl-voltage-range = <797743 1307837>;
|
|
|
|
regulator-settling-time-up-us = <384>;
|
|
};
|
|
|
|
ppvar_gpu_pwm: ppvar-gpu-pwm {
|
|
compatible = "pwm-regulator";
|
|
regulator-name = "ppvar_gpu_pwm";
|
|
|
|
pwms = <&pwm0 0 3337 0>;
|
|
pwm-supply = <&ppvar_sys>;
|
|
pwm-dutycycle-range = <100 0>;
|
|
pwm-dutycycle-unit = <100>;
|
|
|
|
/* EC turns on w/ ap_core_en; always on for AP */
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
regulator-min-microvolt = <786384>;
|
|
regulator-max-microvolt = <1217747>;
|
|
};
|
|
|
|
ppvar_gpu: ppvar-gpu {
|
|
compatible = "vctrl-regulator";
|
|
regulator-name = "ppvar_gpu";
|
|
|
|
regulator-min-microvolt = <786384>;
|
|
regulator-max-microvolt = <1217747>;
|
|
|
|
ctrl-supply = <&ppvar_gpu_pwm>;
|
|
ctrl-voltage-range = <786384 1217747>;
|
|
|
|
regulator-settling-time-up-us = <390>;
|
|
};
|
|
|
|
/* EC turns on w/ pp900_ddrpll_en */
|
|
pp900_ddrpll: pp900-ap {
|
|
};
|
|
|
|
/* EC turns on w/ pp900_pll_en */
|
|
pp900_pll: pp900-ap {
|
|
};
|
|
|
|
/* EC turns on w/ pp900_pmu_en */
|
|
pp900_pmu: pp900-ap {
|
|
};
|
|
|
|
/* EC turns on w/ pp1800_s0_en_l */
|
|
pp1800_ap_io: pp1800_emmc: pp1800_nfc: pp1800_s0: pp1800 {
|
|
};
|
|
|
|
/* EC turns on w/ pp1800_avdd_en_l */
|
|
pp1800_avdd: pp1800 {
|
|
};
|
|
|
|
/* EC turns on w/ pp1800_lid_en_l */
|
|
pp1800_lid: pp1800_mic: pp1800 {
|
|
};
|
|
|
|
/* EC turns on w/ lpddr_pwr_en */
|
|
pp1800_lpddr: pp1800 {
|
|
};
|
|
|
|
/* EC turns on w/ pp1800_pmu_en_l */
|
|
pp1800_pmu: pp1800 {
|
|
};
|
|
|
|
/* EC turns on w/ pp1800_usb_en_l */
|
|
pp1800_usb: pp1800 {
|
|
};
|
|
|
|
pp3000_sd_slot: pp3000-sd-slot {
|
|
compatible = "regulator-fixed";
|
|
regulator-name = "pp3000_sd_slot";
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&sd_slot_pwr_en>;
|
|
|
|
enable-active-high;
|
|
gpio = <&gpio4 29 GPIO_ACTIVE_HIGH>;
|
|
|
|
vin-supply = <&pp3000>;
|
|
};
|
|
|
|
/*
|
|
* Technically, this is a small abuse of 'regulator-gpio'; this
|
|
* regulator is a mux between pp1800 and pp3300. pp1800 and pp3300 are
|
|
* always on though, so it is sufficient to simply control the mux
|
|
* here.
|
|
*/
|
|
ppvar_sd_card_io: ppvar-sd-card-io {
|
|
compatible = "regulator-gpio";
|
|
regulator-name = "ppvar_sd_card_io";
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&sd_io_pwr_en &sd_pwr_1800_sel>;
|
|
|
|
enable-active-high;
|
|
enable-gpio = <&gpio2 2 GPIO_ACTIVE_HIGH>;
|
|
gpios = <&gpio2 28 GPIO_ACTIVE_HIGH>;
|
|
states = <1800000 0x1
|
|
3000000 0x0>;
|
|
|
|
regulator-min-microvolt = <1800000>;
|
|
regulator-max-microvolt = <3000000>;
|
|
};
|
|
|
|
/* EC turns on w/ pp3300_trackpad_en_l */
|
|
pp3300_trackpad: pp3300-trackpad {
|
|
};
|
|
|
|
/* EC turns on w/ usb_a_en */
|
|
pp5000_usb_a_vbus: pp5000 {
|
|
};
|
|
|
|
ap_rtc_clk: ap-rtc-clk {
|
|
compatible = "fixed-clock";
|
|
clock-frequency = <32768>;
|
|
clock-output-names = "xin32k";
|
|
#clock-cells = <0>;
|
|
};
|
|
|
|
max98357a: max98357a {
|
|
compatible = "maxim,max98357a";
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&sdmode_en>;
|
|
sdmode-gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>;
|
|
sdmode-delay = <2>;
|
|
#sound-dai-cells = <0>;
|
|
status = "okay";
|
|
};
|
|
|
|
sound: sound {
|
|
compatible = "rockchip,rk3399-gru-sound";
|
|
rockchip,cpu = <&i2s0 &i2s2>;
|
|
};
|
|
};
|
|
|
|
&cdn_dp {
|
|
status = "okay";
|
|
};
|
|
|
|
/*
|
|
* Set some suspend operating points to avoid OVP in suspend
|
|
*
|
|
* When we go into S3 ARM Trusted Firmware will transition our PWM regulators
|
|
* from wherever they're at back to the "default" operating point (whatever
|
|
* voltage we get when we set the PWM pins to "input").
|
|
*
|
|
* This quick transition under light load has the possibility to trigger the
|
|
* regulator "over voltage protection" (OVP).
|
|
*
|
|
* To make extra certain that we don't hit this OVP at suspend time, we'll
|
|
* transition to a voltage that's much closer to the default (~1.0 V) so that
|
|
* there will not be a big jump. Technically we only need to get within 200 mV
|
|
* of the default voltage, but the speed here should be fast enough and we need
|
|
* suspend/resume to be rock solid.
|
|
*/
|
|
|
|
&cluster0_opp {
|
|
opp05 {
|
|
opp-suspend;
|
|
};
|
|
};
|
|
|
|
&cluster1_opp {
|
|
opp06 {
|
|
opp-suspend;
|
|
};
|
|
};
|
|
|
|
&cpu_l0 {
|
|
cpu-supply = <&ppvar_litcpu>;
|
|
};
|
|
|
|
&cpu_l1 {
|
|
cpu-supply = <&ppvar_litcpu>;
|
|
};
|
|
|
|
&cpu_l2 {
|
|
cpu-supply = <&ppvar_litcpu>;
|
|
};
|
|
|
|
&cpu_l3 {
|
|
cpu-supply = <&ppvar_litcpu>;
|
|
};
|
|
|
|
&cpu_b0 {
|
|
cpu-supply = <&ppvar_bigcpu>;
|
|
};
|
|
|
|
&cpu_b1 {
|
|
cpu-supply = <&ppvar_bigcpu>;
|
|
};
|
|
|
|
|
|
&cru {
|
|
assigned-clocks =
|
|
<&cru PLL_GPLL>, <&cru PLL_CPLL>,
|
|
<&cru PLL_NPLL>,
|
|
<&cru ACLK_PERIHP>, <&cru HCLK_PERIHP>,
|
|
<&cru PCLK_PERIHP>,
|
|
<&cru ACLK_PERILP0>, <&cru HCLK_PERILP0>,
|
|
<&cru PCLK_PERILP0>, <&cru ACLK_CCI>,
|
|
<&cru HCLK_PERILP1>, <&cru PCLK_PERILP1>,
|
|
<&cru ACLK_VIO>, <&cru ACLK_HDCP>,
|
|
<&cru ACLK_GIC_PRE>,
|
|
<&cru PCLK_DDR>;
|
|
assigned-clock-rates =
|
|
<600000000>, <800000000>,
|
|
<1000000000>,
|
|
<150000000>, <75000000>,
|
|
<37500000>,
|
|
<100000000>, <100000000>,
|
|
<50000000>, <800000000>,
|
|
<100000000>, <50000000>,
|
|
<400000000>, <400000000>,
|
|
<200000000>,
|
|
<200000000>;
|
|
};
|
|
|
|
&emmc_phy {
|
|
status = "okay";
|
|
};
|
|
|
|
&gpu {
|
|
mali-supply = <&ppvar_gpu>;
|
|
status = "okay";
|
|
};
|
|
|
|
ap_i2c_ts: &i2c3 {
|
|
status = "okay";
|
|
|
|
clock-frequency = <400000>;
|
|
|
|
/* These are relatively safe rise/fall times */
|
|
i2c-scl-falling-time-ns = <50>;
|
|
i2c-scl-rising-time-ns = <300>;
|
|
};
|
|
|
|
ap_i2c_audio: &i2c8 {
|
|
status = "okay";
|
|
|
|
clock-frequency = <400000>;
|
|
|
|
/* These are relatively safe rise/fall times */
|
|
i2c-scl-falling-time-ns = <50>;
|
|
i2c-scl-rising-time-ns = <300>;
|
|
|
|
codec: da7219@1a {
|
|
compatible = "dlg,da7219";
|
|
reg = <0x1a>;
|
|
interrupt-parent = <&gpio1>;
|
|
interrupts = <23 IRQ_TYPE_LEVEL_LOW>;
|
|
clocks = <&cru SCLK_I2S_8CH_OUT>;
|
|
clock-names = "mclk";
|
|
dlg,micbias-lvl = <2600>;
|
|
dlg,mic-amp-in-sel = "diff";
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&headset_int_l>;
|
|
VDD-supply = <&pp1800>;
|
|
VDDMIC-supply = <&pp3300>;
|
|
VDDIO-supply = <&pp1800>;
|
|
|
|
da7219_aad {
|
|
dlg,adc-1bit-rpt = <1>;
|
|
dlg,btn-avg = <4>;
|
|
dlg,btn-cfg = <50>;
|
|
dlg,mic-det-thr = <500>;
|
|
dlg,jack-ins-deb = <20>;
|
|
dlg,jack-det-rate = "32ms_64ms";
|
|
dlg,jack-rem-deb = <1>;
|
|
|
|
dlg,a-d-btn-thr = <0xa>;
|
|
dlg,d-b-btn-thr = <0x16>;
|
|
dlg,b-c-btn-thr = <0x21>;
|
|
dlg,c-mic-btn-thr = <0x3E>;
|
|
};
|
|
};
|
|
};
|
|
|
|
&i2s0 {
|
|
status = "okay";
|
|
};
|
|
|
|
&i2s2 {
|
|
status = "okay";
|
|
};
|
|
|
|
&io_domains {
|
|
status = "okay";
|
|
|
|
audio-supply = <&pp1800_audio>; /* APIO5_VDD; 3d 4a */
|
|
bt656-supply = <&pp1800_ap_io>; /* APIO2_VDD; 2a 2b */
|
|
gpio1830-supply = <&pp3000_ap>; /* APIO4_VDD; 4c 4d */
|
|
sdmmc-supply = <&ppvar_sd_card_io>; /* SDMMC0_VDD; 4b */
|
|
};
|
|
|
|
&pcie0 {
|
|
status = "okay";
|
|
|
|
ep-gpios = <&gpio2 27 GPIO_ACTIVE_HIGH>;
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&pcie_clkreqn_cpm>, <&wifi_perst_l>;
|
|
vpcie3v3-supply = <&pp3300_wifi_bt>;
|
|
vpcie1v8-supply = <&wlan_pd_n>; /* HACK: see &wlan_pd_n */
|
|
vpcie0v9-supply = <&pp900_pcie>;
|
|
|
|
pci_rootport: pcie@0,0 {
|
|
reg = <0x83000000 0x0 0x00000000 0x0 0x00000000>;
|
|
#address-cells = <3>;
|
|
#size-cells = <2>;
|
|
ranges;
|
|
};
|
|
};
|
|
|
|
&pcie_phy {
|
|
status = "okay";
|
|
};
|
|
|
|
&pmu_io_domains {
|
|
status = "okay";
|
|
|
|
pmu1830-supply = <&pp1800_pmu>; /* PMUIO2_VDD */
|
|
};
|
|
|
|
&pwm0 {
|
|
status = "okay";
|
|
};
|
|
|
|
&pwm1 {
|
|
status = "okay";
|
|
};
|
|
|
|
&pwm2 {
|
|
status = "okay";
|
|
};
|
|
|
|
&pwm3 {
|
|
status = "okay";
|
|
};
|
|
|
|
&sdhci {
|
|
/*
|
|
* Signal integrity isn't great at 200 MHz and 150 MHz (DDR) gives the
|
|
* same (or nearly the same) performance for all eMMC that are intended
|
|
* to be used.
|
|
*/
|
|
assigned-clock-rates = <150000000>;
|
|
|
|
bus-width = <8>;
|
|
mmc-hs400-1_8v;
|
|
mmc-hs400-enhanced-strobe;
|
|
non-removable;
|
|
status = "okay";
|
|
};
|
|
|
|
&sdmmc {
|
|
status = "okay";
|
|
|
|
/*
|
|
* Note: configure "sdmmc_cd" as card detect even though it's actually
|
|
* hooked to ground. Because we specified "cd-gpios" below dw_mmc
|
|
* should be ignoring card detect anyway. Specifying the pin as
|
|
* sdmmc_cd means that even if you've got GRF_SOC_CON7[12] (force_jtag)
|
|
* turned on that the system will still make sure the port is
|
|
* configured as SDMMC and not JTAG.
|
|
*/
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_cd_gpio
|
|
&sdmmc_bus4>;
|
|
|
|
bus-width = <4>;
|
|
cap-mmc-highspeed;
|
|
cap-sd-highspeed;
|
|
cd-gpios = <&gpio4 24 GPIO_ACTIVE_LOW>;
|
|
disable-wp;
|
|
sd-uhs-sdr12;
|
|
sd-uhs-sdr25;
|
|
sd-uhs-sdr50;
|
|
sd-uhs-sdr104;
|
|
vmmc-supply = <&pp3000_sd_slot>;
|
|
vqmmc-supply = <&ppvar_sd_card_io>;
|
|
};
|
|
|
|
&spi1 {
|
|
status = "okay";
|
|
|
|
pinctrl-names = "default", "sleep";
|
|
pinctrl-1 = <&spi1_sleep>;
|
|
|
|
spiflash@0 {
|
|
compatible = "jedec,spi-nor";
|
|
reg = <0>;
|
|
|
|
/* May run faster once verified. */
|
|
spi-max-frequency = <10000000>;
|
|
};
|
|
};
|
|
|
|
&spi2 {
|
|
status = "okay";
|
|
};
|
|
|
|
&spi5 {
|
|
status = "okay";
|
|
|
|
cros_ec: ec@0 {
|
|
compatible = "google,cros-ec-spi";
|
|
reg = <0>;
|
|
interrupt-parent = <&gpio0>;
|
|
interrupts = <1 IRQ_TYPE_LEVEL_LOW>;
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&ec_ap_int_l>;
|
|
spi-max-frequency = <3000000>;
|
|
|
|
i2c_tunnel: i2c-tunnel {
|
|
compatible = "google,cros-ec-i2c-tunnel";
|
|
google,remote-bus = <4>;
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
};
|
|
|
|
usbc_extcon0: extcon@0 {
|
|
compatible = "google,extcon-usbc-cros-ec";
|
|
google,usb-port-id = <0>;
|
|
|
|
#extcon-cells = <0>;
|
|
};
|
|
};
|
|
};
|
|
|
|
&tsadc {
|
|
status = "okay";
|
|
|
|
rockchip,hw-tshut-mode = <1>; /* tshut mode 0:CRU 1:GPIO */
|
|
rockchip,hw-tshut-polarity = <1>; /* tshut polarity 0:LOW 1:HIGH */
|
|
};
|
|
|
|
&tcphy0 {
|
|
status = "okay";
|
|
extcon = <&usbc_extcon0>;
|
|
};
|
|
|
|
&u2phy0 {
|
|
status = "okay";
|
|
};
|
|
|
|
&u2phy0_host {
|
|
status = "okay";
|
|
};
|
|
|
|
&u2phy1_host {
|
|
status = "okay";
|
|
};
|
|
|
|
&u2phy0_otg {
|
|
status = "okay";
|
|
};
|
|
|
|
&u2phy1_otg {
|
|
status = "okay";
|
|
};
|
|
|
|
&uart2 {
|
|
status = "okay";
|
|
};
|
|
|
|
&usb_host0_ohci {
|
|
status = "okay";
|
|
};
|
|
|
|
&usbdrd3_0 {
|
|
status = "okay";
|
|
extcon = <&usbc_extcon0>;
|
|
};
|
|
|
|
&usbdrd_dwc3_0 {
|
|
status = "okay";
|
|
dr_mode = "host";
|
|
};
|
|
|
|
&vopb {
|
|
status = "okay";
|
|
};
|
|
|
|
&vopb_mmu {
|
|
status = "okay";
|
|
};
|
|
|
|
&vopl {
|
|
status = "okay";
|
|
};
|
|
|
|
&vopl_mmu {
|
|
status = "okay";
|
|
};
|
|
|
|
#include <arm/cros-ec-keyboard.dtsi>
|
|
#include <arm/cros-ec-sbs.dtsi>
|
|
|
|
&pinctrl {
|
|
/*
|
|
* pinctrl settings for pins that have no real owners.
|
|
*
|
|
* At the moment settings are identical for S0 and S3, but if we later
|
|
* need to configure things differently for S3 we'll adjust here.
|
|
*/
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <
|
|
&ap_pwroff /* AP will auto-assert this when in S3 */
|
|
&clk_32k /* This pin is always 32k on gru boards */
|
|
>;
|
|
|
|
pcfg_output_low: pcfg-output-low {
|
|
output-low;
|
|
};
|
|
|
|
pcfg_output_high: pcfg-output-high {
|
|
output-high;
|
|
};
|
|
|
|
pcfg_pull_none_8ma: pcfg-pull-none-8ma {
|
|
bias-disable;
|
|
drive-strength = <8>;
|
|
};
|
|
|
|
backlight-enable {
|
|
bl_en: bl-en {
|
|
rockchip,pins = <1 RK_PC1 RK_FUNC_GPIO &pcfg_pull_none>;
|
|
};
|
|
};
|
|
|
|
cros-ec {
|
|
ec_ap_int_l: ec-ap-int-l {
|
|
rockchip,pins = <0 RK_PA1 RK_FUNC_GPIO &pcfg_pull_up>;
|
|
};
|
|
};
|
|
|
|
discrete-regulators {
|
|
sd_io_pwr_en: sd-io-pwr-en {
|
|
rockchip,pins = <2 RK_PA2 RK_FUNC_GPIO
|
|
&pcfg_pull_none>;
|
|
};
|
|
|
|
sd_pwr_1800_sel: sd-pwr-1800-sel {
|
|
rockchip,pins = <2 RK_PD4 RK_FUNC_GPIO
|
|
&pcfg_pull_none>;
|
|
};
|
|
|
|
sd_slot_pwr_en: sd-slot-pwr-en {
|
|
rockchip,pins = <4 RK_PD5 RK_FUNC_GPIO
|
|
&pcfg_pull_none>;
|
|
};
|
|
};
|
|
|
|
codec {
|
|
/* Has external pullup */
|
|
headset_int_l: headset-int-l {
|
|
rockchip,pins = <1 RK_PC7 RK_FUNC_GPIO &pcfg_pull_none>;
|
|
};
|
|
|
|
mic_int: mic-int {
|
|
rockchip,pins = <1 RK_PB5 RK_FUNC_GPIO &pcfg_pull_down>;
|
|
};
|
|
};
|
|
|
|
max98357a {
|
|
sdmode_en: sdmode-en {
|
|
rockchip,pins = <1 RK_PA2 RK_FUNC_GPIO &pcfg_pull_down>;
|
|
};
|
|
};
|
|
|
|
pcie {
|
|
pcie_clkreqn_cpm: pci-clkreqn-cpm {
|
|
/*
|
|
* Since our pcie doesn't support ClockPM(CPM), we want
|
|
* to hack this as gpio, so the EP could be able to
|
|
* de-assert it along and make ClockPM(CPM) work.
|
|
*/
|
|
rockchip,pins = <2 RK_PD2 RK_FUNC_GPIO &pcfg_pull_none>;
|
|
};
|
|
};
|
|
|
|
sdmmc {
|
|
/*
|
|
* We run sdmmc at max speed; bump up drive strength.
|
|
* We also have external pulls, so disable the internal ones.
|
|
*/
|
|
sdmmc_bus4: sdmmc-bus4 {
|
|
rockchip,pins =
|
|
<4 RK_PB0 1 &pcfg_pull_none_8ma>,
|
|
<4 RK_PB1 1 &pcfg_pull_none_8ma>,
|
|
<4 RK_PB2 1 &pcfg_pull_none_8ma>,
|
|
<4 RK_PB3 1 &pcfg_pull_none_8ma>;
|
|
};
|
|
|
|
sdmmc_clk: sdmmc-clk {
|
|
rockchip,pins =
|
|
<4 RK_PB4 1 &pcfg_pull_none_8ma>;
|
|
};
|
|
|
|
sdmmc_cmd: sdmmc-cmd {
|
|
rockchip,pins =
|
|
<4 RK_PB5 1 &pcfg_pull_none_8ma>;
|
|
};
|
|
|
|
/*
|
|
* In our case the official card detect is hooked to ground
|
|
* to avoid getting access to JTAG just by sticking something
|
|
* in the SD card slot (see the force_jtag bit in the TRM).
|
|
*
|
|
* We still configure it as card detect because it doesn't
|
|
* hurt and dw_mmc will ignore it. We make sure to disable
|
|
* the pull though so we don't burn needless power.
|
|
*/
|
|
sdmmc_cd: sdmmc-cd {
|
|
rockchip,pins =
|
|
<0 RK_PA7 1 &pcfg_pull_none>;
|
|
};
|
|
|
|
/* This is where we actually hook up CD; has external pull */
|
|
sdmmc_cd_gpio: sdmmc-cd-gpio {
|
|
rockchip,pins = <4 RK_PD0 RK_FUNC_GPIO &pcfg_pull_none>;
|
|
};
|
|
};
|
|
|
|
spi1 {
|
|
spi1_sleep: spi1-sleep {
|
|
/*
|
|
* Pull down SPI1 CLK/CS/RX/TX during suspend, to
|
|
* prevent leakage.
|
|
*/
|
|
rockchip,pins = <1 RK_PB1 RK_FUNC_GPIO &pcfg_pull_down>,
|
|
<1 RK_PB2 RK_FUNC_GPIO &pcfg_pull_down>,
|
|
<1 RK_PA7 RK_FUNC_GPIO &pcfg_pull_down>,
|
|
<1 RK_PB0 RK_FUNC_GPIO &pcfg_pull_down>;
|
|
};
|
|
};
|
|
|
|
touchscreen {
|
|
touch_int_l: touch-int-l {
|
|
rockchip,pins = <3 RK_PB5 RK_FUNC_GPIO &pcfg_pull_up>;
|
|
};
|
|
|
|
touch_reset_l: touch-reset-l {
|
|
rockchip,pins = <4 RK_PD2 RK_FUNC_GPIO &pcfg_pull_none>;
|
|
};
|
|
};
|
|
|
|
trackpad {
|
|
ap_i2c_tp_pu_en: ap-i2c-tp-pu-en {
|
|
rockchip,pins = <3 RK_PB4 RK_FUNC_GPIO &pcfg_output_high>;
|
|
};
|
|
|
|
trackpad_int_l: trackpad-int-l {
|
|
rockchip,pins = <1 RK_PA4 RK_FUNC_GPIO &pcfg_pull_up>;
|
|
};
|
|
};
|
|
|
|
wifi: wifi {
|
|
wlan_module_reset_l: wlan-module-reset-l {
|
|
rockchip,pins = <1 RK_PB3 RK_FUNC_GPIO &pcfg_pull_none>;
|
|
};
|
|
|
|
bt_host_wake_l: bt-host-wake-l {
|
|
/* Kevin has an external pull up, but Gru does not */
|
|
rockchip,pins = <0 RK_PA3 RK_FUNC_GPIO &pcfg_pull_up>;
|
|
};
|
|
};
|
|
|
|
write-protect {
|
|
ap_fw_wp: ap-fw-wp {
|
|
rockchip,pins = <1 RK_PC2 RK_FUNC_GPIO &pcfg_pull_up>;
|
|
};
|
|
};
|
|
};
|