xref: /openbmc/linux/arch/arm64/boot/dts/amlogic/meson-gx-libretech-pc.dtsi (revision 865a0d06f870ea1ffccdb2b2d0acf7e2a0deb9a3)
1*865a0d06SJerome Brunet// SPDX-License-Identifier: GPL-2.0
2*865a0d06SJerome Brunet/*
3*865a0d06SJerome Brunet * Copyright (c) 2019 BayLibre SAS.
4*865a0d06SJerome Brunet * Author: Jerome Brunet <jbrunet@baylibre.com>
5*865a0d06SJerome Brunet */
6*865a0d06SJerome Brunet
7*865a0d06SJerome Brunet/* Libretech Amlogic GX PC form factor - AKA: Tartiflette */
8*865a0d06SJerome Brunet
9*865a0d06SJerome Brunet#include <dt-bindings/input/input.h>
10*865a0d06SJerome Brunet#include <dt-bindings/leds/common.h>
11*865a0d06SJerome Brunet
12*865a0d06SJerome Brunet/ {
13*865a0d06SJerome Brunet	adc-keys {
14*865a0d06SJerome Brunet		compatible = "adc-keys";
15*865a0d06SJerome Brunet		io-channels = <&saradc 0>;
16*865a0d06SJerome Brunet		io-channel-names = "buttons";
17*865a0d06SJerome Brunet		keyup-threshold-microvolt = <1800000>;
18*865a0d06SJerome Brunet
19*865a0d06SJerome Brunet		update-button {
20*865a0d06SJerome Brunet			label = "update";
21*865a0d06SJerome Brunet			linux,code = <KEY_VENDOR>;
22*865a0d06SJerome Brunet			press-threshold-microvolt = <1300000>;
23*865a0d06SJerome Brunet		};
24*865a0d06SJerome Brunet	};
25*865a0d06SJerome Brunet
26*865a0d06SJerome Brunet	aliases {
27*865a0d06SJerome Brunet		serial0 = &uart_AO;
28*865a0d06SJerome Brunet		ethernet0 = &ethmac;
29*865a0d06SJerome Brunet		spi0 = &spifc;
30*865a0d06SJerome Brunet	};
31*865a0d06SJerome Brunet
32*865a0d06SJerome Brunet	chosen {
33*865a0d06SJerome Brunet		stdout-path = "serial0:115200n8";
34*865a0d06SJerome Brunet	};
35*865a0d06SJerome Brunet
36*865a0d06SJerome Brunet	cvbs-connector {
37*865a0d06SJerome Brunet		compatible = "composite-video-connector";
38*865a0d06SJerome Brunet		status = "disabled";
39*865a0d06SJerome Brunet
40*865a0d06SJerome Brunet		port {
41*865a0d06SJerome Brunet			cvbs_connector_in: endpoint {
42*865a0d06SJerome Brunet				remote-endpoint = <&cvbs_vdac_out>;
43*865a0d06SJerome Brunet			};
44*865a0d06SJerome Brunet		};
45*865a0d06SJerome Brunet	};
46*865a0d06SJerome Brunet
47*865a0d06SJerome Brunet	emmc_pwrseq: emmc-pwrseq {
48*865a0d06SJerome Brunet		compatible = "mmc-pwrseq-emmc";
49*865a0d06SJerome Brunet		reset-gpios = <&gpio BOOT_9 GPIO_ACTIVE_LOW>;
50*865a0d06SJerome Brunet	};
51*865a0d06SJerome Brunet
52*865a0d06SJerome Brunet	hdmi-connector {
53*865a0d06SJerome Brunet		compatible = "hdmi-connector";
54*865a0d06SJerome Brunet		type = "a";
55*865a0d06SJerome Brunet
56*865a0d06SJerome Brunet		port {
57*865a0d06SJerome Brunet			hdmi_connector_in: endpoint {
58*865a0d06SJerome Brunet				remote-endpoint = <&hdmi_tx_tmds_out>;
59*865a0d06SJerome Brunet			};
60*865a0d06SJerome Brunet		};
61*865a0d06SJerome Brunet	};
62*865a0d06SJerome Brunet
63*865a0d06SJerome Brunet	gpio-keys-polled {
64*865a0d06SJerome Brunet		compatible = "gpio-keys-polled";
65*865a0d06SJerome Brunet		poll-interval = <100>;
66*865a0d06SJerome Brunet
67*865a0d06SJerome Brunet		power-button {
68*865a0d06SJerome Brunet			label = "power";
69*865a0d06SJerome Brunet			linux,code = <KEY_POWER>;
70*865a0d06SJerome Brunet			gpios = <&gpio_ao GPIOAO_2 GPIO_ACTIVE_LOW>;
71*865a0d06SJerome Brunet		};
72*865a0d06SJerome Brunet	};
73*865a0d06SJerome Brunet
74*865a0d06SJerome Brunet	memory@0 {
75*865a0d06SJerome Brunet		device_type = "memory";
76*865a0d06SJerome Brunet		reg = <0x0 0x0 0x0 0x80000000>;
77*865a0d06SJerome Brunet	};
78*865a0d06SJerome Brunet
79*865a0d06SJerome Brunet	ao_5v: regulator-ao_5v {
80*865a0d06SJerome Brunet		compatible = "regulator-fixed";
81*865a0d06SJerome Brunet		regulator-name = "AO_5V";
82*865a0d06SJerome Brunet		regulator-min-microvolt = <5000000>;
83*865a0d06SJerome Brunet		regulator-max-microvolt = <5000000>;
84*865a0d06SJerome Brunet		vin-supply = <&dc_in>;
85*865a0d06SJerome Brunet		regulator-always-on;
86*865a0d06SJerome Brunet	};
87*865a0d06SJerome Brunet
88*865a0d06SJerome Brunet	dc_in: regulator-dc_in {
89*865a0d06SJerome Brunet		compatible = "regulator-fixed";
90*865a0d06SJerome Brunet		regulator-name = "DC_IN";
91*865a0d06SJerome Brunet		regulator-min-microvolt = <5000000>;
92*865a0d06SJerome Brunet		regulator-max-microvolt = <5000000>;
93*865a0d06SJerome Brunet		regulator-always-on;
94*865a0d06SJerome Brunet	};
95*865a0d06SJerome Brunet
96*865a0d06SJerome Brunet	leds {
97*865a0d06SJerome Brunet		compatible = "gpio-leds";
98*865a0d06SJerome Brunet
99*865a0d06SJerome Brunet		green {
100*865a0d06SJerome Brunet			color = <LED_COLOR_ID_GREEN>;
101*865a0d06SJerome Brunet			function = LED_FUNCTION_DISK_ACTIVITY;
102*865a0d06SJerome Brunet			gpios = <&gpio_ao GPIOAO_9 GPIO_ACTIVE_HIGH>;
103*865a0d06SJerome Brunet			linux,default-trigger = "disk-activity";
104*865a0d06SJerome Brunet		};
105*865a0d06SJerome Brunet
106*865a0d06SJerome Brunet		blue {
107*865a0d06SJerome Brunet			color = <LED_COLOR_ID_BLUE>;
108*865a0d06SJerome Brunet			function = LED_FUNCTION_STATUS;
109*865a0d06SJerome Brunet			gpios = <&gpio GPIODV_28 GPIO_ACTIVE_HIGH>;
110*865a0d06SJerome Brunet			linux,default-trigger = "heartbeat";
111*865a0d06SJerome Brunet			panic-indicator;
112*865a0d06SJerome Brunet		};
113*865a0d06SJerome Brunet	};
114*865a0d06SJerome Brunet
115*865a0d06SJerome Brunet	vcc_card: regulator-vcc_card {
116*865a0d06SJerome Brunet		compatible = "regulator-fixed";
117*865a0d06SJerome Brunet		regulator-name = "VCC_CARD";
118*865a0d06SJerome Brunet		regulator-min-microvolt = <3300000>;
119*865a0d06SJerome Brunet		regulator-max-microvolt = <3300000>;
120*865a0d06SJerome Brunet		vin-supply = <&vddio_ao3v3>;
121*865a0d06SJerome Brunet
122*865a0d06SJerome Brunet		gpio = <&gpio GPIODV_4 GPIO_ACTIVE_HIGH>;
123*865a0d06SJerome Brunet		enable-active-high;
124*865a0d06SJerome Brunet	};
125*865a0d06SJerome Brunet
126*865a0d06SJerome Brunet	vcc5v: regulator-vcc5v {
127*865a0d06SJerome Brunet		compatible = "regulator-fixed";
128*865a0d06SJerome Brunet		regulator-name = "VCC5V";
129*865a0d06SJerome Brunet		regulator-min-microvolt = <5000000>;
130*865a0d06SJerome Brunet		regulator-max-microvolt = <5000000>;
131*865a0d06SJerome Brunet		vin-supply = <&ao_5v>;
132*865a0d06SJerome Brunet
133*865a0d06SJerome Brunet		gpio = <&gpio GPIOH_3 GPIO_OPEN_DRAIN>;
134*865a0d06SJerome Brunet	};
135*865a0d06SJerome Brunet
136*865a0d06SJerome Brunet	vddio_ao18: regulator-vddio_ao18 {
137*865a0d06SJerome Brunet		compatible = "regulator-fixed";
138*865a0d06SJerome Brunet		regulator-name = "VDDIO_AO18";
139*865a0d06SJerome Brunet		regulator-min-microvolt = <1800000>;
140*865a0d06SJerome Brunet		regulator-max-microvolt = <1800000>;
141*865a0d06SJerome Brunet		vin-supply = <&ao_5v>;
142*865a0d06SJerome Brunet		regulator-always-on;
143*865a0d06SJerome Brunet	};
144*865a0d06SJerome Brunet
145*865a0d06SJerome Brunet	vddio_ao3v3: regulator-vddio_ao3v3 {
146*865a0d06SJerome Brunet		compatible = "regulator-fixed";
147*865a0d06SJerome Brunet		regulator-name = "VDDIO_AO3V3";
148*865a0d06SJerome Brunet		regulator-min-microvolt = <3300000>;
149*865a0d06SJerome Brunet		regulator-max-microvolt = <3300000>;
150*865a0d06SJerome Brunet		vin-supply = <&ao_5v>;
151*865a0d06SJerome Brunet		regulator-always-on;
152*865a0d06SJerome Brunet	};
153*865a0d06SJerome Brunet
154*865a0d06SJerome Brunet	vddio_boot: regulator-vddio_boot {
155*865a0d06SJerome Brunet		compatible = "regulator-fixed";
156*865a0d06SJerome Brunet		regulator-name = "VDDIO_BOOT";
157*865a0d06SJerome Brunet		regulator-min-microvolt = <1800000>;
158*865a0d06SJerome Brunet		regulator-max-microvolt = <1800000>;
159*865a0d06SJerome Brunet		vin-supply = <&vddio_ao3v3>;
160*865a0d06SJerome Brunet		regulator-always-on;
161*865a0d06SJerome Brunet	};
162*865a0d06SJerome Brunet
163*865a0d06SJerome Brunet	vddio_card: regulator-vddio-card {
164*865a0d06SJerome Brunet		compatible = "regulator-gpio";
165*865a0d06SJerome Brunet		regulator-name = "VDDIO_CARD";
166*865a0d06SJerome Brunet		regulator-min-microvolt = <1800000>;
167*865a0d06SJerome Brunet		regulator-max-microvolt = <3300000>;
168*865a0d06SJerome Brunet
169*865a0d06SJerome Brunet		gpios = <&gpio GPIODV_5 GPIO_ACTIVE_HIGH>;
170*865a0d06SJerome Brunet		gpios-states = <0>;
171*865a0d06SJerome Brunet
172*865a0d06SJerome Brunet		states = <3300000 0>,
173*865a0d06SJerome Brunet			 <1800000 1>;
174*865a0d06SJerome Brunet
175*865a0d06SJerome Brunet		regulator-settling-time-up-us = <200>;
176*865a0d06SJerome Brunet		regulator-settling-time-down-us = <50000>;
177*865a0d06SJerome Brunet	};
178*865a0d06SJerome Brunet};
179*865a0d06SJerome Brunet
180*865a0d06SJerome Brunet&cec_AO {
181*865a0d06SJerome Brunet	pinctrl-0 = <&ao_cec_pins>;
182*865a0d06SJerome Brunet	pinctrl-names = "default";
183*865a0d06SJerome Brunet	hdmi-phandle = <&hdmi_tx>;
184*865a0d06SJerome Brunet	status = "okay";
185*865a0d06SJerome Brunet};
186*865a0d06SJerome Brunet
187*865a0d06SJerome Brunet&cvbs_vdac_port {
188*865a0d06SJerome Brunet	cvbs_vdac_out: endpoint {
189*865a0d06SJerome Brunet		remote-endpoint = <&cvbs_connector_in>;
190*865a0d06SJerome Brunet	};
191*865a0d06SJerome Brunet};
192*865a0d06SJerome Brunet
193*865a0d06SJerome Brunet&ethmac {
194*865a0d06SJerome Brunet	pinctrl-0 = <&eth_pins>, <&eth_phy_irq_pins>;
195*865a0d06SJerome Brunet	pinctrl-names = "default";
196*865a0d06SJerome Brunet	phy-handle = <&external_phy>;
197*865a0d06SJerome Brunet	amlogic,tx-delay-ns = <2>;
198*865a0d06SJerome Brunet	phy-mode = "rgmii";
199*865a0d06SJerome Brunet	status = "okay";
200*865a0d06SJerome Brunet};
201*865a0d06SJerome Brunet
202*865a0d06SJerome Brunet&external_mdio {
203*865a0d06SJerome Brunet	external_phy: ethernet-phy@0 {
204*865a0d06SJerome Brunet		reg = <0>;
205*865a0d06SJerome Brunet		max-speed = <1000>;
206*865a0d06SJerome Brunet		reset-assert-us = <10000>;
207*865a0d06SJerome Brunet		reset-deassert-us = <30000>;
208*865a0d06SJerome Brunet		reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>;
209*865a0d06SJerome Brunet		interrupt-parent = <&gpio_intc>;
210*865a0d06SJerome Brunet		interrupts = <25 IRQ_TYPE_LEVEL_LOW>;
211*865a0d06SJerome Brunet	};
212*865a0d06SJerome Brunet};
213*865a0d06SJerome Brunet
214*865a0d06SJerome Brunet&pinctrl_periphs {
215*865a0d06SJerome Brunet	/*
216*865a0d06SJerome Brunet	 * Make sure the reset pin of the usb HUB is driven high to take
217*865a0d06SJerome Brunet	 * it out of reset.
218*865a0d06SJerome Brunet	 */
219*865a0d06SJerome Brunet	usb1_rst_pins: usb1_rst_irq {
220*865a0d06SJerome Brunet		mux {
221*865a0d06SJerome Brunet			groups = "GPIODV_3";
222*865a0d06SJerome Brunet			function = "gpio_periphs";
223*865a0d06SJerome Brunet			bias-disable;
224*865a0d06SJerome Brunet			output-high;
225*865a0d06SJerome Brunet		};
226*865a0d06SJerome Brunet	};
227*865a0d06SJerome Brunet
228*865a0d06SJerome Brunet	/* Make sure the phy irq pin is properly configured as input */
229*865a0d06SJerome Brunet	eth_phy_irq_pins: eth_phy_irq {
230*865a0d06SJerome Brunet		mux {
231*865a0d06SJerome Brunet			groups = "GPIOZ_15";
232*865a0d06SJerome Brunet			function = "gpio_periphs";
233*865a0d06SJerome Brunet			bias-disable;
234*865a0d06SJerome Brunet			output-disable;
235*865a0d06SJerome Brunet		};
236*865a0d06SJerome Brunet	};
237*865a0d06SJerome Brunet};
238*865a0d06SJerome Brunet
239*865a0d06SJerome Brunet&hdmi_tx {
240*865a0d06SJerome Brunet	pinctrl-0 = <&hdmi_hpd_pins>, <&hdmi_i2c_pins>;
241*865a0d06SJerome Brunet	pinctrl-names = "default";
242*865a0d06SJerome Brunet	hdmi-supply = <&vcc5v>;
243*865a0d06SJerome Brunet	status = "okay";
244*865a0d06SJerome Brunet};
245*865a0d06SJerome Brunet
246*865a0d06SJerome Brunet&hdmi_tx_tmds_port {
247*865a0d06SJerome Brunet	hdmi_tx_tmds_out: endpoint {
248*865a0d06SJerome Brunet		remote-endpoint = <&hdmi_connector_in>;
249*865a0d06SJerome Brunet	};
250*865a0d06SJerome Brunet};
251*865a0d06SJerome Brunet
252*865a0d06SJerome Brunet&ir {
253*865a0d06SJerome Brunet	pinctrl-0 = <&remote_input_ao_pins>;
254*865a0d06SJerome Brunet	pinctrl-names = "default";
255*865a0d06SJerome Brunet	status = "okay";
256*865a0d06SJerome Brunet};
257*865a0d06SJerome Brunet
258*865a0d06SJerome Brunet&i2c_C {
259*865a0d06SJerome Brunet	pinctrl-0 = <&i2c_c_dv18_pins>;
260*865a0d06SJerome Brunet	pinctrl-names = "default";
261*865a0d06SJerome Brunet	status = "okay";
262*865a0d06SJerome Brunet
263*865a0d06SJerome Brunet	rtc: rtc@51 {
264*865a0d06SJerome Brunet		reg = <0x51>;
265*865a0d06SJerome Brunet		compatible = "nxp,pcf8563";
266*865a0d06SJerome Brunet		#clock-cells = <0>;
267*865a0d06SJerome Brunet		clock-output-names = "rtc_clkout";
268*865a0d06SJerome Brunet	};
269*865a0d06SJerome Brunet};
270*865a0d06SJerome Brunet
271*865a0d06SJerome Brunet&pwm_AO_ab {
272*865a0d06SJerome Brunet	pinctrl-0 = <&pwm_ao_a_3_pins>;
273*865a0d06SJerome Brunet	pinctrl-names = "default";
274*865a0d06SJerome Brunet	clocks = <&clkc CLKID_FCLK_DIV4>;
275*865a0d06SJerome Brunet	clock-names = "clkin0";
276*865a0d06SJerome Brunet	status = "okay";
277*865a0d06SJerome Brunet};
278*865a0d06SJerome Brunet
279*865a0d06SJerome Brunet&pwm_ab {
280*865a0d06SJerome Brunet	pinctrl-0 = <&pwm_b_pins>;
281*865a0d06SJerome Brunet	pinctrl-names = "default";
282*865a0d06SJerome Brunet	clocks = <&clkc CLKID_FCLK_DIV4>;
283*865a0d06SJerome Brunet	clock-names = "clkin0";
284*865a0d06SJerome Brunet	status = "okay";
285*865a0d06SJerome Brunet};
286*865a0d06SJerome Brunet
287*865a0d06SJerome Brunet&pwm_ef {
288*865a0d06SJerome Brunet	pinctrl-0 = <&pwm_e_pins>, <&pwm_f_clk_pins>;
289*865a0d06SJerome Brunet	pinctrl-names = "default";
290*865a0d06SJerome Brunet	clocks = <&clkc CLKID_FCLK_DIV4>;
291*865a0d06SJerome Brunet	clock-names = "clkin0";
292*865a0d06SJerome Brunet	status = "okay";
293*865a0d06SJerome Brunet};
294*865a0d06SJerome Brunet
295*865a0d06SJerome Brunet&saradc {
296*865a0d06SJerome Brunet	vref-supply = <&vddio_ao18>;
297*865a0d06SJerome Brunet	status = "okay";
298*865a0d06SJerome Brunet};
299*865a0d06SJerome Brunet
300*865a0d06SJerome Brunet/* SD card */
301*865a0d06SJerome Brunet&sd_emmc_b {
302*865a0d06SJerome Brunet	pinctrl-0 = <&sdcard_pins>;
303*865a0d06SJerome Brunet	pinctrl-1 = <&sdcard_clk_gate_pins>;
304*865a0d06SJerome Brunet	pinctrl-names = "default", "clk-gate";
305*865a0d06SJerome Brunet
306*865a0d06SJerome Brunet	bus-width = <4>;
307*865a0d06SJerome Brunet	cap-sd-highspeed;
308*865a0d06SJerome Brunet	sd-uhs-sdr12;
309*865a0d06SJerome Brunet	sd-uhs-sdr25;
310*865a0d06SJerome Brunet	sd-uhs-sdr50;
311*865a0d06SJerome Brunet	sd-uhs-ddr50;
312*865a0d06SJerome Brunet	max-frequency = <200000000>;
313*865a0d06SJerome Brunet	disable-wp;
314*865a0d06SJerome Brunet
315*865a0d06SJerome Brunet	cd-gpios = <&gpio CARD_6 GPIO_ACTIVE_LOW>;
316*865a0d06SJerome Brunet
317*865a0d06SJerome Brunet	vmmc-supply = <&vcc_card>;
318*865a0d06SJerome Brunet	vqmmc-supply = <&vddio_card>;
319*865a0d06SJerome Brunet
320*865a0d06SJerome Brunet	status = "okay";
321*865a0d06SJerome Brunet};
322*865a0d06SJerome Brunet
323*865a0d06SJerome Brunet/* eMMC */
324*865a0d06SJerome Brunet&sd_emmc_c {
325*865a0d06SJerome Brunet	pinctrl-0 = <&emmc_pins>;
326*865a0d06SJerome Brunet	pinctrl-1 = <&emmc_clk_gate_pins>;
327*865a0d06SJerome Brunet	pinctrl-names = "default", "clk-gate";
328*865a0d06SJerome Brunet
329*865a0d06SJerome Brunet	bus-width = <8>;
330*865a0d06SJerome Brunet	cap-mmc-highspeed;
331*865a0d06SJerome Brunet	mmc-ddr-1_8v;
332*865a0d06SJerome Brunet	mmc-hs200-1_8v;
333*865a0d06SJerome Brunet	max-frequency = <200000000>;
334*865a0d06SJerome Brunet	disable-wp;
335*865a0d06SJerome Brunet
336*865a0d06SJerome Brunet	mmc-pwrseq = <&emmc_pwrseq>;
337*865a0d06SJerome Brunet	vmmc-supply = <&vddio_ao3v3>;
338*865a0d06SJerome Brunet	vqmmc-supply = <&vddio_boot>;
339*865a0d06SJerome Brunet
340*865a0d06SJerome Brunet	status = "okay";
341*865a0d06SJerome Brunet};
342*865a0d06SJerome Brunet
343*865a0d06SJerome Brunet&spifc {
344*865a0d06SJerome Brunet	pinctrl-0 = <&nor_pins>;
345*865a0d06SJerome Brunet	pinctrl-names = "default";
346*865a0d06SJerome Brunet	status = "okay";
347*865a0d06SJerome Brunet
348*865a0d06SJerome Brunet	gd25lq128: spi-flash@0 {
349*865a0d06SJerome Brunet		compatible = "jedec,spi-nor";
350*865a0d06SJerome Brunet		#address-cells = <1>;
351*865a0d06SJerome Brunet		#size-cells = <1>;
352*865a0d06SJerome Brunet		reg = <0>;
353*865a0d06SJerome Brunet		spi-max-frequency = <12000000>;
354*865a0d06SJerome Brunet	};
355*865a0d06SJerome Brunet};
356*865a0d06SJerome Brunet
357*865a0d06SJerome Brunet&uart_AO {
358*865a0d06SJerome Brunet	pinctrl-0 = <&uart_ao_a_pins>;
359*865a0d06SJerome Brunet	pinctrl-names = "default";
360*865a0d06SJerome Brunet	status = "okay";
361*865a0d06SJerome Brunet};
362*865a0d06SJerome Brunet
363*865a0d06SJerome Brunet&usb0 {
364*865a0d06SJerome Brunet	status = "okay";
365*865a0d06SJerome Brunet};
366*865a0d06SJerome Brunet
367*865a0d06SJerome Brunet&usb2_phy0 {
368*865a0d06SJerome Brunet	pinctrl-0 = <&usb1_rst_pins>;
369*865a0d06SJerome Brunet	pinctrl-names = "default";
370*865a0d06SJerome Brunet	phy-supply = <&vcc5v>;
371*865a0d06SJerome Brunet};
372*865a0d06SJerome Brunet
373*865a0d06SJerome Brunet&usb2_phy1 {
374*865a0d06SJerome Brunet	phy-supply = <&vcc5v>;
375*865a0d06SJerome Brunet};
376