[ Upstream commit c13c823a78b77ea0e5f1f73112d910e259911101 ] The rk3399-gru PCI node addresses are wrong. In rk3399-gru-scarlet, the bus number in the address should be 0. This is because bus number assignment is dynamic and not known up front. For FDT, the bus number is simply ignored. In rk3399-gru-chromebook, the addresses are simply invalid. The first "reg" entry must be the configuration space for the device. The entry should be all 0s except for device/slot and function numbers. The existing 64-bit memory space (0x83000000) entries are not valid because they must have the BAR address in the lower byte of the first cell. Warnings for these are enabled by adding the missing 'device_type = "pci"' for the root port node. Signed-off-by: Rob Herring <robh@kernel.org> Link: https://lore.kernel.org/r/20231130191830.2424361-1-robh@kernel.org Signed-off-by: Heiko Stuebner <heiko@sntech.de> Signed-off-by: Sasha Levin <sashal@kernel.org>
591 lines
11 KiB
Plaintext
591 lines
11 KiB
Plaintext
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
|
/*
|
|
* Google Gru-Chromebook shared properties
|
|
*
|
|
* Copyright 2018 Google, Inc
|
|
*/
|
|
|
|
#include "rk3399-gru.dtsi"
|
|
|
|
/ {
|
|
pp900_ap: pp900-ap {
|
|
compatible = "regulator-fixed";
|
|
regulator-name = "pp900_ap";
|
|
|
|
/* EC turns on w/ pp900_ap_en; always on for AP */
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
regulator-min-microvolt = <900000>;
|
|
regulator-max-microvolt = <900000>;
|
|
|
|
vin-supply = <&ppvar_sys>;
|
|
};
|
|
|
|
/* EC turns on w/ pp900_usb_en */
|
|
pp900_usb: pp900-ap {
|
|
};
|
|
|
|
/* EC turns on w/ pp900_pcie_en */
|
|
pp900_pcie: pp900-ap {
|
|
};
|
|
|
|
pp3000: pp3000 {
|
|
compatible = "regulator-fixed";
|
|
regulator-name = "pp3000";
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&pp3000_en>;
|
|
|
|
enable-active-high;
|
|
gpio = <&gpio0 12 GPIO_ACTIVE_HIGH>;
|
|
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
regulator-min-microvolt = <3000000>;
|
|
regulator-max-microvolt = <3000000>;
|
|
|
|
vin-supply = <&ppvar_sys>;
|
|
};
|
|
|
|
ppvar_centerlogic_pwm: ppvar-centerlogic-pwm {
|
|
compatible = "pwm-regulator";
|
|
regulator-name = "ppvar_centerlogic_pwm";
|
|
|
|
pwms = <&pwm3 0 3337 0>;
|
|
pwm-supply = <&ppvar_sys>;
|
|
pwm-dutycycle-range = <100 0>;
|
|
pwm-dutycycle-unit = <100>;
|
|
|
|
/* EC turns on w/ ppvar_centerlogic_en; always on for AP */
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
regulator-min-microvolt = <799434>;
|
|
regulator-max-microvolt = <1049925>;
|
|
};
|
|
|
|
ppvar_centerlogic: ppvar-centerlogic {
|
|
compatible = "vctrl-regulator";
|
|
regulator-name = "ppvar_centerlogic";
|
|
|
|
regulator-min-microvolt = <799434>;
|
|
regulator-max-microvolt = <1049925>;
|
|
|
|
ctrl-supply = <&ppvar_centerlogic_pwm>;
|
|
ctrl-voltage-range = <799434 1049925>;
|
|
|
|
regulator-settling-time-up-us = <378>;
|
|
min-slew-down-rate = <225>;
|
|
ovp-threshold-percent = <16>;
|
|
};
|
|
|
|
/* Schematics call this PPVAR even though it's fixed */
|
|
ppvar_logic: ppvar-logic {
|
|
compatible = "regulator-fixed";
|
|
regulator-name = "ppvar_logic";
|
|
|
|
/* EC turns on w/ ppvar_logic_en; always on for AP */
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
regulator-min-microvolt = <900000>;
|
|
regulator-max-microvolt = <900000>;
|
|
|
|
vin-supply = <&ppvar_sys>;
|
|
};
|
|
|
|
pp1800_audio: pp1800-audio {
|
|
compatible = "regulator-fixed";
|
|
regulator-name = "pp1800_audio";
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&pp1800_audio_en>;
|
|
|
|
enable-active-high;
|
|
gpio = <&gpio0 2 GPIO_ACTIVE_HIGH>;
|
|
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
|
|
vin-supply = <&pp1800>;
|
|
};
|
|
|
|
/* gpio is shared with pp3300_wifi_bt */
|
|
pp1800_pcie: pp1800-pcie {
|
|
compatible = "regulator-fixed";
|
|
regulator-name = "pp1800_pcie";
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&wlan_module_pd_l>;
|
|
|
|
enable-active-high;
|
|
gpio = <&gpio0 4 GPIO_ACTIVE_HIGH>;
|
|
|
|
/*
|
|
* Need to wait 1ms + ramp-up time before we can power on WiFi.
|
|
* This has been approximated as 8ms total.
|
|
*/
|
|
regulator-enable-ramp-delay = <8000>;
|
|
|
|
vin-supply = <&pp1800>;
|
|
};
|
|
|
|
/* Always on; plain and simple */
|
|
pp3000_ap: pp3000_emmc: pp3000 {
|
|
};
|
|
|
|
pp1500_ap_io: pp1500-ap-io {
|
|
compatible = "regulator-fixed";
|
|
regulator-name = "pp1500_ap_io";
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&pp1500_en>;
|
|
|
|
enable-active-high;
|
|
gpio = <&gpio0 10 GPIO_ACTIVE_HIGH>;
|
|
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
regulator-min-microvolt = <1500000>;
|
|
regulator-max-microvolt = <1500000>;
|
|
|
|
vin-supply = <&pp1800>;
|
|
};
|
|
|
|
pp3300_disp: pp3300-disp {
|
|
compatible = "regulator-fixed";
|
|
regulator-name = "pp3300_disp";
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&pp3300_disp_en>;
|
|
|
|
enable-active-high;
|
|
gpio = <&gpio4 27 GPIO_ACTIVE_HIGH>;
|
|
|
|
startup-delay-us = <2000>;
|
|
vin-supply = <&pp3300>;
|
|
};
|
|
|
|
/* EC turns on w/ pp3300_usb_en_l */
|
|
pp3300_usb: pp3300 {
|
|
};
|
|
|
|
/* gpio is shared with pp1800_pcie and pinctrl is set there */
|
|
pp3300_wifi_bt: pp3300-wifi-bt {
|
|
compatible = "regulator-fixed";
|
|
regulator-name = "pp3300_wifi_bt";
|
|
|
|
enable-active-high;
|
|
gpio = <&gpio0 4 GPIO_ACTIVE_HIGH>;
|
|
|
|
vin-supply = <&pp3300>;
|
|
};
|
|
|
|
/*
|
|
* This is a bit of a hack. The WiFi module should be reset at least
|
|
* 1ms after its regulators have ramped up (max rampup time is ~7ms).
|
|
* With some stretching of the imagination, we can call the 1.8V
|
|
* regulator a supply.
|
|
*/
|
|
wlan_pd_n: wlan-pd-n {
|
|
compatible = "regulator-fixed";
|
|
regulator-name = "wlan_pd_n";
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&wlan_module_reset_l>;
|
|
|
|
enable-active-high;
|
|
gpio = <&gpio1 11 GPIO_ACTIVE_HIGH>;
|
|
|
|
vin-supply = <&pp1800_pcie>;
|
|
};
|
|
|
|
backlight: backlight {
|
|
compatible = "pwm-backlight";
|
|
enable-gpios = <&gpio1 17 GPIO_ACTIVE_HIGH>;
|
|
power-supply = <&pp3300_disp>;
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&bl_en>;
|
|
};
|
|
|
|
gpio_keys: gpio-keys {
|
|
compatible = "gpio-keys";
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&bt_host_wake_l>;
|
|
|
|
wake_on_bt: key-wake-on-bt {
|
|
label = "Wake-on-Bluetooth";
|
|
gpios = <&gpio0 3 GPIO_ACTIVE_LOW>;
|
|
linux,code = <KEY_WAKEUP>;
|
|
wakeup-source;
|
|
};
|
|
};
|
|
};
|
|
|
|
&ppvar_bigcpu {
|
|
min-slew-down-rate = <225>;
|
|
ovp-threshold-percent = <16>;
|
|
};
|
|
|
|
&ppvar_litcpu {
|
|
min-slew-down-rate = <225>;
|
|
ovp-threshold-percent = <16>;
|
|
};
|
|
|
|
&ppvar_gpu {
|
|
min-slew-down-rate = <225>;
|
|
ovp-threshold-percent = <16>;
|
|
};
|
|
|
|
&cdn_dp {
|
|
extcon = <&usbc_extcon0>, <&usbc_extcon1>;
|
|
};
|
|
|
|
&dmc {
|
|
center-supply = <&ppvar_centerlogic>;
|
|
rockchip,pd-idle-dis-freq-hz = <800000000>;
|
|
rockchip,sr-idle-dis-freq-hz = <800000000>;
|
|
rockchip,sr-mc-gate-idle-dis-freq-hz = <800000000>;
|
|
};
|
|
|
|
&edp {
|
|
status = "okay";
|
|
|
|
/*
|
|
* eDP PHY/clk don't sync reliably at anything other than 24 MHz. Only
|
|
* set this here, because rk3399-gru.dtsi ensures we can generate this
|
|
* off GPLL=600MHz, whereas some other RK3399 boards may not.
|
|
*/
|
|
assigned-clocks = <&cru PCLK_EDP>;
|
|
assigned-clock-rates = <24000000>;
|
|
|
|
ports {
|
|
edp_out: port@1 {
|
|
reg = <1>;
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
|
|
edp_out_panel: endpoint@0 {
|
|
reg = <0>;
|
|
remote-endpoint = <&panel_in_edp>;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
&gpio0 {
|
|
gpio-line-names = /* GPIO0 A 0-7 */
|
|
"AP_RTC_CLK_IN",
|
|
"EC_AP_INT_L",
|
|
"PP1800_AUDIO_EN",
|
|
"BT_HOST_WAKE_L",
|
|
"WLAN_MODULE_PD_L",
|
|
"H1_INT_OD_L",
|
|
"CENTERLOGIC_DVS_PWM",
|
|
"",
|
|
|
|
/* GPIO0 B 0-4 */
|
|
"WIFI_HOST_WAKE_L",
|
|
"PMUIO2_33_18_L",
|
|
"PP1500_EN",
|
|
"AP_EC_WARM_RESET_REQ",
|
|
"PP3000_EN";
|
|
};
|
|
|
|
&gpio1 {
|
|
gpio-line-names = /* GPIO1 A 0-7 */
|
|
"",
|
|
"",
|
|
"SPK_PA_EN",
|
|
"",
|
|
"TRACKPAD_INT_L",
|
|
"AP_EC_S3_S0_L",
|
|
"AP_EC_OVERTEMP",
|
|
"AP_SPI_FLASH_MISO",
|
|
|
|
/* GPIO1 B 0-7 */
|
|
"AP_SPI_FLASH_MOSI_R",
|
|
"AP_SPI_FLASH_CLK_R",
|
|
"AP_SPI_FLASH_CS_L_R",
|
|
"WLAN_MODULE_RESET_L",
|
|
"WIFI_DISABLE_L",
|
|
"MIC_INT",
|
|
"",
|
|
"AP_I2C_DVS_SDA",
|
|
|
|
/* GPIO1 C 0-7 */
|
|
"AP_I2C_DVS_SCL",
|
|
"AP_BL_EN",
|
|
/*
|
|
* AP_FLASH_WP is crossystem ABI. Schematics call it
|
|
* AP_FW_WP or CPU1_FW_WP, depending on the variant.
|
|
*/
|
|
"AP_FLASH_WP",
|
|
"LITCPU_DVS_PWM",
|
|
"AP_I2C_AUDIO_SDA",
|
|
"AP_I2C_AUDIO_SCL",
|
|
"",
|
|
"HEADSET_INT_L";
|
|
};
|
|
|
|
&gpio2 {
|
|
gpio-line-names = /* GPIO2 A 0-7 */
|
|
"",
|
|
"",
|
|
"SD_IO_PWR_EN",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
|
|
/* GPIO2 B 0-7 */
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
|
|
/* GPIO2 C 0-7 */
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"AP_SPI_EC_MISO",
|
|
"AP_SPI_EC_MOSI",
|
|
"AP_SPI_EC_CLK",
|
|
"AP_SPI_EC_CS_L",
|
|
|
|
/* GPIO2 D 0-4 */
|
|
"BT_DEV_WAKE_L",
|
|
"",
|
|
"WIFI_PCIE_CLKREQ_L",
|
|
"WIFI_PERST_L",
|
|
"SD_PWR_3000_1800_L";
|
|
};
|
|
|
|
&gpio3 {
|
|
gpio-line-names = /* GPIO3 A 0-7 */
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"AP_SPI_TPM_MISO",
|
|
"AP_SPI_TPM_MOSI_R",
|
|
"AP_SPI_TPM_CLK_R",
|
|
"AP_SPI_TPM_CS_L_R",
|
|
|
|
/* GPIO3 B 0-7 */
|
|
"EC_IN_RW",
|
|
"",
|
|
"AP_I2C_TP_SDA",
|
|
"AP_I2C_TP_SCL",
|
|
"AP_I2C_TP_PU_EN",
|
|
"TOUCH_INT_L",
|
|
"",
|
|
"",
|
|
|
|
/* GPIO3 C 0-7 */
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
|
|
/* GPIO3 D 0-7 */
|
|
"I2S0_SCLK",
|
|
"I2S0_LRCK_RX",
|
|
"I2S0_LRCK_TX",
|
|
"I2S0_SDI_0",
|
|
"I2S0_SDI_1",
|
|
"",
|
|
"I2S0_SDO_1",
|
|
"I2S0_SDO_0";
|
|
};
|
|
|
|
&gpio4 {
|
|
gpio-line-names = /* GPIO4 A 0-7 */
|
|
"I2S_MCLK",
|
|
"AP_I2C_MIC_SDA",
|
|
"AP_I2C_MIC_SCL",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
|
|
/* GPIO4 B 0-7 */
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
|
|
/* GPIO4 C 0-7 */
|
|
"AP_I2C_TS_SDA",
|
|
"AP_I2C_TS_SCL",
|
|
"GPU_DVS_PWM",
|
|
"UART_DBG_TX_AP_RX",
|
|
"UART_AP_TX_DBG_RX",
|
|
"",
|
|
"BIGCPU_DVS_PWM",
|
|
"EDP_HPD_3V0",
|
|
|
|
/* GPIO4 D 0-5 */
|
|
"SD_CARD_DET_L",
|
|
"USB_DP_HPD",
|
|
"TOUCH_RESET_L",
|
|
"PP3300_DISP_EN",
|
|
"",
|
|
"SD_SLOT_PWR_EN";
|
|
};
|
|
|
|
ap_i2c_mic: &i2c1 {
|
|
status = "okay";
|
|
|
|
clock-frequency = <400000>;
|
|
|
|
/* These are relatively safe rise/fall times */
|
|
i2c-scl-falling-time-ns = <50>;
|
|
i2c-scl-rising-time-ns = <300>;
|
|
|
|
headsetcodec: rt5514@57 {
|
|
compatible = "realtek,rt5514";
|
|
reg = <0x57>;
|
|
realtek,dmic-init-delay-ms = <20>;
|
|
};
|
|
};
|
|
|
|
ap_i2c_tp: &i2c5 {
|
|
status = "okay";
|
|
|
|
clock-frequency = <400000>;
|
|
|
|
/* These are relatively safe rise/fall times */
|
|
i2c-scl-falling-time-ns = <50>;
|
|
i2c-scl-rising-time-ns = <300>;
|
|
|
|
/*
|
|
* Note strange pullup enable. Apparently this avoids leakage but
|
|
* still allows us to get nice 4.7K pullups for high speed i2c
|
|
* transfers. Basically we want the pullup on whenever the ap is
|
|
* alive, so the "en" pin just gets set to output high.
|
|
*/
|
|
pinctrl-0 = <&i2c5_xfer &ap_i2c_tp_pu_en>;
|
|
};
|
|
|
|
&cros_ec {
|
|
cros_ec_pwm: pwm {
|
|
compatible = "google,cros-ec-pwm";
|
|
#pwm-cells = <1>;
|
|
};
|
|
|
|
usbc_extcon1: extcon1 {
|
|
compatible = "google,extcon-usbc-cros-ec";
|
|
google,usb-port-id = <1>;
|
|
};
|
|
};
|
|
|
|
&sound {
|
|
rockchip,codec = <&max98357a &headsetcodec
|
|
&codec &wacky_spi_audio &cdn_dp>;
|
|
};
|
|
|
|
&spi2 {
|
|
wacky_spi_audio: spi2@0 {
|
|
compatible = "realtek,rt5514";
|
|
reg = <0>;
|
|
interrupt-parent = <&gpio1>;
|
|
interrupts = <13 IRQ_TYPE_LEVEL_HIGH>;
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&mic_int>;
|
|
/* May run faster once verified. */
|
|
spi-max-frequency = <10000000>;
|
|
wakeup-source;
|
|
};
|
|
};
|
|
|
|
&pci_rootport {
|
|
mvl_wifi: wifi@0,0 {
|
|
compatible = "pci1b4b,2b42";
|
|
reg = <0x0000 0x0 0x0 0x0 0x0>;
|
|
interrupt-parent = <&gpio0>;
|
|
interrupts = <8 IRQ_TYPE_LEVEL_LOW>;
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&wlan_host_wake_l>;
|
|
wakeup-source;
|
|
};
|
|
};
|
|
|
|
&tcphy1 {
|
|
status = "okay";
|
|
extcon = <&usbc_extcon1>;
|
|
};
|
|
|
|
&u2phy1 {
|
|
status = "okay";
|
|
};
|
|
|
|
&usb_host0_ehci {
|
|
status = "okay";
|
|
};
|
|
|
|
&usb_host1_ehci {
|
|
status = "okay";
|
|
};
|
|
|
|
&usb_host1_ohci {
|
|
status = "okay";
|
|
};
|
|
|
|
&usbdrd3_1 {
|
|
status = "okay";
|
|
extcon = <&usbc_extcon1>;
|
|
};
|
|
|
|
&usbdrd_dwc3_1 {
|
|
status = "okay";
|
|
dr_mode = "host";
|
|
};
|
|
|
|
&pinctrl {
|
|
discrete-regulators {
|
|
pp1500_en: pp1500-en {
|
|
rockchip,pins = <0 RK_PB2 RK_FUNC_GPIO
|
|
&pcfg_pull_none>;
|
|
};
|
|
|
|
pp1800_audio_en: pp1800-audio-en {
|
|
rockchip,pins = <0 RK_PA2 RK_FUNC_GPIO
|
|
&pcfg_pull_down>;
|
|
};
|
|
|
|
pp3000_en: pp3000-en {
|
|
rockchip,pins = <0 RK_PB4 RK_FUNC_GPIO
|
|
&pcfg_pull_none>;
|
|
};
|
|
|
|
pp3300_disp_en: pp3300-disp-en {
|
|
rockchip,pins = <4 RK_PD3 RK_FUNC_GPIO
|
|
&pcfg_pull_none>;
|
|
};
|
|
|
|
wlan_module_pd_l: wlan-module-pd-l {
|
|
rockchip,pins = <0 RK_PA4 RK_FUNC_GPIO
|
|
&pcfg_pull_down>;
|
|
};
|
|
};
|
|
};
|
|
|
|
&wifi {
|
|
wifi_perst_l: wifi-perst-l {
|
|
rockchip,pins = <2 RK_PD3 RK_FUNC_GPIO &pcfg_pull_none>;
|
|
};
|
|
|
|
wlan_host_wake_l: wlan-host-wake-l {
|
|
/* Kevin has an external pull up, but Bob does not */
|
|
rockchip,pins = <0 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>;
|
|
};
|
|
};
|