// 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 = <0x83010000 0x0 0x00000000 0x0 0x00100000 0x83010000 0x0 0x00100000 0x0 0x00100000>; 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>; }; };