// SPDX-License-Identifier: (GPL-2.0+ OR MIT) /* * Copyright (c) 2020 Martijn Braam * Copyright (c) 2021 Kamil TrzciƄski */ /* * PinePhone Pro datasheet: * https://files.pine64.org/doc/PinePhonePro/PinephonePro-Schematic-V1.0-20211127.pdf */ /dts-v1/; #include #include #include #include "rk3399-s.dtsi" / { model = "Pine64 PinePhone Pro"; compatible = "pine64,pinephone-pro", "rockchip,rk3399"; chassis-type = "handset"; aliases { mmc0 = &sdio0; mmc1 = &sdmmc; mmc2 = &sdhci; }; chosen { stdout-path = "serial2:115200n8"; }; adc-keys { compatible = "adc-keys"; io-channels = <&saradc 1>; io-channel-names = "buttons"; keyup-threshold-microvolt = <1600000>; poll-interval = <100>; button-up { label = "Volume Up"; linux,code = ; press-threshold-microvolt = <100000>; }; button-down { label = "Volume Down"; linux,code = ; press-threshold-microvolt = <600000>; }; }; backlight: backlight { compatible = "pwm-backlight"; pwms = <&pwm0 0 50000 0>; }; gpio-keys { compatible = "gpio-keys"; pinctrl-names = "default"; pinctrl-0 = <&pwrbtn_pin>; key-power { debounce-interval = <20>; gpios = <&gpio0 RK_PA5 GPIO_ACTIVE_LOW>; label = "Power"; linux,code = ; wakeup-source; }; }; leds { compatible = "gpio-leds"; pinctrl-names = "default"; pinctrl-0 = <&red_led_pin &green_led_pin &blue_led_pin>; led_red: led-0 { color = ; gpios = <&gpio4 RK_PD2 GPIO_ACTIVE_HIGH>; }; led_green: led-1 { color = ; gpios = <&gpio4 RK_PD5 GPIO_ACTIVE_HIGH>; }; led_blue: led-2 { color = ; gpios = <&gpio4 RK_PD6 GPIO_ACTIVE_HIGH>; }; }; multi-led { compatible = "leds-group-multicolor"; color = ; function = LED_FUNCTION_INDICATOR; leds = <&led_red>, <&led_green>, <&led_blue>; }; vcc_sys: regulator-vcc-sys { compatible = "regulator-fixed"; regulator-name = "vcc_sys"; regulator-always-on; regulator-boot-on; }; vcc3v3_sys: regulator-vcc3v3-sys { compatible = "regulator-fixed"; regulator-name = "vcc3v3_sys"; regulator-always-on; regulator-boot-on; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; vin-supply = <&vcc_sys>; }; vcca1v8_s3: regulator-vcc1v8-s3 { compatible = "regulator-fixed"; regulator-name = "vcca1v8_s3"; regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; vin-supply = <&vcc3v3_sys>; regulator-always-on; regulator-boot-on; }; vcc1v8_codec: regulator-vcc1v8-codec { compatible = "regulator-fixed"; enable-active-high; gpio = <&gpio3 RK_PA4 GPIO_ACTIVE_HIGH>; pinctrl-names = "default"; pinctrl-0 = <&vcc1v8_codec_en>; regulator-name = "vcc1v8_codec"; regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; vin-supply = <&vcc3v3_sys>; }; wifi_pwrseq: sdio-wifi-pwrseq { compatible = "mmc-pwrseq-simple"; clocks = <&rk818 1>; clock-names = "ext_clock"; pinctrl-names = "default"; pinctrl-0 = <&wifi_enable_h_pin>; /* * Wait between power-on and SDIO access for CYP43455 * POR circuit. */ post-power-on-delay-ms = <110>; /* * Wait between consecutive toggles for CYP43455 CBUCK * regulator discharge. */ power-off-delay-us = <10000>; /* WL_REG_ON on module */ reset-gpios = <&gpio0 RK_PB2 GPIO_ACTIVE_LOW>; }; /* MIPI DSI panel 1.8v supply */ vcc1v8_lcd: regulator-vcc1v8-lcd { compatible = "regulator-fixed"; enable-active-high; regulator-name = "vcc1v8_lcd"; regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; vin-supply = <&vcc3v3_sys>; gpio = <&gpio3 RK_PA5 GPIO_ACTIVE_HIGH>; }; /* MIPI DSI panel 2.8v supply */ vcc2v8_lcd: regulator-vcc2v8-lcd { compatible = "regulator-fixed"; enable-active-high; regulator-name = "vcc2v8_lcd"; regulator-min-microvolt = <2800000>; regulator-max-microvolt = <2800000>; vin-supply = <&vcc3v3_sys>; gpio = <&gpio3 RK_PA1 GPIO_ACTIVE_HIGH>; }; vibrator { compatible = "gpio-vibrator"; enable-gpios = <&gpio3 RK_PB1 GPIO_ACTIVE_HIGH>; vcc-supply = <&vcc3v3_sys>; }; }; &cpu_alert0 { temperature = <65000>; }; &cpu_alert1 { temperature = <68000>; }; &cpu_l0 { cpu-supply = <&vdd_cpu_l>; }; &cpu_l1 { cpu-supply = <&vdd_cpu_l>; }; &cpu_l2 { cpu-supply = <&vdd_cpu_l>; }; &cpu_l3 { cpu-supply = <&vdd_cpu_l>; }; &cpu_b0 { cpu-supply = <&vdd_cpu_b>; }; &cpu_b1 { cpu-supply = <&vdd_cpu_b>; }; &emmc_phy { status = "okay"; }; &gpu { mali-supply = <&vdd_gpu>; status = "okay"; }; &i2c0 { clock-frequency = <400000>; i2c-scl-rising-time-ns = <168>; i2c-scl-falling-time-ns = <4>; status = "okay"; rk818: pmic@1c { compatible = "rockchip,rk818"; reg = <0x1c>; interrupt-parent = <&gpio1>; interrupts = ; #clock-cells = <1>; clock-output-names = "xin32k", "rk808-clkout2"; pinctrl-names = "default"; pinctrl-0 = <&pmic_int_l>; system-power-controller; wakeup-source; vcc1-supply = <&vcc_sys>; vcc2-supply = <&vcc_sys>; vcc3-supply = <&vcc_sys>; vcc4-supply = <&vcc_sys>; vcc6-supply = <&vcc_sys>; vcc7-supply = <&vcc3v3_sys>; vcc8-supply = <&vcc_sys>; vcc9-supply = <&vcc3v3_sys>; regulators { vdd_cpu_l: DCDC_REG1 { regulator-name = "vdd_cpu_l"; regulator-always-on; regulator-boot-on; regulator-min-microvolt = <875000>; regulator-max-microvolt = <975000>; regulator-ramp-delay = <6001>; regulator-state-mem { regulator-off-in-suspend; }; }; vdd_center: DCDC_REG2 { regulator-name = "vdd_center"; regulator-always-on; regulator-boot-on; regulator-min-microvolt = <800000>; regulator-max-microvolt = <1000000>; regulator-ramp-delay = <6001>; regulator-state-mem { regulator-off-in-suspend; }; }; vcc_ddr: DCDC_REG3 { regulator-name = "vcc_ddr"; regulator-always-on; regulator-boot-on; regulator-state-mem { regulator-on-in-suspend; }; }; vcc_1v8: DCDC_REG4 { regulator-name = "vcc_1v8"; regulator-always-on; regulator-boot-on; regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; regulator-state-mem { regulator-on-in-suspend; }; }; vcca3v0_codec: LDO_REG1 { regulator-name = "vcca3v0_codec"; regulator-min-microvolt = <3000000>; regulator-max-microvolt = <3000000>; }; vcc3v0_touch: LDO_REG2 { regulator-name = "vcc3v0_touch"; regulator-min-microvolt = <3000000>; regulator-max-microvolt = <3000000>; }; vcca1v8_codec: LDO_REG3 { regulator-name = "vcca1v8_codec"; regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; }; rk818_pwr_on: LDO_REG4 { regulator-name = "rk818_pwr_on"; regulator-always-on; regulator-boot-on; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; regulator-state-mem { regulator-on-in-suspend; }; }; vcc_3v0: LDO_REG5 { regulator-name = "vcc_3v0"; regulator-always-on; regulator-boot-on; regulator-min-microvolt = <3000000>; regulator-max-microvolt = <3000000>; regulator-state-mem { regulator-on-in-suspend; }; }; vcc_1v5: LDO_REG6 { regulator-name = "vcc_1v5"; regulator-always-on; regulator-boot-on; regulator-min-microvolt = <1500000>; regulator-max-microvolt = <1500000>; regulator-state-mem { regulator-on-in-suspend; }; }; vcc1v8_dvp: LDO_REG7 { regulator-name = "vcc1v8_dvp"; regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; }; vcc3v3_s3: LDO_REG8 { regulator-name = "vcc3v3_s3"; regulator-always-on; regulator-boot-on; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; regulator-state-mem { regulator-off-in-suspend; }; }; vccio_sd: LDO_REG9 { regulator-name = "vccio_sd"; regulator-min-microvolt = <1800000>; regulator-max-microvolt = <3300000>; }; vcc3v3_s0: SWITCH_REG { regulator-name = "vcc3v3_s0"; regulator-always-on; regulator-boot-on; regulator-state-mem { regulator-on-in-suspend; }; }; }; }; vdd_cpu_b: regulator@40 { compatible = "silergy,syr827"; reg = <0x40>; fcs,suspend-voltage-selector = <1>; pinctrl-names = "default"; pinctrl-0 = <&vsel1_pin>; regulator-name = "vdd_cpu_b"; regulator-min-microvolt = <875000>; regulator-max-microvolt = <1150000>; regulator-ramp-delay = <1000>; regulator-always-on; regulator-boot-on; regulator-state-mem { regulator-off-in-suspend; }; }; vdd_gpu: regulator@41 { compatible = "silergy,syr828"; reg = <0x41>; fcs,suspend-voltage-selector = <1>; pinctrl-names = "default"; pinctrl-0 = <&vsel2_pin>; regulator-name = "vdd_gpu"; regulator-min-microvolt = <875000>; regulator-max-microvolt = <975000>; regulator-ramp-delay = <1000>; regulator-always-on; regulator-boot-on; regulator-state-mem { regulator-off-in-suspend; }; }; }; &i2c3 { i2c-scl-rising-time-ns = <450>; i2c-scl-falling-time-ns = <15>; status = "okay"; touchscreen@14 { compatible = "goodix,gt1158"; reg = <0x14>; interrupt-parent = <&gpio3>; interrupts = ; irq-gpios = <&gpio3 RK_PB5 GPIO_ACTIVE_HIGH>; reset-gpios = <&gpio3 RK_PB4 GPIO_ACTIVE_HIGH>; AVDD28-supply = <&vcc3v0_touch>; VDDIO-supply = <&vcc3v0_touch>; touchscreen-size-x = <720>; touchscreen-size-y = <1440>; }; }; &i2c4 { i2c-scl-rising-time-ns = <600>; i2c-scl-falling-time-ns = <20>; status = "okay"; /* Accelerometer/gyroscope */ mpu6500@68 { compatible = "invensense,mpu6500"; reg = <0x68>; interrupt-parent = <&gpio1>; interrupts = ; vddio-supply = <&vcc_1v8>; }; }; &io_domains { bt656-supply = <&vcc1v8_dvp>; audio-supply = <&vcca1v8_codec>; sdmmc-supply = <&vccio_sd>; gpio1830-supply = <&vcc_3v0>; status = "okay"; }; &mipi_dsi { status = "okay"; clock-master; ports { mipi_out: port@1 { #address-cells = <0>; #size-cells = <0>; reg = <1>; mipi_out_panel: endpoint { remote-endpoint = <&mipi_in_panel>; }; }; }; panel@0 { compatible = "hannstar,hsd060bhw4"; reg = <0>; backlight = <&backlight>; reset-gpios = <&gpio4 RK_PD1 GPIO_ACTIVE_LOW>; vcc-supply = <&vcc2v8_lcd>; iovcc-supply = <&vcc1v8_lcd>; pinctrl-names = "default"; port { mipi_in_panel: endpoint { remote-endpoint = <&mipi_out_panel>; }; }; }; }; &pmu_io_domains { pmu1830-supply = <&vcc_1v8>; status = "okay"; }; &pinctrl { buttons { pwrbtn_pin: pwrbtn-pin { rockchip,pins = <0 RK_PA5 RK_FUNC_GPIO &pcfg_pull_up>; }; }; leds { red_led_pin: red-led-pin { rockchip,pins = <4 RK_PD2 RK_FUNC_GPIO &pcfg_pull_none>; }; green_led_pin: green-led-pin { rockchip,pins = <4 RK_PD5 RK_FUNC_GPIO &pcfg_pull_none>; }; blue_led_pin: blue-led-pin { rockchip,pins = <4 RK_PD6 RK_FUNC_GPIO &pcfg_pull_none>; }; }; pmic { pmic_int_l: pmic-int-l { rockchip,pins = <1 RK_PC5 RK_FUNC_GPIO &pcfg_pull_up>; }; vsel1_pin: vsel1-pin { rockchip,pins = <1 RK_PC1 RK_FUNC_GPIO &pcfg_pull_down>; }; vsel2_pin: vsel2-pin { rockchip,pins = <1 RK_PB6 RK_FUNC_GPIO &pcfg_pull_down>; }; }; sdio-pwrseq { wifi_enable_h_pin: wifi-enable-h-pin { rockchip,pins = <0 RK_PB2 RK_FUNC_GPIO &pcfg_pull_none>; }; }; sound { vcc1v8_codec_en: vcc1v8-codec-en { rockchip,pins = <3 RK_PA4 RK_FUNC_GPIO &pcfg_pull_down>; }; }; wireless-bluetooth { bt_wake_pin: bt-wake-pin { rockchip,pins = <2 RK_PD2 RK_FUNC_GPIO &pcfg_pull_none>; }; bt_host_wake_pin: bt-host-wake-pin { rockchip,pins = <0 RK_PA4 RK_FUNC_GPIO &pcfg_pull_none>; }; bt_reset_pin: bt-reset-pin { rockchip,pins = <0 RK_PB1 RK_FUNC_GPIO &pcfg_pull_none>; }; }; }; &sdio0 { bus-width = <4>; cap-sd-highspeed; cap-sdio-irq; disable-wp; keep-power-in-suspend; mmc-pwrseq = <&wifi_pwrseq>; non-removable; pinctrl-names = "default"; pinctrl-0 = <&sdio0_bus4 &sdio0_cmd &sdio0_clk>; sd-uhs-sdr104; status = "okay"; }; &pwm0 { status = "okay"; }; &saradc { vref-supply = <&vcca1v8_s3>; status = "okay"; }; &sdmmc { bus-width = <4>; cap-sd-highspeed; cd-gpios = <&gpio0 RK_PA7 GPIO_ACTIVE_LOW>; disable-wp; max-frequency = <150000000>; pinctrl-names = "default"; pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>; vmmc-supply = <&vcc3v3_sys>; vqmmc-supply = <&vccio_sd>; status = "okay"; }; &sdhci { bus-width = <8>; mmc-hs200-1_8v; non-removable; status = "okay"; }; &spi1 { status = "okay"; flash@0 { compatible = "jedec,spi-nor"; reg = <0>; spi-max-frequency = <10000000>; }; }; &tsadc { rockchip,hw-tshut-mode = <1>; rockchip,hw-tshut-polarity = <1>; status = "okay"; }; &uart0 { pinctrl-names = "default"; pinctrl-0 = <&uart0_xfer &uart0_cts &uart0_rts>; uart-has-rtscts; status = "okay"; bluetooth { compatible = "brcm,bcm4345c5"; clocks = <&rk818 1>; clock-names = "lpo"; device-wakeup-gpios = <&gpio2 RK_PD2 GPIO_ACTIVE_HIGH>; host-wakeup-gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_HIGH>; max-speed = <1500000>; pinctrl-names = "default"; pinctrl-0 = <&bt_host_wake_pin &bt_wake_pin &bt_reset_pin>; shutdown-gpios = <&gpio0 RK_PB1 GPIO_ACTIVE_HIGH>; vbat-supply = <&vcc3v3_sys>; vddio-supply = <&vcc_1v8>; }; }; &uart2 { status = "okay"; }; &vopb { status = "okay"; assigned-clocks = <&cru DCLK_VOP0_DIV>, <&cru DCLK_VOP0>, <&cru ACLK_VOP0>, <&cru HCLK_VOP0>; assigned-clock-rates = <0>, <0>, <400000000>, <100000000>; assigned-clock-parents = <&cru PLL_GPLL>, <&cru DCLK_VOP0_DIV>; }; &vopb_mmu { status = "okay"; }; &vopl { status = "okay"; assigned-clocks = <&cru DCLK_VOP1_DIV>, <&cru DCLK_VOP1>, <&cru ACLK_VOP1>, <&cru HCLK_VOP1>; assigned-clock-rates = <0>, <0>, <400000000>, <100000000>; assigned-clock-parents = <&cru PLL_GPLL>, <&cru DCLK_VOP1_DIV>; }; &vopl_mmu { status = "okay"; };