Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp628360imu; Tue, 27 Nov 2018 18:46:55 -0800 (PST) X-Google-Smtp-Source: AFSGD/XUjQDNE9PbIqG4vRCIpfU1S2lMtkwIYKilWUq7AAf+UGjbJEAkDqG4TLS5rEbhS/F9IDhA X-Received: by 2002:a63:5f95:: with SMTP id t143mr31946828pgb.395.1543373215539; Tue, 27 Nov 2018 18:46:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1543373215; cv=none; d=google.com; s=arc-20160816; b=dZmyQzkzX63JYtax+W1nNTdQ8Ob6g0GBpyy78zTraV9xSawSgkiwImzZSc7bq6rB4g aWKKMyh1ZRzh/3q15aMyQ7XXvfDRuIAxYpAuLdKOwtFw0f095GYYOALVD/bqZC6pd2Tg wAMWRJus+NbB8rG5m8keYo5oYp0LpT080sMf02kU25aKQCl8TNsCKTGigpzHO/h0ZICq iNmV1OEtRmwAn1Pg8nhBodTozByeBGSy2nBhn+OFfyMjCaIWBu2uKPsXZjAAGrCtPCGu CW0fsJ26W04U2hE/zXW3JUdxm3HNm6PlI4LYLJKxhc0ylLP6oHs8FUt1iunXesBp84J6 plrA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject; bh=kSdZS6OMY4bU8ab+tjPUpLQscVe1WrehrntRsEHDo3c=; b=XwB4BJnH3TxTN/dhDIDQ1dne/PYwgd66bXErk2xMVgEFEuNksDLx8hDDeG/vmHmENO bI6W0X+Bngoj6HnNON7lT01B++N9ObdadtoV6KzH2Jl1qwdlFDEvx/sLMtGKg1rOChoJ Mkbv1ap323mOdiSxdhmy5ez44O/ru0YaoumQUzXo1pb7Az2/asWLpG5F0+fYVOsCu1Bb 1ZPwaTZanmqdExOZ9wtc6gnbr2agv4cBsaPDl029pvYqF2lar14iq5+dY3PCOve4qcem rnI0bFAR7KPwbxZ8tMwOnK7xACOkoXbsOhp2sQzx4pFrDvZAHis65lbbsgY6tCdBx7DV zRxg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z8si5639322pgk.183.2018.11.27.18.46.40; Tue, 27 Nov 2018 18:46:55 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727186AbeK1Npl (ORCPT + 99 others); Wed, 28 Nov 2018 08:45:41 -0500 Received: from usa-sjc-mx-foss1.foss.arm.com ([217.140.101.70]:53912 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726548AbeK1Npl (ORCPT ); Wed, 28 Nov 2018 08:45:41 -0500 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id BB16F2379; Tue, 27 Nov 2018 18:45:42 -0800 (PST) Received: from [192.168.1.123] (usa-sjc-mx-foss1.foss.arm.com [217.140.101.70]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 2852B3F575; Tue, 27 Nov 2018 18:45:38 -0800 (PST) Subject: Re: [PATCH v4] arm64: dts: rockchip: Add DT for nanopc-t4 To: Tomeu Vizoso , heiko@sntech.de Cc: Mark Rutland , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org, Rob Herring , linux-arm-kernel@lists.infradead.org, Enric Balletbo i Serra , Ezequiel Garcia , Liang Chen References: <20181123073120.6250-1-tomeu.vizoso@collabora.com> <20181127091235.50351-1-tomeu.vizoso@collabora.com> From: Robin Murphy Message-ID: <311cf158-5b21-f2d4-2a84-4a0226a7b9af@arm.com> Date: Wed, 28 Nov 2018 02:45:34 +0000 User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:60.0) Gecko/20100101 Thunderbird/60.3.1 MIME-Version: 1.0 In-Reply-To: <20181127091235.50351-1-tomeu.vizoso@collabora.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-GB Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Tomeu, On 2018-11-27 9:07 am, Tomeu Vizoso wrote: > This adds a device tree for the NanoPC-T4 SBC, which is based on the > Rockchip RK3399 SoC and marketed by FriendlyELEC. I'm happy to see this, as mine's been sat waiting until I could find time to wrangle a mainline DT for it :) > Known working: > > - Serial > - Ethernet > - HDMI > - USB 2.0 > > All of the interesting stuff is in a .dtsi because there are at least > two other boards that share most of it: NanoPi M4 and NanoPi NEO4. TBH after picking through all 3 schematics, this looks to describe the details of the M4 a lot more than it does the T4. > Signed-off-by: Tomeu Vizoso > --- > > v2: - Rename compatible from friendlyelec to friendlyarm, to match > existing bindings > - Remove superfluous node spi1 > > v3: - Rewrite regulator tree to match the schematics (Heiko) > - Sort top-level nodes alphabetically (Heiko) > - Used defines for GPIO numbers (Heiko) > - Enabled rga (Heiko) > - Removed cdn_dp node (Heiko) > - Removed dependencies to fusb0 as extcon (Heiko) > - Removed superfluous properties (Heiko) > > v4: - Replace underscores in node names (Heiko) > - Reorder entry in makefile (Heiko) > - Remove superfluous properties and nodes (Heiko and Shawn) > - Use xin32k as one of the clock outputs of the RK808 (Heiko) > --- > .../devicetree/bindings/arm/rockchip.txt | 4 + > arch/arm64/boot/dts/rockchip/Makefile | 1 + > .../boot/dts/rockchip/rk3399-nanopc-t4.dts | 18 + > .../boot/dts/rockchip/rk3399-nanopi4.dtsi | 732 ++++++++++++++++++ > 4 files changed, 755 insertions(+) > create mode 100644 arch/arm64/boot/dts/rockchip/rk3399-nanopc-t4.dts > create mode 100644 arch/arm64/boot/dts/rockchip/rk3399-nanopi4.dtsi > > diff --git a/Documentation/devicetree/bindings/arm/rockchip.txt b/Documentation/devicetree/bindings/arm/rockchip.txt > index 0cc71236d639..e907d309486e 100644 > --- a/Documentation/devicetree/bindings/arm/rockchip.txt > +++ b/Documentation/devicetree/bindings/arm/rockchip.txt > @@ -71,6 +71,10 @@ Rockchip platforms device tree bindings > Required root node properties: > - compatible = "firefly,roc-rk3399-pc", "rockchip,rk3399"; > > +- FriendlyElec NanoPC-T4 board: > + Required root node properties: > + - compatible = "friendlyarm,nanopc-t4", "rockchip,rk3399"; > + > - ChipSPARK PopMetal-RK3288 board: > Required root node properties: > - compatible = "chipspark,popmetal-rk3288", "rockchip,rk3288"; > diff --git a/arch/arm64/boot/dts/rockchip/Makefile b/arch/arm64/boot/dts/rockchip/Makefile > index 49042c477870..19c129702e06 100644 > --- a/arch/arm64/boot/dts/rockchip/Makefile > +++ b/arch/arm64/boot/dts/rockchip/Makefile > @@ -14,6 +14,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-ficus.dtb > dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-firefly.dtb > dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-gru-bob.dtb > dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-gru-kevin.dtb > +dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-nanopc-t4.dtb > dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-puma-haikou.dtb > dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-roc-pc.dtb > dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-rock960.dtb > diff --git a/arch/arm64/boot/dts/rockchip/rk3399-nanopc-t4.dts b/arch/arm64/boot/dts/rockchip/rk3399-nanopc-t4.dts > new file mode 100644 > index 000000000000..0965712b4464 > --- /dev/null > +++ b/arch/arm64/boot/dts/rockchip/rk3399-nanopc-t4.dts > @@ -0,0 +1,18 @@ > +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) > +/* > + * FriendlyElec NanoPC-T4 board device tree source > + * > + * Copyright (c) 2018 FriendlyElec Computer Tech. Co., Ltd. > + * (http://www.friendlyarm.com) > + * > + * Copyright (c) 2018 Collabora Ltd. > + */ > + > +/dts-v1/; > +#include "rk3399-nanopi4.dtsi" > + > +/ { > + model = "FriendlyElec NanoPC-T4"; > + compatible = "friendlyarm,nanopc-t4", "rockchip,rk3399"; > +}; > + > diff --git a/arch/arm64/boot/dts/rockchip/rk3399-nanopi4.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-nanopi4.dtsi > new file mode 100644 > index 000000000000..e10b98d637d3 > --- /dev/null > +++ b/arch/arm64/boot/dts/rockchip/rk3399-nanopi4.dtsi > @@ -0,0 +1,732 @@ > +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) > +/* > + * RK3399-based FriendlyElec boards device tree source > + * > + * Copyright (c) 2016 Fuzhou Rockchip Electronics Co., Ltd > + * > + * Copyright (c) 2018 FriendlyElec Computer Tech. Co., Ltd. > + * (http://www.friendlyarm.com) > + * > + * Copyright (c) 2018 Collabora Ltd. > + */ > + > +/dts-v1/; > +#include > +#include "rk3399.dtsi" > +#include "rk3399-opp.dtsi" > + > +/ { > + chosen { > + stdout-path = "serial2:1500000n8"; > + }; > + > + clkin_gmac: external-gmac-clock { > + compatible = "fixed-clock"; > + clock-frequency = <125000000>; > + clock-output-names = "clkin_gmac"; > + #clock-cells = <0>; > + }; > + > + vdd_5v: vdd-5v { > + compatible = "regulator-fixed"; > + regulator-name = "vdd_5v"; > + regulator-always-on; > + regulator-boot-on; > + }; This doesn't exist on the T4 - VCC5V0_SYS is generated from VCC12V0_SYS (the unregulated DC input)... > + vcc5v0_core: vcc5v0-core { > + compatible = "regulator-fixed"; > + regulator-name = "vcc5v0_core"; > + regulator-always-on; > + regulator-boot-on; > + vin-supply = <&vdd_5v>; > + }; > + > + vcc3v3_sys: 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 = <&vcc5v0_core>; ...as is VCC3V3_SYS - there's no VCC5V0_CORE either. > + }; > + > + vcc5v0_sys: vcc5v0-sys { > + compatible = "regulator-fixed"; > + regulator-name = "vcc5v0_sys"; > + regulator-always-on; > + regulator-boot-on; > + regulator-min-microvolt = <5000000>; > + regulator-max-microvolt = <5000000>; > + vin-supply = <&vdd_5v>; > + }; > + > + vcc5v0_usb1: vcc5v0-usb1 { > + compatible = "regulator-fixed"; > + regulator-name = "vcc5v0_usb1"; > + regulator-always-on; > + regulator-boot-on; > + vin-supply = <&vcc5v0_sys>; > + }; > + > + vcc5v0_usb2: vcc5v0-usb2 { > + compatible = "regulator-fixed"; > + regulator-name = "vcc5v0_usb2"; > + regulator-always-on; > + regulator-boot-on; > + vin-supply = <&vcc5v0_sys>; > + }; AFAICS the naming and topology related to the various USB-A connectors differs enough across all 3 variants that it all probably wants punting down to the board DTS level (where the relevant supplies would be VCC5V0_HOST0 and VCC5V0_HOST2 on the T4). Or we could possibly just pretend they're all powered directly by VCC5V0_SYS (the current switches are only acting as limiters and not actually switchable, after all). > + > + /* switched by pmic_sleep */ > + vcc1v8_s3: vcca1v8_s3: vcc1v8-s3 { Strictly, VCCA1V8_S3 is a separate rail supplied by VCC3V3_SYS and switched by VCC1V8_S3 (on all 3 boards). > + compatible = "regulator-fixed"; > + regulator-name = "vcc1v8_s3"; > + regulator-always-on; > + regulator-boot-on; > + regulator-min-microvolt = <1800000>; > + regulator-max-microvolt = <1800000>; > + vin-supply = <&vcc_1v8>; > + }; > + > + vcc3v0_sd: vcc3v0-sd { > + compatible = "regulator-fixed"; > + enable-active-high; > + gpio = <&gpio0 RK_PA1 GPIO_ACTIVE_HIGH>; > + pinctrl-names = "default"; > + pinctrl-0 = <&sdmmc0_pwr_h>; > + regulator-always-on; > + regulator-max-microvolt = <3000000>; > + regulator-min-microvolt = <3000000>; > + regulator-name = "vcc3v0_sd"; > + vin-supply = <&vcc3v3_sys>; > + }; > + > + vbus_typec: vbus-typec { > + compatible = "regulator-fixed"; > + enable-active-high; > + gpios = <&gpio4 RK_PD2 GPIO_ACTIVE_HIGH>; > + regulator-name = "vbus_typec"; > + regulator-always-on; > + vin-supply = <&vdd_5v>; Again, VCC5V0_SYS for the T4. > + }; > + > + gpio-keys { > + compatible = "gpio-keys"; > + #address-cells = <1>; > + #size-cells = <0>; #address-cells and #size-cells aren't necessary here. > + autorepeat; > + > + pinctrl-names = "default"; > + pinctrl-0 = <&power_key>; > + > + button@0 { Nit: this doesn't have a reg property, so shouldn't have a unit address in the name either - it could be named "button0" or just "button", or maybe "power-key". > + debounce-interval = <100>; > + gpios = <&gpio0 RK_PA5 GPIO_ACTIVE_LOW>; > + label = "GPIO Key Power"; > + linux,code = ; > + linux,input-type = <1>; The binding explicitly defines 1 to be the default value, so it shouldn't really need to be specified. > + wakeup-source; > + }; > + }; > + > + adc-keys { > + compatible = "adc-keys"; > + io-channels = <&saradc 1>; > + io-channel-names = "buttons"; > + poll-interval = <100>; > + keyup-threshold-microvolt = <1800000>; > + > + button-up { > + label = "Volume Up"; > + linux,code = ; > + press-threshold-microvolt = <100000>; > + }; > + > + button-down { > + label = "Volume Down"; > + linux,code = ; > + press-threshold-microvolt = <300000>; > + }; What are these buttons? AFAICS the T4 board only has the recovery key on ADC_IN1, and the others don't even have that. I'm not sure what the recovery key's appropriate threshold value would be, but empirically it does pull the line down to about 18mV as expected from the R70/R35 voltage divider. > + }; > + > + leds: gpio-leds { > + compatible = "gpio-leds"; > + pinctrl-names = "default"; > + pinctrl-0 =<&leds_gpio>; > + > + led@1 { Nit: unit address again - just "led" would do, or maybe "status-led". > + gpios = <&gpio0 RK_PB5 GPIO_ACTIVE_HIGH>; > + label = "status_led"; > + linux,default-trigger = "heartbeat"; > + linux,default-trigger-delay-ms = <0>; This property doesn't seem to exist in mainline. > + }; > + }; > + > + sdio_pwrseq: sdio-pwrseq { > + compatible = "mmc-pwrseq-simple"; > + clocks = <&rk808 1>; > + clock-names = "ext_clock"; > + pinctrl-names = "default"; > + pinctrl-0 = <&wifi_enable_h>; > + > + /* > + * On the module itself this is one of these (depending > + * on the actual card populated): > + * - SDIO_RESET_L_WL_REG_ON > + * - PDN (power down when low) > + */ This comment seems out of place - on all 3 boards the signal is named WIFI_REG_ON_H, and all the relevant Ampak/Fn-Link modules seem to name the corresponding pin WL_REG_ON. > + reset-gpios = <&gpio0 RK_PB2 GPIO_ACTIVE_LOW>; > + }; > +}; > + > +&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"; > +}; > + > +&gmac { > + phy-supply = <&vcc3v3_s3>; > + phy-mode = "rgmii"; > + clock_in_out = "input"; > + snps,reset-gpio = <&gpio3 RK_PB7 GPIO_ACTIVE_LOW>; > + snps,reset-active-low; > + snps,reset-delays-us = <0 10000 50000>; > + assigned-clocks = <&cru SCLK_RMII_SRC>; > + assigned-clock-parents = <&clkin_gmac>; > + pinctrl-names = "default"; > + pinctrl-0 = <&rgmii_pins>; > + tx_delay = <0x28>; > + rx_delay = <0x11>; > + status = "okay"; > +}; > + > +&gpu { > + status = "okay"; > + mali-supply = <&vdd_gpu>; > +}; > + > +&hdmi { > + ddc-i2c-bus = <&i2c7>; > + pinctrl-names = "default"; > + pinctrl-0 = <&hdmi_cec>; > + status = "okay"; > +}; > + > +&i2c0 { > + status = "okay"; > + i2c-scl-rising-time-ns = <160>; > + i2c-scl-falling-time-ns = <30>; > + clock-frequency = <400000>; > + > + vdd_cpu_b: regulator@40 { > + compatible = "silergy,syr827"; > + reg = <0x40>; > + vin-supply = <&vcc3v3_sys>; > + pinctrl-names = "default"; > + pinctrl-0 = <&vsel1_gpio>; > + regulator-name = "vdd_cpu_b"; > + regulator-min-microvolt = <712500>; > + regulator-max-microvolt = <1500000>; > + regulator-ramp-delay = <1000>; > + fcs,suspend-voltage-selector = <1>; > + regulator-always-on; > + regulator-boot-on; > + regulator-initial-state = <3>; This property doesn't seem to exist in mainline either. There's a "regulator-inital-mode", but it doesn't look like the fan53555 driver supports that anyway. > + regulator-state-mem { > + regulator-off-in-suspend; > + }; > + }; > + > + vdd_gpu: regulator@41 { > + compatible = "silergy,syr828"; > + reg = <0x41>; > + vin-supply = <&vcc3v3_sys>; > + pinctrl-names = "default"; > + pinctrl-0 = <&vsel2_gpio>; > + regulator-name = "vdd_gpu"; > + regulator-min-microvolt = <712500>; > + regulator-max-microvolt = <1500000>; > + regulator-ramp-delay = <1000>; > + fcs,suspend-voltage-selector = <1>; > + regulator-always-on; > + regulator-boot-on; > + regulator-initial-state = <3>; As above. > + regulator-state-mem { > + regulator-off-in-suspend; > + }; > + }; > + > + rk808: pmic@1b { > + compatible = "rockchip,rk808"; > + reg = <0x1b>; > + interrupt-parent = <&gpio1>; > + interrupts = <21 IRQ_TYPE_LEVEL_LOW>; > + pinctrl-names = "default"; > + pinctrl-0 = <&pmic_int_l>; > + rockchip,system-power-controller; > + wakeup-source; > + #clock-cells = <1>; > + clock-output-names = "xin32k", "rk808-clkout2"; > + > + vcc1-supply = <&vcc3v3_sys>; > + vcc2-supply = <&vcc3v3_sys>; > + vcc3-supply = <&vcc3v3_sys>; > + vcc4-supply = <&vcc3v3_sys>; > + vcc6-supply = <&vcc3v3_sys>; > + vcc7-supply = <&vcc3v3_sys>; > + vcc8-supply = <&vcc3v3_sys>; > + vcc9-supply = <&vcc3v3_sys>; > + vcc10-supply = <&vcc3v3_sys>; > + vcc11-supply = <&vcc3v3_sys>; > + vcc12-supply = <&vcc3v3_sys>; > + vddio-supply = <&vcc_3v0>; > + > + regulators { > + vdd_center: DCDC_REG1 { > + regulator-always-on; > + regulator-boot-on; > + regulator-min-microvolt = <750000>; > + regulator-max-microvolt = <1350000>; > + regulator-ramp-delay = <6001>; > + regulator-name = "vdd_center"; > + regulator-state-mem { > + regulator-off-in-suspend; > + }; > + }; > + > + vdd_cpu_l: DCDC_REG2 { > + regulator-always-on; > + regulator-boot-on; > + regulator-min-microvolt = <750000>; > + regulator-max-microvolt = <1350000>; > + regulator-ramp-delay = <6001>; > + regulator-name = "vdd_cpu_l"; > + regulator-state-mem { > + regulator-off-in-suspend; > + }; > + }; > + > + vcc_ddr: DCDC_REG3 { > + regulator-always-on; > + regulator-boot-on; > + regulator-name = "vcc_ddr"; > + regulator-state-mem { > + regulator-on-in-suspend; > + }; > + }; > + > + vcc_1v8: DCDC_REG4 { > + regulator-always-on; > + regulator-boot-on; > + regulator-min-microvolt = <1800000>; > + regulator-max-microvolt = <1800000>; > + regulator-name = "vcc_1v8"; > + regulator-state-mem { > + regulator-on-in-suspend; > + regulator-suspend-microvolt = <1800000>; > + }; > + }; > + > + vcc1v8_dvp: LDO_REG1 { > + regulator-always-on; > + regulator-boot-on; > + regulator-min-microvolt = <1800000>; > + regulator-max-microvolt = <1800000>; > + regulator-name = "vcc1v8_dvp"; > + regulator-state-mem { > + regulator-off-in-suspend; > + }; > + }; > + > + vcc3v0_tp: LDO_REG2 { > + regulator-always-on; > + regulator-boot-on; > + regulator-min-microvolt = <3000000>; > + regulator-max-microvolt = <3000000>; > + regulator-name = "vcc3v0_tp"; > + regulator-state-mem { > + regulator-off-in-suspend; > + }; > + }; > + > + vcc1v8_pmu: LDO_REG3 { > + regulator-always-on; > + regulator-boot-on; > + regulator-min-microvolt = <1800000>; > + regulator-max-microvolt = <1800000>; > + regulator-name = "vcc1v8_pmu"; > + regulator-state-mem { > + regulator-on-in-suspend; > + regulator-suspend-microvolt = <1800000>; > + }; > + }; > + > + vccio_sd: LDO_REG4 { > + regulator-always-on; > + regulator-boot-on; > + regulator-min-microvolt = <1800000>; > + regulator-max-microvolt = <3300000>; > + regulator-init-microvolt = <3000000>; > + regulator-name = "vccio_sd"; > + regulator-state-mem { > + regulator-on-in-suspend; > + regulator-suspend-microvolt = <3000000>; > + }; > + }; > + > + vcca3v0_codec: LDO_REG5 { > + regulator-always-on; > + regulator-boot-on; > + regulator-min-microvolt = <3000000>; > + regulator-max-microvolt = <3000000>; > + regulator-name = "vcca3v0_codec"; > + regulator-state-mem { > + regulator-off-in-suspend; > + }; > + }; > + > + vcc_1v5: LDO_REG6 { > + regulator-always-on; > + regulator-boot-on; > + regulator-min-microvolt = <1500000>; > + regulator-max-microvolt = <1500000>; > + regulator-name = "vcc_1v5"; > + regulator-state-mem { > + regulator-on-in-suspend; > + regulator-suspend-microvolt = <1500000>; > + }; > + }; > + > + vcca1v8_codec: LDO_REG7 { > + regulator-always-on; > + regulator-boot-on; > + regulator-min-microvolt = <1800000>; > + regulator-max-microvolt = <1800000>; > + regulator-name = "vcca1v8_codec"; > + regulator-state-mem { > + regulator-off-in-suspend; > + }; > + }; > + > + vcc_3v0: LDO_REG8 { > + regulator-always-on; > + regulator-boot-on; > + regulator-min-microvolt = <3000000>; > + regulator-max-microvolt = <3000000>; > + regulator-name = "vcc_3v0"; > + regulator-state-mem { > + regulator-on-in-suspend; > + regulator-suspend-microvolt = <3000000>; > + }; > + }; > + > + vcc3v3_s3: SWITCH_REG1 { > + regulator-always-on; > + regulator-boot-on; > + regulator-name = "vcc3v3_s3"; > + regulator-state-mem { > + regulator-off-in-suspend; > + }; > + }; > + > + vcc3v3_s0: SWITCH_REG2 { > + regulator-always-on; > + regulator-boot-on; > + regulator-name = "vcc3v3_s0"; > + regulator-state-mem { > + regulator-off-in-suspend; > + }; > + }; > + }; > + }; > +}; > + > +&i2c1 { > + status = "okay"; > + i2c-scl-rising-time-ns = <150>; > + i2c-scl-falling-time-ns = <30>; > + clock-frequency = <200000>; > +}; > + > +&i2c2 { > + status = "okay"; > +}; > + > +&i2c4 { > + status = "okay"; > + i2c-scl-rising-time-ns = <160>; > + i2c-scl-falling-time-ns = <30>; > + clock-frequency = <400000>; > + > + fusb0: typec-portc@22 { > + compatible = "fcs,fusb302"; > + reg = <0x22>; > + interrupt-parent = <&gpio1>; > + interrupts = ; > + pinctrl-names = "default"; > + pinctrl-0 = <&fusb0_int>; > + vbus-supply = <&vbus_typec>; > + status = "okay"; > + }; > +}; > + > +&i2c7 { > + status = "okay"; > +}; > + > +&io_domains { > + status = "okay"; > + > + bt656-supply = <&vcc1v8_dvp>; > + audio-supply = <&vcca1v8_codec>; > + sdmmc-supply = <&vccio_sd>; > + gpio1830-supply = <&vcc_3v0>; > +}; > + > +&pcie_phy { > + status = "okay"; > + assigned-clocks = <&cru SCLK_PCIEPHY_REF>; > + assigned-clock-parents = <&cru SCLK_PCIEPHY_REF100M>; > + assigned-clock-rates = <100000000>; > +}; > + > +&pcie0 { > + status = "okay"; > + ep-gpios = <&gpio2 RK_PA4 GPIO_ACTIVE_HIGH>; > + num-lanes = <4>; > + max-link-speed = <2>; > +}; > + > +&pinctrl { > + pmic { > + pmic_int_l: pmic-int-l { > + rockchip,pins = ; > + }; > + > + vsel1_gpio: vsel1-gpio { "cpu-b-sleep" > + rockchip,pins = ; > + }; Nit: missing newline here. > + vsel2_gpio: vsel2-gpio { "gpu-sleep" > + rockchip,pins = ; > + }; > + }; > + > + sd { > + sdmmc0_pwr_h: sdmmc0-pwr-h { > + rockchip,pins = > + ; > + }; > + }; > + > + fusb30x { > + fusb0_int: fusb0-int { > + rockchip,pins = ; > + }; > + }; > + > + sdio-pwrseq { > + wifi_enable_h: wifi-enable-h { > + rockchip,pins = ; > + }; > + }; > + > + rockchip-key { > + power_key: power-key { > + rockchip,pins = ; > + }; > + }; > + > + gpio-leds { > + leds_gpio: leds-gpio { > + rockchip,pins = ; > + }; > + }; > +}; > + > +&pmu_io_domains { > + status = "okay"; > + pmu1830-supply = <&vcc_3v0>; > +}; > + > +&pwm0 { > + status = "okay"; > +}; > + > +&pwm1 { > + status = "okay"; > +}; > + > +&pwm2 { > + status = "okay"; > + pinctrl-names = "active"; > + pinctrl-0 = <&pwm2_pin_pull_down>; > +}; > + > +&saradc { > + status = "okay"; > + vref-supply = <&vcca1v8_s3>; > +}; > + > +&sdhci { > + bus-width = <8>; > + mmc-hs400-1_8v; > + non-removable; > + mmc-hs400-enhanced-strobe; > + status = "okay"; > +}; > + > +&sdio0 { > + bus-width = <4>; > + disable-wp; > + cap-sd-highspeed; > + cap-sdio-irq; > + keep-power-in-suspend; > + mmc-pwrseq = <&sdio_pwrseq>; > + non-removable; > + pinctrl-names = "default"; > + pinctrl-0 = <&sdio0_bus4 &sdio0_cmd &sdio0_clk>; > + sd-uhs-sdr104; > + status = "okay"; > +}; > + > +&sdmmc { > + bus-width = <4>; > + disable-wp; > + cap-sd-highspeed; > + cap-mmc-highspeed; > + vmmc-supply = <&vcc3v0_sd>; > + vqmmc-supply = <&vccio_sd>; > + pinctrl-names = "default"; > + pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>; > + sd-uhs-sdr104; > + status = "okay"; > +}; > + > +&tcphy0 { > + status = "okay"; > +}; > + > +&tcphy1 { > + status = "okay"; > +}; > + > +&tsadc { > + /* tshut mode 0:CRU 1:GPIO */ > + rockchip,hw-tshut-mode = <1>; > + /* tshut polarity 0:LOW 1:HIGH */ > + rockchip,hw-tshut-polarity = <1>; > + status = "okay"; > +}; > + > +&u2phy0 { > + status = "okay"; > + > + u2phy0_otg: otg-port { These child nodes already have their own labels, so there's no need to repeat the whole structure here - you should just be able to do: &u2phy0 { status = "okay"; } &u2phy0_otg { status = "okay"; } etc. > + status = "okay"; > + }; > + > + u2phy0_host: host-port { > + phy-supply = <&vcc5v0_usb1>; > + status = "okay"; > + }; > +}; > + > +&u2phy1 { > + status = "okay"; > + > + u2phy1_otg: otg-port { > + status = "okay"; > + }; > + > + u2phy1_host: host-port { > + phy-supply = <&vcc5v0_usb2>; On the T4, both USB2 ports share one supply (VCC5V0_HOST0). > + status = "okay"; > + }; > +}; > + > +&uart0 { > + pinctrl-names = "default"; > + pinctrl-0 = <&uart0_xfer &uart0_cts>; What about RTS? That's wired up to the BT module too. > + status = "okay"; > +}; > + > +&uart2 { > + status = "okay"; > +}; > + > +&uart4 { > + status = "okay"; > +}; This is muxed with SPI1 on the user expansion connector, so there's perhaps an argument to be had over whether it really deserves to be enabled at this level of the DTSI hierarchy. Robin. > + > +&usbdrd3_0 { > + status = "okay"; > +}; > + > +&usbdrd3_1 { > + status = "okay"; > +}; > + > +&usbdrd_dwc3_0 { > + status = "okay"; > +}; > + > +&usbdrd_dwc3_1 { > + status = "okay"; > + dr_mode = "host"; > +}; > + > +&usb_host0_ehci { > + status = "okay"; > +}; > + > +&usb_host0_ohci { > + status = "okay"; > +}; > + > +&usb_host1_ehci { > + status = "okay"; > +}; > + > +&usb_host1_ohci { > + status = "okay"; > +}; > + > +&vopb { > + status = "okay"; > +}; > + > +&vopb_mmu { > + status = "okay"; > +}; > + > +&vopl { > + status = "okay"; > +}; > + > +&vopl_mmu { > + status = "okay"; > +}; >