1114abfe1SNeil Armstrong// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2cd84aff1SJerome Brunet/*
3cd84aff1SJerome Brunet * Copyright (c) 2017 BayLibre, SAS.
4cd84aff1SJerome Brunet * Author: Neil Armstrong <narmstrong@baylibre.com>
5cd84aff1SJerome Brunet * Author: Jerome Brunet <jbrunet@baylibre.com>
6cd84aff1SJerome Brunet */
7cd84aff1SJerome Brunet
8cd84aff1SJerome Brunet/dts-v1/;
9cd84aff1SJerome Brunet
10cd84aff1SJerome Brunet#include <dt-bindings/input/input.h>
11a3ff86dcSJerome Brunet#include <dt-bindings/sound/meson-aiu.h>
12cd84aff1SJerome Brunet
1372fb2c85SJerome Brunet#include "meson-gxl-s905x.dtsi"
14cd84aff1SJerome Brunet
15cd84aff1SJerome Brunet/ {
160751c59fSChristian Hewitt	compatible = "libretech,aml-s905x-cc", "amlogic,s905x",
170751c59fSChristian Hewitt		     "amlogic,meson-gxl";
180751c59fSChristian Hewitt	model = "Libre Computer AML-S905X-CC";
19cd84aff1SJerome Brunet
2072fb2c85SJerome Brunet	aliases {
2172fb2c85SJerome Brunet		serial0 = &uart_AO;
22f7c36209SJorge Ramirez-Ortiz		ethernet0 = &ethmac;
2372fb2c85SJerome Brunet	};
2472fb2c85SJerome Brunet
25249ce377SJerome Brunet	dio2133: analog-amplifier {
26249ce377SJerome Brunet		compatible = "simple-audio-amplifier";
27249ce377SJerome Brunet		sound-name-prefix = "AU2";
28249ce377SJerome Brunet		VCC-supply = <&hdmi_5v>;
29249ce377SJerome Brunet		enable-gpios = <&gpio GPIOH_5 GPIO_ACTIVE_HIGH>;
30249ce377SJerome Brunet	};
31249ce377SJerome Brunet
3272fb2c85SJerome Brunet	chosen {
3372fb2c85SJerome Brunet		stdout-path = "serial0:115200n8";
3472fb2c85SJerome Brunet	};
3572fb2c85SJerome Brunet
36cd84aff1SJerome Brunet	cvbs-connector {
37cd84aff1SJerome Brunet		compatible = "composite-video-connector";
38cd84aff1SJerome Brunet
39cd84aff1SJerome Brunet		port {
40cd84aff1SJerome Brunet			cvbs_connector_in: endpoint {
41cd84aff1SJerome Brunet				remote-endpoint = <&cvbs_vdac_out>;
42cd84aff1SJerome Brunet			};
43cd84aff1SJerome Brunet		};
44cd84aff1SJerome Brunet	};
45cd84aff1SJerome Brunet
4672fb2c85SJerome Brunet	emmc_pwrseq: emmc-pwrseq {
4772fb2c85SJerome Brunet		compatible = "mmc-pwrseq-emmc";
4872fb2c85SJerome Brunet		reset-gpios = <&gpio BOOT_9 GPIO_ACTIVE_LOW>;
4972fb2c85SJerome Brunet	};
5072fb2c85SJerome Brunet
51cd84aff1SJerome Brunet	hdmi-connector {
52cd84aff1SJerome Brunet		compatible = "hdmi-connector";
53cd84aff1SJerome Brunet		type = "a";
54cd84aff1SJerome Brunet
55cd84aff1SJerome Brunet		port {
56cd84aff1SJerome Brunet			hdmi_connector_in: endpoint {
57cd84aff1SJerome Brunet				remote-endpoint = <&hdmi_tx_tmds_out>;
58cd84aff1SJerome Brunet			};
59cd84aff1SJerome Brunet		};
60cd84aff1SJerome Brunet	};
61cd84aff1SJerome Brunet
62cd84aff1SJerome Brunet	leds {
63cd84aff1SJerome Brunet		compatible = "gpio-leds";
64cd84aff1SJerome Brunet
6508dc0e5dSNeil Armstrong		led-system {
66cd84aff1SJerome Brunet			label = "librecomputer:system-status";
67cd84aff1SJerome Brunet			gpios = <&gpio GPIODV_24 GPIO_ACTIVE_HIGH>;
68cd84aff1SJerome Brunet			default-state = "on";
69cd84aff1SJerome Brunet			panic-indicator;
70cd84aff1SJerome Brunet		};
71cd84aff1SJerome Brunet
7208dc0e5dSNeil Armstrong		led-blue {
73cd84aff1SJerome Brunet			label = "librecomputer:blue";
74cd84aff1SJerome Brunet			gpios = <&gpio_ao GPIOAO_2 GPIO_ACTIVE_HIGH>;
75cd84aff1SJerome Brunet			linux,default-trigger = "heartbeat";
76cd84aff1SJerome Brunet		};
77cd84aff1SJerome Brunet	};
7872fb2c85SJerome Brunet
7972fb2c85SJerome Brunet	memory@0 {
8072fb2c85SJerome Brunet		device_type = "memory";
8172fb2c85SJerome Brunet		reg = <0x0 0x0 0x0 0x80000000>;
8272fb2c85SJerome Brunet	};
8372fb2c85SJerome Brunet
84b409f625SNeil Armstrong	hdmi_5v: regulator-hdmi-5v {
85b409f625SNeil Armstrong		compatible = "regulator-fixed";
86b409f625SNeil Armstrong
87b409f625SNeil Armstrong		regulator-name = "HDMI_5V";
88b409f625SNeil Armstrong		regulator-min-microvolt = <5000000>;
89b409f625SNeil Armstrong		regulator-max-microvolt = <5000000>;
90b409f625SNeil Armstrong
91b409f625SNeil Armstrong		gpio = <&gpio GPIOH_3 GPIO_ACTIVE_HIGH>;
92b409f625SNeil Armstrong		enable-active-high;
93b409f625SNeil Armstrong		regulator-always-on;
94b409f625SNeil Armstrong	};
95b409f625SNeil Armstrong
9672fb2c85SJerome Brunet	vcc_3v3: regulator-vcc_3v3 {
9772fb2c85SJerome Brunet		compatible = "regulator-fixed";
9872fb2c85SJerome Brunet		regulator-name = "VCC_3V3";
9972fb2c85SJerome Brunet		regulator-min-microvolt = <3300000>;
10072fb2c85SJerome Brunet		regulator-max-microvolt = <3300000>;
10172fb2c85SJerome Brunet	};
10272fb2c85SJerome Brunet
10372fb2c85SJerome Brunet	vcc_card: regulator-vcc-card {
10472fb2c85SJerome Brunet		compatible = "regulator-gpio";
10572fb2c85SJerome Brunet
10672fb2c85SJerome Brunet		regulator-name = "VCC_CARD";
10772fb2c85SJerome Brunet		regulator-min-microvolt = <1800000>;
10872fb2c85SJerome Brunet		regulator-max-microvolt = <3300000>;
10972fb2c85SJerome Brunet
11072fb2c85SJerome Brunet		gpios = <&gpio_ao GPIOAO_3 GPIO_ACTIVE_HIGH>;
11172fb2c85SJerome Brunet		gpios-states = <0>;
11272fb2c85SJerome Brunet
11372fb2c85SJerome Brunet		states = <3300000 0>,
11472fb2c85SJerome Brunet			 <1800000 1>;
1158a5085c4SJerome Brunet
1168a5085c4SJerome Brunet		regulator-settling-time-up-us = <200>;
1178a5085c4SJerome Brunet		regulator-settling-time-down-us = <50000>;
11872fb2c85SJerome Brunet	};
11972fb2c85SJerome Brunet
120dd47e4a3SJerome Brunet	vddio_ao18: regulator-vddio_ao18 {
121dd47e4a3SJerome Brunet		compatible = "regulator-fixed";
122dd47e4a3SJerome Brunet		regulator-name = "VDDIO_AO18";
123dd47e4a3SJerome Brunet		regulator-min-microvolt = <1800000>;
124dd47e4a3SJerome Brunet		regulator-max-microvolt = <1800000>;
125dd47e4a3SJerome Brunet	};
126dd47e4a3SJerome Brunet
127ffab3fd6SJerome Brunet	/* This is provided by LDOs on the eMMC daugther card */
12872fb2c85SJerome Brunet	vddio_boot: regulator-vddio_boot {
12972fb2c85SJerome Brunet		compatible = "regulator-fixed";
13072fb2c85SJerome Brunet		regulator-name = "VDDIO_BOOT";
131ffab3fd6SJerome Brunet		regulator-min-microvolt = <1800000>;
132ffab3fd6SJerome Brunet		regulator-max-microvolt = <1800000>;
133ffab3fd6SJerome Brunet		vin-supply = <&vcc_3v3>;
13472fb2c85SJerome Brunet	};
135a3ff86dcSJerome Brunet
136a3ff86dcSJerome Brunet	sound {
137a3ff86dcSJerome Brunet		compatible = "amlogic,gx-sound-card";
138*933b80edSChristian Hewitt		model = "LIBRETECH-CC";
139249ce377SJerome Brunet		audio-aux-devs = <&dio2133>;
140249ce377SJerome Brunet		audio-widgets = "Line", "Lineout";
141249ce377SJerome Brunet		audio-routing = "AU2 INL", "ACODEC LOLN",
142249ce377SJerome Brunet				"AU2 INR", "ACODEC LORN",
143249ce377SJerome Brunet				"Lineout", "AU2 OUTL",
144249ce377SJerome Brunet				"Lineout", "AU2 OUTR";
145a3ff86dcSJerome Brunet		assigned-clocks = <&clkc CLKID_MPLL0>,
146a3ff86dcSJerome Brunet				  <&clkc CLKID_MPLL1>,
147a3ff86dcSJerome Brunet				  <&clkc CLKID_MPLL2>;
148a3ff86dcSJerome Brunet		assigned-clock-parents = <0>, <0>, <0>;
149a3ff86dcSJerome Brunet		assigned-clock-rates = <294912000>,
150a3ff86dcSJerome Brunet				       <270950400>,
151a3ff86dcSJerome Brunet				       <393216000>;
152a3ff86dcSJerome Brunet
153a3ff86dcSJerome Brunet		dai-link-0 {
154a3ff86dcSJerome Brunet			sound-dai = <&aiu AIU_CPU CPU_I2S_FIFO>;
155a3ff86dcSJerome Brunet		};
156a3ff86dcSJerome Brunet
157a3ff86dcSJerome Brunet		dai-link-1 {
158a3ff86dcSJerome Brunet			sound-dai = <&aiu AIU_CPU CPU_I2S_ENCODER>;
159a3ff86dcSJerome Brunet			dai-format = "i2s";
160a3ff86dcSJerome Brunet			mclk-fs = <256>;
161a3ff86dcSJerome Brunet
162a3ff86dcSJerome Brunet			codec-0 {
163a3ff86dcSJerome Brunet				sound-dai = <&aiu AIU_HDMI CTRL_I2S>;
164a3ff86dcSJerome Brunet			};
165249ce377SJerome Brunet
166249ce377SJerome Brunet			codec-1 {
167249ce377SJerome Brunet				sound-dai = <&aiu AIU_ACODEC CTRL_I2S>;
168249ce377SJerome Brunet			};
169a3ff86dcSJerome Brunet		};
170a3ff86dcSJerome Brunet
171a3ff86dcSJerome Brunet		dai-link-2 {
172a3ff86dcSJerome Brunet			sound-dai = <&aiu AIU_HDMI CTRL_OUT>;
173a3ff86dcSJerome Brunet
174a3ff86dcSJerome Brunet			codec-0 {
175a3ff86dcSJerome Brunet				sound-dai = <&hdmi_tx>;
176a3ff86dcSJerome Brunet			};
177a3ff86dcSJerome Brunet		};
178249ce377SJerome Brunet
179249ce377SJerome Brunet		dai-link-3 {
180249ce377SJerome Brunet			sound-dai = <&aiu AIU_ACODEC CTRL_OUT>;
181249ce377SJerome Brunet
182249ce377SJerome Brunet			codec-0 {
183249ce377SJerome Brunet				sound-dai = <&acodec>;
184a3ff86dcSJerome Brunet			};
185a3ff86dcSJerome Brunet		};
186249ce377SJerome Brunet	};
187249ce377SJerome Brunet};
188249ce377SJerome Brunet
189249ce377SJerome Brunet&acodec {
190249ce377SJerome Brunet	AVDD-supply = <&vddio_ao18>;
191249ce377SJerome Brunet	status = "okay";
192249ce377SJerome Brunet};
193a3ff86dcSJerome Brunet
194a3ff86dcSJerome Brunet&aiu {
195a3ff86dcSJerome Brunet	status = "okay";
196cd84aff1SJerome Brunet};
197cd84aff1SJerome Brunet
198b16c71c9SNeil Armstrong&cec_AO {
199b16c71c9SNeil Armstrong	status = "okay";
200b16c71c9SNeil Armstrong	pinctrl-0 = <&ao_cec_pins>;
201b16c71c9SNeil Armstrong	pinctrl-names = "default";
202b16c71c9SNeil Armstrong	hdmi-phandle = <&hdmi_tx>;
203b16c71c9SNeil Armstrong};
204b16c71c9SNeil Armstrong
205cd84aff1SJerome Brunet&cvbs_vdac_port {
206cd84aff1SJerome Brunet	cvbs_vdac_out: endpoint {
207cd84aff1SJerome Brunet		remote-endpoint = <&cvbs_connector_in>;
208cd84aff1SJerome Brunet	};
209cd84aff1SJerome Brunet};
210cd84aff1SJerome Brunet
21172fb2c85SJerome Brunet&ethmac {
21272fb2c85SJerome Brunet	status = "okay";
21372fb2c85SJerome Brunet};
21472fb2c85SJerome Brunet
215dac16187SJerome Brunet&internal_phy {
216dac16187SJerome Brunet	pinctrl-0 = <&eth_link_led_pins>, <&eth_act_led_pins>;
217dac16187SJerome Brunet	pinctrl-names = "default";
218dac16187SJerome Brunet};
219dac16187SJerome Brunet
22072fb2c85SJerome Brunet&ir {
22172fb2c85SJerome Brunet	status = "okay";
22272fb2c85SJerome Brunet	pinctrl-0 = <&remote_input_ao_pins>;
22372fb2c85SJerome Brunet	pinctrl-names = "default";
22472fb2c85SJerome Brunet};
22572fb2c85SJerome Brunet
226cd84aff1SJerome Brunet&hdmi_tx {
227cd84aff1SJerome Brunet	status = "okay";
228cd84aff1SJerome Brunet	pinctrl-0 = <&hdmi_hpd_pins>, <&hdmi_i2c_pins>;
229cd84aff1SJerome Brunet	pinctrl-names = "default";
230e1f2163dSNeil Armstrong	hdmi-supply = <&hdmi_5v>;
231cd84aff1SJerome Brunet};
232cd84aff1SJerome Brunet
233cd84aff1SJerome Brunet&hdmi_tx_tmds_port {
234cd84aff1SJerome Brunet	hdmi_tx_tmds_out: endpoint {
235cd84aff1SJerome Brunet		remote-endpoint = <&hdmi_connector_in>;
236cd84aff1SJerome Brunet	};
237cd84aff1SJerome Brunet};
238cd84aff1SJerome Brunet
23911fa9774SNeil Armstrong&gpio_ao {
24047884c5cSNeil Armstrong	gpio-line-names = "UART TX",
24147884c5cSNeil Armstrong			  "UART RX",
24247884c5cSNeil Armstrong			  "Blue LED",
24347884c5cSNeil Armstrong			  "SDCard Voltage Switch",
24447884c5cSNeil Armstrong			  "7J1 Header Pin5",
24547884c5cSNeil Armstrong			  "7J1 Header Pin3",
24647884c5cSNeil Armstrong			  "7J1 Header Pin12",
24747884c5cSNeil Armstrong			  "IR In",
24847884c5cSNeil Armstrong			  "9J3 Switch HDMI CEC/7J1 Header Pin11",
2491d70eaadSJerome Brunet			  "7J1 Header Pin13",
2501d70eaadSJerome Brunet			  /* GPIO_TEST_N */
2511d70eaadSJerome Brunet			  "7J1 Header Pin15";
25247884c5cSNeil Armstrong};
25347884c5cSNeil Armstrong
25411fa9774SNeil Armstrong&gpio {
25547884c5cSNeil Armstrong	gpio-line-names = /* Bank GPIOZ */
25647884c5cSNeil Armstrong			  "", "", "", "", "", "", "",
25747884c5cSNeil Armstrong			  "", "", "", "", "", "", "",
25847884c5cSNeil Armstrong			  "Eth Link LED", "Eth Activity LED",
25947884c5cSNeil Armstrong			  /* Bank GPIOH */
26047884c5cSNeil Armstrong			  "HDMI HPD", "HDMI SDA", "HDMI SCL",
26147884c5cSNeil Armstrong			  "HDMI_5V_EN", "9J1 Header Pin2",
26247884c5cSNeil Armstrong			  "Analog Audio Mute",
26347884c5cSNeil Armstrong			  "2J3 Header Pin6",
26447884c5cSNeil Armstrong			  "2J3 Header Pin5",
26547884c5cSNeil Armstrong			  "2J3 Header Pin4",
26647884c5cSNeil Armstrong			  "2J3 Header Pin3",
26747884c5cSNeil Armstrong			  /* Bank BOOT */
26847884c5cSNeil Armstrong			  "eMMC D0", "eMMC D1", "eMMC D2", "eMMC D3",
26947884c5cSNeil Armstrong			  "eMMC D4", "eMMC D5", "eMMC D6", "eMMC D7",
27047884c5cSNeil Armstrong			  "eMMC Clk", "eMMC Reset", "eMMC CMD",
27147884c5cSNeil Armstrong			  "ALT BOOT MODE", "", "", "", "eMMC Data Strobe",
27247884c5cSNeil Armstrong			  /* Bank CARD */
27347884c5cSNeil Armstrong			  "SDCard D1", "SDCard D0", "SDCard CLK", "SDCard CMD",
27447884c5cSNeil Armstrong			  "SDCard D3", "SDCard D2", "SDCard Det",
27547884c5cSNeil Armstrong			  /* Bank GPIODV */
27647884c5cSNeil Armstrong			  "", "", "", "", "", "", "", "", "", "", "", "",
27747884c5cSNeil Armstrong			  "", "", "", "", "", "", "", "", "", "", "", "",
27847884c5cSNeil Armstrong			  "Green LED", "VCCK Enable",
27947884c5cSNeil Armstrong			  "7J1 Header Pin27", "7J1 Header Pin28",
28047884c5cSNeil Armstrong			  "VCCK Regulator", "VDDEE Regulator",
28147884c5cSNeil Armstrong			  /* Bank GPIOX */
28247884c5cSNeil Armstrong			  "7J1 Header Pin22", "7J1 Header Pin26",
28347884c5cSNeil Armstrong			  "7J1 Header Pin36", "7J1 Header Pin38",
28447884c5cSNeil Armstrong			  "7J1 Header Pin40", "7J1 Header Pin37",
28547884c5cSNeil Armstrong			  "7J1 Header Pin33", "7J1 Header Pin35",
28647884c5cSNeil Armstrong			  "7J1 Header Pin19", "7J1 Header Pin21",
28747884c5cSNeil Armstrong			  "7J1 Header Pin24", "7J1 Header Pin23",
28847884c5cSNeil Armstrong			  "7J1 Header Pin8", "7J1 Header Pin10",
28947884c5cSNeil Armstrong			  "7J1 Header Pin16", "7J1 Header Pin18",
29047884c5cSNeil Armstrong			  "7J1 Header Pin32", "7J1 Header Pin29",
29147884c5cSNeil Armstrong			  "7J1 Header Pin31",
29247884c5cSNeil Armstrong			  /* Bank GPIOCLK */
2931d70eaadSJerome Brunet			  "7J1 Header Pin7", "";
29447884c5cSNeil Armstrong};
29547884c5cSNeil Armstrong
296dd47e4a3SJerome Brunet&saradc {
297dd47e4a3SJerome Brunet	status = "okay";
298dd47e4a3SJerome Brunet	vref-supply = <&vddio_ao18>;
299dd47e4a3SJerome Brunet};
300dd47e4a3SJerome Brunet
30172fb2c85SJerome Brunet/* SD card */
30272fb2c85SJerome Brunet&sd_emmc_b {
30372fb2c85SJerome Brunet	status = "okay";
30472fb2c85SJerome Brunet	pinctrl-0 = <&sdcard_pins>;
30567e7607fSJerome Brunet	pinctrl-1 = <&sdcard_clk_gate_pins>;
30667e7607fSJerome Brunet	pinctrl-names = "default", "clk-gate";
307cd84aff1SJerome Brunet
30872fb2c85SJerome Brunet	bus-width = <4>;
30972fb2c85SJerome Brunet	cap-sd-highspeed;
310adc52bf7SJerome Brunet	max-frequency = <50000000>;
31172fb2c85SJerome Brunet	disable-wp;
31272fb2c85SJerome Brunet
313f29200c8SLoys Ollivier	cd-gpios = <&gpio CARD_6 GPIO_ACTIVE_LOW>;
31472fb2c85SJerome Brunet
31572fb2c85SJerome Brunet	vmmc-supply = <&vcc_3v3>;
31672fb2c85SJerome Brunet	vqmmc-supply = <&vcc_card>;
317cd84aff1SJerome Brunet};
318cd84aff1SJerome Brunet
31972fb2c85SJerome Brunet/* eMMC */
32072fb2c85SJerome Brunet&sd_emmc_c {
32172fb2c85SJerome Brunet	status = "okay";
322ab36be66SNeil Armstrong	pinctrl-0 = <&emmc_pins>, <&emmc_ds_pins>;
32367e7607fSJerome Brunet	pinctrl-1 = <&emmc_clk_gate_pins>;
32467e7607fSJerome Brunet	pinctrl-names = "default", "clk-gate";
32572fb2c85SJerome Brunet
32672fb2c85SJerome Brunet	bus-width = <8>;
32772fb2c85SJerome Brunet	cap-mmc-highspeed;
328ffab3fd6SJerome Brunet	mmc-ddr-1_8v;
329ffab3fd6SJerome Brunet	mmc-hs200-1_8v;
330ffab3fd6SJerome Brunet	max-frequency = <200000000>;
33172fb2c85SJerome Brunet	disable-wp;
33272fb2c85SJerome Brunet
33372fb2c85SJerome Brunet	mmc-pwrseq = <&emmc_pwrseq>;
33472fb2c85SJerome Brunet	vmmc-supply = <&vcc_3v3>;
33572fb2c85SJerome Brunet	vqmmc-supply = <&vddio_boot>;
336cd84aff1SJerome Brunet};
337cd84aff1SJerome Brunet
33872fb2c85SJerome Brunet&uart_AO {
33972fb2c85SJerome Brunet	status = "okay";
34072fb2c85SJerome Brunet	pinctrl-0 = <&uart_ao_a_pins>;
34172fb2c85SJerome Brunet	pinctrl-names = "default";
342cd84aff1SJerome Brunet};
343b83687f3SMartin Blumenstingl
3442f9139c2SMartin Blumenstingl&usb {
345b83687f3SMartin Blumenstingl	status = "okay";
3462f9139c2SMartin Blumenstingl	dr_mode = "host";
347b83687f3SMartin Blumenstingl};
348b83687f3SMartin Blumenstingl
349b83687f3SMartin Blumenstingl&usb2_phy0 {
350b83687f3SMartin Blumenstingl	/*
351b83687f3SMartin Blumenstingl	 * even though the schematics don't show it:
352b83687f3SMartin Blumenstingl	 * HDMI_5V is also used as supply for the USB VBUS.
353b83687f3SMartin Blumenstingl	 */
354b83687f3SMartin Blumenstingl	phy-supply = <&hdmi_5v>;
355b83687f3SMartin Blumenstingl};
356