162306a36Sopenharmony_ci// SPDX-License-Identifier: (GPL-2.0+ or MIT)
262306a36Sopenharmony_ci// Copyright (C) 2021-2022 Samuel Holland <samuel@sholland.org>
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci/*
562306a36Sopenharmony_ci * gpio line names
662306a36Sopenharmony_ci *
762306a36Sopenharmony_ci * The Nezha-D1 has a 40-pin IO header. Some of these pins are routed
862306a36Sopenharmony_ci * directly to pads on the SoC, others come from an 8-bit pcf857x IO
962306a36Sopenharmony_ci * expander. Therefore, these line names are specified in two places:
1062306a36Sopenharmony_ci * one set for the pcf857x, and one set for the pio controller.
1162306a36Sopenharmony_ci *
1262306a36Sopenharmony_ci * Lines which are routed to the 40-pin header are named as follows:
1362306a36Sopenharmony_ci *	<pin#> [<pin name>]
1462306a36Sopenharmony_ci * where:
1562306a36Sopenharmony_ci *	<pin#>		is the actual pin number of the 40-pin header
1662306a36Sopenharmony_ci *	<pin name>	is the name of the pin by function/gpio#
1762306a36Sopenharmony_ci *
1862306a36Sopenharmony_ci * For details regarding pin numbers and names see the schematics (under
1962306a36Sopenharmony_ci * "IO EXPAND"):
2062306a36Sopenharmony_ci * http://dl.linux-sunxi.org/D1/D1_Nezha_development_board_schematic_diagram_20210224.pdf
2162306a36Sopenharmony_ci */
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ci#include <dt-bindings/gpio/gpio.h>
2462306a36Sopenharmony_ci#include <dt-bindings/input/input.h>
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci/dts-v1/;
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci#include "sun20i-d1.dtsi"
2962306a36Sopenharmony_ci#include "sun20i-common-regulators.dtsi"
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ci/ {
3262306a36Sopenharmony_ci	model = "Allwinner D1 Nezha";
3362306a36Sopenharmony_ci	compatible = "allwinner,d1-nezha", "allwinner,sun20i-d1";
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ci	aliases {
3662306a36Sopenharmony_ci		ethernet0 = &emac;
3762306a36Sopenharmony_ci		ethernet1 = &xr829;
3862306a36Sopenharmony_ci		serial0 = &uart0;
3962306a36Sopenharmony_ci	};
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ci	chosen {
4262306a36Sopenharmony_ci		stdout-path = "serial0:115200n8";
4362306a36Sopenharmony_ci	};
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_ci	reg_usbvbus: usbvbus {
4662306a36Sopenharmony_ci		compatible = "regulator-fixed";
4762306a36Sopenharmony_ci		regulator-name = "usbvbus";
4862306a36Sopenharmony_ci		regulator-min-microvolt = <5000000>;
4962306a36Sopenharmony_ci		regulator-max-microvolt = <5000000>;
5062306a36Sopenharmony_ci		gpio = <&pio 3 19 GPIO_ACTIVE_HIGH>; /* PD19 */
5162306a36Sopenharmony_ci		enable-active-high;
5262306a36Sopenharmony_ci		vin-supply = <&reg_vcc>;
5362306a36Sopenharmony_ci	};
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_ci	/*
5662306a36Sopenharmony_ci	 * This regulator is PWM-controlled, but the PWM controller is not
5762306a36Sopenharmony_ci	 * yet supported, so fix the regulator to its default voltage.
5862306a36Sopenharmony_ci	 */
5962306a36Sopenharmony_ci	reg_vdd_cpu: vdd-cpu {
6062306a36Sopenharmony_ci		compatible = "regulator-fixed";
6162306a36Sopenharmony_ci		regulator-name = "vdd-cpu";
6262306a36Sopenharmony_ci		regulator-min-microvolt = <1100000>;
6362306a36Sopenharmony_ci		regulator-max-microvolt = <1100000>;
6462306a36Sopenharmony_ci		vin-supply = <&reg_vcc>;
6562306a36Sopenharmony_ci	};
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ci	wifi_pwrseq: wifi-pwrseq {
6862306a36Sopenharmony_ci		compatible = "mmc-pwrseq-simple";
6962306a36Sopenharmony_ci		reset-gpios = <&pio 6 12 GPIO_ACTIVE_LOW>; /* PG12 */
7062306a36Sopenharmony_ci	};
7162306a36Sopenharmony_ci};
7262306a36Sopenharmony_ci
7362306a36Sopenharmony_ci&cpu0 {
7462306a36Sopenharmony_ci	cpu-supply = <&reg_vdd_cpu>;
7562306a36Sopenharmony_ci};
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ci&dcxo {
7862306a36Sopenharmony_ci	clock-frequency = <24000000>;
7962306a36Sopenharmony_ci};
8062306a36Sopenharmony_ci
8162306a36Sopenharmony_ci&ehci0 {
8262306a36Sopenharmony_ci	status = "okay";
8362306a36Sopenharmony_ci};
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_ci&ehci1 {
8662306a36Sopenharmony_ci	status = "okay";
8762306a36Sopenharmony_ci};
8862306a36Sopenharmony_ci
8962306a36Sopenharmony_ci&emac {
9062306a36Sopenharmony_ci	pinctrl-0 = <&rgmii_pe_pins>;
9162306a36Sopenharmony_ci	pinctrl-names = "default";
9262306a36Sopenharmony_ci	phy-handle = <&ext_rgmii_phy>;
9362306a36Sopenharmony_ci	phy-mode = "rgmii-id";
9462306a36Sopenharmony_ci	phy-supply = <&reg_vcc_3v3>;
9562306a36Sopenharmony_ci	status = "okay";
9662306a36Sopenharmony_ci};
9762306a36Sopenharmony_ci
9862306a36Sopenharmony_ci&i2c2 {
9962306a36Sopenharmony_ci	pinctrl-0 = <&i2c2_pb0_pins>;
10062306a36Sopenharmony_ci	pinctrl-names = "default";
10162306a36Sopenharmony_ci	status = "okay";
10262306a36Sopenharmony_ci
10362306a36Sopenharmony_ci	pcf8574a: gpio@38 {
10462306a36Sopenharmony_ci		compatible = "nxp,pcf8574a";
10562306a36Sopenharmony_ci		reg = <0x38>;
10662306a36Sopenharmony_ci		interrupt-parent = <&pio>;
10762306a36Sopenharmony_ci		interrupts = <1 2 IRQ_TYPE_LEVEL_LOW>; /* PB2 */
10862306a36Sopenharmony_ci		interrupt-controller;
10962306a36Sopenharmony_ci		gpio-controller;
11062306a36Sopenharmony_ci		#gpio-cells = <2>;
11162306a36Sopenharmony_ci		#interrupt-cells = <2>;
11262306a36Sopenharmony_ci		gpio-line-names =
11362306a36Sopenharmony_ci			"pin13 [gpio8]",
11462306a36Sopenharmony_ci			"pin16 [gpio10]",
11562306a36Sopenharmony_ci			"pin18 [gpio11]",
11662306a36Sopenharmony_ci			"pin26 [gpio17]",
11762306a36Sopenharmony_ci			"pin22 [gpio14]",
11862306a36Sopenharmony_ci			"pin28 [gpio19]",
11962306a36Sopenharmony_ci			"pin37 [gpio23]",
12062306a36Sopenharmony_ci			"pin11 [gpio6]";
12162306a36Sopenharmony_ci	};
12262306a36Sopenharmony_ci};
12362306a36Sopenharmony_ci
12462306a36Sopenharmony_ci&mdio {
12562306a36Sopenharmony_ci	ext_rgmii_phy: ethernet-phy@1 {
12662306a36Sopenharmony_ci		compatible = "ethernet-phy-ieee802.3-c22";
12762306a36Sopenharmony_ci		reg = <1>;
12862306a36Sopenharmony_ci	};
12962306a36Sopenharmony_ci};
13062306a36Sopenharmony_ci
13162306a36Sopenharmony_ci&mmc0 {
13262306a36Sopenharmony_ci	bus-width = <4>;
13362306a36Sopenharmony_ci	cd-gpios = <&pio 5 6 GPIO_ACTIVE_HIGH>; /* PF6 */
13462306a36Sopenharmony_ci	disable-wp;
13562306a36Sopenharmony_ci	vmmc-supply = <&reg_vcc_3v3>;
13662306a36Sopenharmony_ci	vqmmc-supply = <&reg_vcc_3v3>;
13762306a36Sopenharmony_ci	pinctrl-0 = <&mmc0_pins>;
13862306a36Sopenharmony_ci	pinctrl-names = "default";
13962306a36Sopenharmony_ci	status = "okay";
14062306a36Sopenharmony_ci};
14162306a36Sopenharmony_ci
14262306a36Sopenharmony_ci&mmc1 {
14362306a36Sopenharmony_ci	bus-width = <4>;
14462306a36Sopenharmony_ci	mmc-pwrseq = <&wifi_pwrseq>;
14562306a36Sopenharmony_ci	non-removable;
14662306a36Sopenharmony_ci	vmmc-supply = <&reg_vcc_3v3>;
14762306a36Sopenharmony_ci	vqmmc-supply = <&reg_vcc_3v3>;
14862306a36Sopenharmony_ci	pinctrl-0 = <&mmc1_pins>;
14962306a36Sopenharmony_ci	pinctrl-names = "default";
15062306a36Sopenharmony_ci	status = "okay";
15162306a36Sopenharmony_ci
15262306a36Sopenharmony_ci	xr829: wifi@1 {
15362306a36Sopenharmony_ci		reg = <1>;
15462306a36Sopenharmony_ci		interrupt-parent = <&pio>;
15562306a36Sopenharmony_ci		interrupts = <6 10 IRQ_TYPE_LEVEL_LOW>; /* PG10 */
15662306a36Sopenharmony_ci		interrupt-names = "host-wake";
15762306a36Sopenharmony_ci	};
15862306a36Sopenharmony_ci};
15962306a36Sopenharmony_ci
16062306a36Sopenharmony_ci&ohci0 {
16162306a36Sopenharmony_ci	status = "okay";
16262306a36Sopenharmony_ci};
16362306a36Sopenharmony_ci
16462306a36Sopenharmony_ci&ohci1 {
16562306a36Sopenharmony_ci	status = "okay";
16662306a36Sopenharmony_ci};
16762306a36Sopenharmony_ci
16862306a36Sopenharmony_ci&uart0 {
16962306a36Sopenharmony_ci	pinctrl-0 = <&uart0_pb8_pins>;
17062306a36Sopenharmony_ci	pinctrl-names = "default";
17162306a36Sopenharmony_ci	status = "okay";
17262306a36Sopenharmony_ci};
17362306a36Sopenharmony_ci
17462306a36Sopenharmony_ci&uart1 {
17562306a36Sopenharmony_ci	uart-has-rtscts;
17662306a36Sopenharmony_ci	pinctrl-0 = <&uart1_pg6_pins>, <&uart1_pg8_rts_cts_pins>;
17762306a36Sopenharmony_ci	pinctrl-names = "default";
17862306a36Sopenharmony_ci	status = "okay";
17962306a36Sopenharmony_ci
18062306a36Sopenharmony_ci	/* XR829 bluetooth is connected here */
18162306a36Sopenharmony_ci};
18262306a36Sopenharmony_ci
18362306a36Sopenharmony_ci&usb_otg {
18462306a36Sopenharmony_ci	dr_mode = "otg";
18562306a36Sopenharmony_ci	status = "okay";
18662306a36Sopenharmony_ci};
18762306a36Sopenharmony_ci
18862306a36Sopenharmony_ci&usbphy {
18962306a36Sopenharmony_ci	usb0_id_det-gpios = <&pio 3 21 GPIO_ACTIVE_HIGH>; /* PD21 */
19062306a36Sopenharmony_ci	usb0_vbus_det-gpios = <&pio 3 20 GPIO_ACTIVE_HIGH>; /* PD20 */
19162306a36Sopenharmony_ci	usb0_vbus-supply = <&reg_usbvbus>;
19262306a36Sopenharmony_ci	usb1_vbus-supply = <&reg_vcc>;
19362306a36Sopenharmony_ci	status = "okay";
19462306a36Sopenharmony_ci};
19562306a36Sopenharmony_ci
19662306a36Sopenharmony_ci&pio {
19762306a36Sopenharmony_ci	gpio-line-names =
19862306a36Sopenharmony_ci		/* Port A */
19962306a36Sopenharmony_ci		"", "", "", "", "", "", "", "",
20062306a36Sopenharmony_ci		"", "", "", "", "", "", "", "",
20162306a36Sopenharmony_ci		"", "", "", "", "", "", "", "",
20262306a36Sopenharmony_ci		"", "", "", "", "", "", "", "",
20362306a36Sopenharmony_ci		/* Port B */
20462306a36Sopenharmony_ci		"pin5 [gpio2/twi2-sck]",
20562306a36Sopenharmony_ci		"pin3 [gpio1/twi2-sda]",
20662306a36Sopenharmony_ci		"",
20762306a36Sopenharmony_ci		"pin38 [gpio24/i2s2-din]",
20862306a36Sopenharmony_ci		"pin40 [gpio25/i2s2-dout]",
20962306a36Sopenharmony_ci		"pin12 [gpio7/i2s-clk]",
21062306a36Sopenharmony_ci		"pin35 [gpio22/i2s2-lrck]",
21162306a36Sopenharmony_ci		"",
21262306a36Sopenharmony_ci		"pin8 [gpio4/uart0-txd]",
21362306a36Sopenharmony_ci		"pin10 [gpio5/uart0-rxd]",
21462306a36Sopenharmony_ci		"",
21562306a36Sopenharmony_ci		"",
21662306a36Sopenharmony_ci		"pin15 [gpio9]",
21762306a36Sopenharmony_ci		"", "", "", "",
21862306a36Sopenharmony_ci		"", "", "", "", "", "", "", "",
21962306a36Sopenharmony_ci		"", "", "", "", "", "", "", "",
22062306a36Sopenharmony_ci		/* Port C */
22162306a36Sopenharmony_ci		"",
22262306a36Sopenharmony_ci		"pin31 [gpio21]",
22362306a36Sopenharmony_ci		"", "", "", "", "", "",
22462306a36Sopenharmony_ci		"", "", "", "", "", "", "", "",
22562306a36Sopenharmony_ci		"", "", "", "", "", "", "", "",
22662306a36Sopenharmony_ci		"", "", "", "", "", "", "", "",
22762306a36Sopenharmony_ci		/* Port D */
22862306a36Sopenharmony_ci		"", "", "", "", "", "", "", "",
22962306a36Sopenharmony_ci		"", "",
23062306a36Sopenharmony_ci		"pin24 [gpio16/spi1-ce0]",
23162306a36Sopenharmony_ci		"pin23 [gpio15/spi1-clk]",
23262306a36Sopenharmony_ci		"pin19 [gpio12/spi1-mosi]",
23362306a36Sopenharmony_ci		"pin21 [gpio13/spi1-miso]",
23462306a36Sopenharmony_ci		"pin27 [gpio18/spi1-hold]",
23562306a36Sopenharmony_ci		"pin29 [gpio20/spi1-wp]",
23662306a36Sopenharmony_ci		"", "", "", "", "", "",
23762306a36Sopenharmony_ci		"pin7 [gpio3/pwm]";
23862306a36Sopenharmony_ci};
239