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";
138a3ff86dcSJerome Brunet		model = "GXL-LIBRETECH-S905X-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		status = "okay";
153a3ff86dcSJerome Brunet
154a3ff86dcSJerome Brunet		dai-link-0 {
155a3ff86dcSJerome Brunet			sound-dai = <&aiu AIU_CPU CPU_I2S_FIFO>;
156a3ff86dcSJerome Brunet		};
157a3ff86dcSJerome Brunet
158a3ff86dcSJerome Brunet		dai-link-1 {
159a3ff86dcSJerome Brunet			sound-dai = <&aiu AIU_CPU CPU_I2S_ENCODER>;
160a3ff86dcSJerome Brunet			dai-format = "i2s";
161a3ff86dcSJerome Brunet			mclk-fs = <256>;
162a3ff86dcSJerome Brunet
163a3ff86dcSJerome Brunet			codec-0 {
164a3ff86dcSJerome Brunet				sound-dai = <&aiu AIU_HDMI CTRL_I2S>;
165a3ff86dcSJerome Brunet			};
166249ce377SJerome Brunet
167249ce377SJerome Brunet			codec-1 {
168249ce377SJerome Brunet				sound-dai = <&aiu AIU_ACODEC CTRL_I2S>;
169249ce377SJerome Brunet			};
170a3ff86dcSJerome Brunet		};
171a3ff86dcSJerome Brunet
172a3ff86dcSJerome Brunet		dai-link-2 {
173a3ff86dcSJerome Brunet			sound-dai = <&aiu AIU_HDMI CTRL_OUT>;
174a3ff86dcSJerome Brunet
175a3ff86dcSJerome Brunet			codec-0 {
176a3ff86dcSJerome Brunet				sound-dai = <&hdmi_tx>;
177a3ff86dcSJerome Brunet			};
178a3ff86dcSJerome Brunet		};
179249ce377SJerome Brunet
180249ce377SJerome Brunet		dai-link-3 {
181249ce377SJerome Brunet			sound-dai = <&aiu AIU_ACODEC CTRL_OUT>;
182249ce377SJerome Brunet
183249ce377SJerome Brunet			codec-0 {
184249ce377SJerome Brunet				sound-dai = <&acodec>;
185a3ff86dcSJerome Brunet			};
186a3ff86dcSJerome Brunet		};
187249ce377SJerome Brunet	};
188249ce377SJerome Brunet};
189249ce377SJerome Brunet
190249ce377SJerome Brunet&acodec {
191249ce377SJerome Brunet	AVDD-supply = <&vddio_ao18>;
192249ce377SJerome Brunet	status = "okay";
193249ce377SJerome Brunet};
194a3ff86dcSJerome Brunet
195a3ff86dcSJerome Brunet&aiu {
196a3ff86dcSJerome Brunet	status = "okay";
197cd84aff1SJerome Brunet};
198cd84aff1SJerome Brunet
199b16c71c9SNeil Armstrong&cec_AO {
200b16c71c9SNeil Armstrong	status = "okay";
201b16c71c9SNeil Armstrong	pinctrl-0 = <&ao_cec_pins>;
202b16c71c9SNeil Armstrong	pinctrl-names = "default";
203b16c71c9SNeil Armstrong	hdmi-phandle = <&hdmi_tx>;
204b16c71c9SNeil Armstrong};
205b16c71c9SNeil Armstrong
206cd84aff1SJerome Brunet&cvbs_vdac_port {
207cd84aff1SJerome Brunet	cvbs_vdac_out: endpoint {
208cd84aff1SJerome Brunet		remote-endpoint = <&cvbs_connector_in>;
209cd84aff1SJerome Brunet	};
210cd84aff1SJerome Brunet};
211cd84aff1SJerome Brunet
21272fb2c85SJerome Brunet&ethmac {
21372fb2c85SJerome Brunet	status = "okay";
21472fb2c85SJerome Brunet};
21572fb2c85SJerome Brunet
216dac16187SJerome Brunet&internal_phy {
217dac16187SJerome Brunet	pinctrl-0 = <&eth_link_led_pins>, <&eth_act_led_pins>;
218dac16187SJerome Brunet	pinctrl-names = "default";
219dac16187SJerome Brunet};
220dac16187SJerome Brunet
22172fb2c85SJerome Brunet&ir {
22272fb2c85SJerome Brunet	status = "okay";
22372fb2c85SJerome Brunet	pinctrl-0 = <&remote_input_ao_pins>;
22472fb2c85SJerome Brunet	pinctrl-names = "default";
22572fb2c85SJerome Brunet};
22672fb2c85SJerome Brunet
227cd84aff1SJerome Brunet&hdmi_tx {
228cd84aff1SJerome Brunet	status = "okay";
229cd84aff1SJerome Brunet	pinctrl-0 = <&hdmi_hpd_pins>, <&hdmi_i2c_pins>;
230cd84aff1SJerome Brunet	pinctrl-names = "default";
231e1f2163dSNeil Armstrong	hdmi-supply = <&hdmi_5v>;
232cd84aff1SJerome Brunet};
233cd84aff1SJerome Brunet
234cd84aff1SJerome Brunet&hdmi_tx_tmds_port {
235cd84aff1SJerome Brunet	hdmi_tx_tmds_out: endpoint {
236cd84aff1SJerome Brunet		remote-endpoint = <&hdmi_connector_in>;
237cd84aff1SJerome Brunet	};
238cd84aff1SJerome Brunet};
239cd84aff1SJerome Brunet
24011fa9774SNeil Armstrong&gpio_ao {
24147884c5cSNeil Armstrong	gpio-line-names = "UART TX",
24247884c5cSNeil Armstrong			  "UART RX",
24347884c5cSNeil Armstrong			  "Blue LED",
24447884c5cSNeil Armstrong			  "SDCard Voltage Switch",
24547884c5cSNeil Armstrong			  "7J1 Header Pin5",
24647884c5cSNeil Armstrong			  "7J1 Header Pin3",
24747884c5cSNeil Armstrong			  "7J1 Header Pin12",
24847884c5cSNeil Armstrong			  "IR In",
24947884c5cSNeil Armstrong			  "9J3 Switch HDMI CEC/7J1 Header Pin11",
2501d70eaadSJerome Brunet			  "7J1 Header Pin13",
2511d70eaadSJerome Brunet			  /* GPIO_TEST_N */
2521d70eaadSJerome Brunet			  "7J1 Header Pin15";
25347884c5cSNeil Armstrong};
25447884c5cSNeil Armstrong
25511fa9774SNeil Armstrong&gpio {
25647884c5cSNeil Armstrong	gpio-line-names = /* Bank GPIOZ */
25747884c5cSNeil Armstrong			  "", "", "", "", "", "", "",
25847884c5cSNeil Armstrong			  "", "", "", "", "", "", "",
25947884c5cSNeil Armstrong			  "Eth Link LED", "Eth Activity LED",
26047884c5cSNeil Armstrong			  /* Bank GPIOH */
26147884c5cSNeil Armstrong			  "HDMI HPD", "HDMI SDA", "HDMI SCL",
26247884c5cSNeil Armstrong			  "HDMI_5V_EN", "9J1 Header Pin2",
26347884c5cSNeil Armstrong			  "Analog Audio Mute",
26447884c5cSNeil Armstrong			  "2J3 Header Pin6",
26547884c5cSNeil Armstrong			  "2J3 Header Pin5",
26647884c5cSNeil Armstrong			  "2J3 Header Pin4",
26747884c5cSNeil Armstrong			  "2J3 Header Pin3",
26847884c5cSNeil Armstrong			  /* Bank BOOT */
26947884c5cSNeil Armstrong			  "eMMC D0", "eMMC D1", "eMMC D2", "eMMC D3",
27047884c5cSNeil Armstrong			  "eMMC D4", "eMMC D5", "eMMC D6", "eMMC D7",
27147884c5cSNeil Armstrong			  "eMMC Clk", "eMMC Reset", "eMMC CMD",
27247884c5cSNeil Armstrong			  "ALT BOOT MODE", "", "", "", "eMMC Data Strobe",
27347884c5cSNeil Armstrong			  /* Bank CARD */
27447884c5cSNeil Armstrong			  "SDCard D1", "SDCard D0", "SDCard CLK", "SDCard CMD",
27547884c5cSNeil Armstrong			  "SDCard D3", "SDCard D2", "SDCard Det",
27647884c5cSNeil Armstrong			  /* Bank GPIODV */
27747884c5cSNeil Armstrong			  "", "", "", "", "", "", "", "", "", "", "", "",
27847884c5cSNeil Armstrong			  "", "", "", "", "", "", "", "", "", "", "", "",
27947884c5cSNeil Armstrong			  "Green LED", "VCCK Enable",
28047884c5cSNeil Armstrong			  "7J1 Header Pin27", "7J1 Header Pin28",
28147884c5cSNeil Armstrong			  "VCCK Regulator", "VDDEE Regulator",
28247884c5cSNeil Armstrong			  /* Bank GPIOX */
28347884c5cSNeil Armstrong			  "7J1 Header Pin22", "7J1 Header Pin26",
28447884c5cSNeil Armstrong			  "7J1 Header Pin36", "7J1 Header Pin38",
28547884c5cSNeil Armstrong			  "7J1 Header Pin40", "7J1 Header Pin37",
28647884c5cSNeil Armstrong			  "7J1 Header Pin33", "7J1 Header Pin35",
28747884c5cSNeil Armstrong			  "7J1 Header Pin19", "7J1 Header Pin21",
28847884c5cSNeil Armstrong			  "7J1 Header Pin24", "7J1 Header Pin23",
28947884c5cSNeil Armstrong			  "7J1 Header Pin8", "7J1 Header Pin10",
29047884c5cSNeil Armstrong			  "7J1 Header Pin16", "7J1 Header Pin18",
29147884c5cSNeil Armstrong			  "7J1 Header Pin32", "7J1 Header Pin29",
29247884c5cSNeil Armstrong			  "7J1 Header Pin31",
29347884c5cSNeil Armstrong			  /* Bank GPIOCLK */
2941d70eaadSJerome Brunet			  "7J1 Header Pin7", "";
29547884c5cSNeil Armstrong};
29647884c5cSNeil Armstrong
297dd47e4a3SJerome Brunet&saradc {
298dd47e4a3SJerome Brunet	status = "okay";
299dd47e4a3SJerome Brunet	vref-supply = <&vddio_ao18>;
300dd47e4a3SJerome Brunet};
301dd47e4a3SJerome Brunet
30272fb2c85SJerome Brunet/* SD card */
30372fb2c85SJerome Brunet&sd_emmc_b {
30472fb2c85SJerome Brunet	status = "okay";
30572fb2c85SJerome Brunet	pinctrl-0 = <&sdcard_pins>;
30667e7607fSJerome Brunet	pinctrl-1 = <&sdcard_clk_gate_pins>;
30767e7607fSJerome Brunet	pinctrl-names = "default", "clk-gate";
308cd84aff1SJerome Brunet
30972fb2c85SJerome Brunet	bus-width = <4>;
31072fb2c85SJerome Brunet	cap-sd-highspeed;
311adc52bf7SJerome Brunet	max-frequency = <50000000>;
31272fb2c85SJerome Brunet	disable-wp;
31372fb2c85SJerome Brunet
314f29200c8SLoys Ollivier	cd-gpios = <&gpio CARD_6 GPIO_ACTIVE_LOW>;
31572fb2c85SJerome Brunet
31672fb2c85SJerome Brunet	vmmc-supply = <&vcc_3v3>;
31772fb2c85SJerome Brunet	vqmmc-supply = <&vcc_card>;
318cd84aff1SJerome Brunet};
319cd84aff1SJerome Brunet
32072fb2c85SJerome Brunet/* eMMC */
32172fb2c85SJerome Brunet&sd_emmc_c {
32272fb2c85SJerome Brunet	status = "okay";
323ab36be66SNeil Armstrong	pinctrl-0 = <&emmc_pins>, <&emmc_ds_pins>;
32467e7607fSJerome Brunet	pinctrl-1 = <&emmc_clk_gate_pins>;
32567e7607fSJerome Brunet	pinctrl-names = "default", "clk-gate";
32672fb2c85SJerome Brunet
32772fb2c85SJerome Brunet	bus-width = <8>;
32872fb2c85SJerome Brunet	cap-mmc-highspeed;
329ffab3fd6SJerome Brunet	mmc-ddr-1_8v;
330ffab3fd6SJerome Brunet	mmc-hs200-1_8v;
331ffab3fd6SJerome Brunet	max-frequency = <200000000>;
33272fb2c85SJerome Brunet	disable-wp;
33372fb2c85SJerome Brunet
33472fb2c85SJerome Brunet	mmc-pwrseq = <&emmc_pwrseq>;
33572fb2c85SJerome Brunet	vmmc-supply = <&vcc_3v3>;
33672fb2c85SJerome Brunet	vqmmc-supply = <&vddio_boot>;
337cd84aff1SJerome Brunet};
338cd84aff1SJerome Brunet
33972fb2c85SJerome Brunet&uart_AO {
34072fb2c85SJerome Brunet	status = "okay";
34172fb2c85SJerome Brunet	pinctrl-0 = <&uart_ao_a_pins>;
34272fb2c85SJerome Brunet	pinctrl-names = "default";
343cd84aff1SJerome Brunet};
344b83687f3SMartin Blumenstingl
3452f9139c2SMartin Blumenstingl&usb {
346b83687f3SMartin Blumenstingl	status = "okay";
3472f9139c2SMartin Blumenstingl	dr_mode = "host";
348b83687f3SMartin Blumenstingl};
349b83687f3SMartin Blumenstingl
350b83687f3SMartin Blumenstingl&usb2_phy0 {
351b83687f3SMartin Blumenstingl	/*
352b83687f3SMartin Blumenstingl	 * even though the schematics don't show it:
353b83687f3SMartin Blumenstingl	 * HDMI_5V is also used as supply for the USB VBUS.
354b83687f3SMartin Blumenstingl	 */
355b83687f3SMartin Blumenstingl	phy-supply = <&hdmi_5v>;
356b83687f3SMartin Blumenstingl};
357