xref: /OK3568_Linux_fs/kernel/arch/arm/boot/dts/armada-388-helios4.dts (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun// SPDX-License-Identifier: (GPL-2.0 OR MIT)
2*4882a593Smuzhiyun/*
3*4882a593Smuzhiyun * Device Tree file for Helios4
4*4882a593Smuzhiyun * based on SolidRun Clearfog revision A1 rev 2.0 (88F6828)
5*4882a593Smuzhiyun *
6*4882a593Smuzhiyun *  Copyright (C) 2017 Aditya Prayoga <aditya@kobol.io>
7*4882a593Smuzhiyun *
8*4882a593Smuzhiyun */
9*4882a593Smuzhiyun
10*4882a593Smuzhiyun/dts-v1/;
11*4882a593Smuzhiyun#include "armada-388.dtsi"
12*4882a593Smuzhiyun#include "armada-38x-solidrun-microsom.dtsi"
13*4882a593Smuzhiyun
14*4882a593Smuzhiyun/ {
15*4882a593Smuzhiyun	model = "Helios4";
16*4882a593Smuzhiyun	compatible = "kobol,helios4", "marvell,armada388",
17*4882a593Smuzhiyun		"marvell,armada385", "marvell,armada380";
18*4882a593Smuzhiyun
19*4882a593Smuzhiyun	memory {
20*4882a593Smuzhiyun		device_type = "memory";
21*4882a593Smuzhiyun		reg = <0x00000000 0x80000000>; /* 2 GB */
22*4882a593Smuzhiyun	};
23*4882a593Smuzhiyun
24*4882a593Smuzhiyun	aliases {
25*4882a593Smuzhiyun		/* So that mvebu u-boot can update the MAC addresses */
26*4882a593Smuzhiyun		ethernet1 = &eth0;
27*4882a593Smuzhiyun	};
28*4882a593Smuzhiyun
29*4882a593Smuzhiyun	chosen {
30*4882a593Smuzhiyun		stdout-path = "serial0:115200n8";
31*4882a593Smuzhiyun	};
32*4882a593Smuzhiyun
33*4882a593Smuzhiyun	reg_12v: regulator-12v {
34*4882a593Smuzhiyun		compatible = "regulator-fixed";
35*4882a593Smuzhiyun		regulator-name = "power_brick_12V";
36*4882a593Smuzhiyun		regulator-min-microvolt = <12000000>;
37*4882a593Smuzhiyun		regulator-max-microvolt = <12000000>;
38*4882a593Smuzhiyun		regulator-always-on;
39*4882a593Smuzhiyun	};
40*4882a593Smuzhiyun
41*4882a593Smuzhiyun	reg_3p3v: regulator-3p3v {
42*4882a593Smuzhiyun		compatible = "regulator-fixed";
43*4882a593Smuzhiyun		regulator-name = "3P3V";
44*4882a593Smuzhiyun		regulator-min-microvolt = <3300000>;
45*4882a593Smuzhiyun		regulator-max-microvolt = <3300000>;
46*4882a593Smuzhiyun		regulator-always-on;
47*4882a593Smuzhiyun		vin-supply = <&reg_12v>;
48*4882a593Smuzhiyun	};
49*4882a593Smuzhiyun
50*4882a593Smuzhiyun	reg_5p0v_hdd: regulator-5v-hdd {
51*4882a593Smuzhiyun		compatible = "regulator-fixed";
52*4882a593Smuzhiyun		regulator-name = "5V_HDD";
53*4882a593Smuzhiyun		regulator-min-microvolt = <5000000>;
54*4882a593Smuzhiyun		regulator-max-microvolt = <5000000>;
55*4882a593Smuzhiyun		regulator-always-on;
56*4882a593Smuzhiyun		vin-supply = <&reg_12v>;
57*4882a593Smuzhiyun	};
58*4882a593Smuzhiyun
59*4882a593Smuzhiyun	reg_5p0v_usb: regulator-5v-usb {
60*4882a593Smuzhiyun		compatible = "regulator-fixed";
61*4882a593Smuzhiyun		regulator-name = "USB-PWR";
62*4882a593Smuzhiyun		regulator-min-microvolt = <5000000>;
63*4882a593Smuzhiyun		regulator-max-microvolt = <5000000>;
64*4882a593Smuzhiyun		regulator-boot-on;
65*4882a593Smuzhiyun		regulator-always-on;
66*4882a593Smuzhiyun		enable-active-high;
67*4882a593Smuzhiyun		gpio = <&expander0 6 GPIO_ACTIVE_HIGH>;
68*4882a593Smuzhiyun		vin-supply = <&reg_12v>;
69*4882a593Smuzhiyun	};
70*4882a593Smuzhiyun
71*4882a593Smuzhiyun	system-leds {
72*4882a593Smuzhiyun		compatible = "gpio-leds";
73*4882a593Smuzhiyun		pinctrl-names = "default";
74*4882a593Smuzhiyun		pinctrl-0 = <&helios_system_led_pins>;
75*4882a593Smuzhiyun
76*4882a593Smuzhiyun		status-led {
77*4882a593Smuzhiyun			label = "helios4:green:status";
78*4882a593Smuzhiyun			gpios = <&gpio0 24 GPIO_ACTIVE_LOW>;
79*4882a593Smuzhiyun			linux,default-trigger = "heartbeat";
80*4882a593Smuzhiyun			default-state = "on";
81*4882a593Smuzhiyun		};
82*4882a593Smuzhiyun
83*4882a593Smuzhiyun		fault-led {
84*4882a593Smuzhiyun			label = "helios4:red:fault";
85*4882a593Smuzhiyun			gpios = <&gpio0 25 GPIO_ACTIVE_LOW>;
86*4882a593Smuzhiyun			default-state = "keep";
87*4882a593Smuzhiyun		};
88*4882a593Smuzhiyun	};
89*4882a593Smuzhiyun
90*4882a593Smuzhiyun	io-leds {
91*4882a593Smuzhiyun		compatible = "gpio-leds";
92*4882a593Smuzhiyun		pinctrl-names = "default";
93*4882a593Smuzhiyun		pinctrl-0 = <&helios_io_led_pins>;
94*4882a593Smuzhiyun
95*4882a593Smuzhiyun		sata1-led {
96*4882a593Smuzhiyun			label = "helios4:green:ata1";
97*4882a593Smuzhiyun			gpios = <&gpio1 17 GPIO_ACTIVE_LOW>;
98*4882a593Smuzhiyun			linux,default-trigger = "ata1";
99*4882a593Smuzhiyun			default-state = "off";
100*4882a593Smuzhiyun		};
101*4882a593Smuzhiyun		sata2-led {
102*4882a593Smuzhiyun			label = "helios4:green:ata2";
103*4882a593Smuzhiyun			gpios = <&gpio1 18 GPIO_ACTIVE_LOW>;
104*4882a593Smuzhiyun			linux,default-trigger = "ata2";
105*4882a593Smuzhiyun			default-state = "off";
106*4882a593Smuzhiyun		};
107*4882a593Smuzhiyun		sata3-led {
108*4882a593Smuzhiyun			label = "helios4:green:ata3";
109*4882a593Smuzhiyun			gpios = <&gpio1 20 GPIO_ACTIVE_LOW>;
110*4882a593Smuzhiyun			linux,default-trigger = "ata3";
111*4882a593Smuzhiyun			default-state = "off";
112*4882a593Smuzhiyun		};
113*4882a593Smuzhiyun		sata4-led {
114*4882a593Smuzhiyun			label = "helios4:green:ata4";
115*4882a593Smuzhiyun			gpios = <&gpio1 21 GPIO_ACTIVE_LOW>;
116*4882a593Smuzhiyun			linux,default-trigger = "ata4";
117*4882a593Smuzhiyun			default-state = "off";
118*4882a593Smuzhiyun		};
119*4882a593Smuzhiyun		usb-led {
120*4882a593Smuzhiyun			label = "helios4:green:usb";
121*4882a593Smuzhiyun			gpios = <&gpio1 22 GPIO_ACTIVE_LOW>;
122*4882a593Smuzhiyun			linux,default-trigger = "usb-host";
123*4882a593Smuzhiyun			default-state = "off";
124*4882a593Smuzhiyun		};
125*4882a593Smuzhiyun	};
126*4882a593Smuzhiyun
127*4882a593Smuzhiyun	fan1: j10-pwm {
128*4882a593Smuzhiyun		compatible = "pwm-fan";
129*4882a593Smuzhiyun		pwms = <&gpio1 9 40000>;	/* Target freq:25 kHz */
130*4882a593Smuzhiyun		pinctrl-names = "default";
131*4882a593Smuzhiyun		pinctrl-0 = <&helios_fan1_pins>;
132*4882a593Smuzhiyun	};
133*4882a593Smuzhiyun
134*4882a593Smuzhiyun	fan2: j17-pwm {
135*4882a593Smuzhiyun		compatible = "pwm-fan";
136*4882a593Smuzhiyun		pwms = <&gpio1 23 40000>;	/* Target freq:25 kHz */
137*4882a593Smuzhiyun		pinctrl-names = "default";
138*4882a593Smuzhiyun		pinctrl-0 = <&helios_fan2_pins>;
139*4882a593Smuzhiyun	};
140*4882a593Smuzhiyun
141*4882a593Smuzhiyun	usb2_phy: usb2-phy {
142*4882a593Smuzhiyun		compatible = "usb-nop-xceiv";
143*4882a593Smuzhiyun		vbus-regulator = <&reg_5p0v_usb>;
144*4882a593Smuzhiyun	};
145*4882a593Smuzhiyun
146*4882a593Smuzhiyun	usb3_phy: usb3-phy {
147*4882a593Smuzhiyun		compatible = "usb-nop-xceiv";
148*4882a593Smuzhiyun	};
149*4882a593Smuzhiyun
150*4882a593Smuzhiyun	soc {
151*4882a593Smuzhiyun		internal-regs {
152*4882a593Smuzhiyun			i2c@11000 {
153*4882a593Smuzhiyun				/*
154*4882a593Smuzhiyun				 * PCA9655 GPIO expander, up to 1MHz clock.
155*4882a593Smuzhiyun				 *  0-Board Revision bit 0 #
156*4882a593Smuzhiyun				 *  1-Board Revision bit 1 #
157*4882a593Smuzhiyun				 *  5-USB3 overcurrent
158*4882a593Smuzhiyun				 *  6-USB3 power
159*4882a593Smuzhiyun				 */
160*4882a593Smuzhiyun				expander0: gpio-expander@20 {
161*4882a593Smuzhiyun					/*
162*4882a593Smuzhiyun					 * This is how it should be:
163*4882a593Smuzhiyun					 * compatible = "onnn,pca9655",
164*4882a593Smuzhiyun					 *	 "nxp,pca9555";
165*4882a593Smuzhiyun					 * but you can't do this because of
166*4882a593Smuzhiyun					 * the way I2C works.
167*4882a593Smuzhiyun					 */
168*4882a593Smuzhiyun					compatible = "nxp,pca9555";
169*4882a593Smuzhiyun					gpio-controller;
170*4882a593Smuzhiyun					#gpio-cells = <2>;
171*4882a593Smuzhiyun					reg = <0x20>;
172*4882a593Smuzhiyun					pinctrl-names = "default";
173*4882a593Smuzhiyun					pinctrl-0 = <&pca0_pins>;
174*4882a593Smuzhiyun					interrupt-parent = <&gpio0>;
175*4882a593Smuzhiyun					interrupts = <23 IRQ_TYPE_EDGE_FALLING>;
176*4882a593Smuzhiyun					interrupt-controller;
177*4882a593Smuzhiyun					#interrupt-cells = <2>;
178*4882a593Smuzhiyun
179*4882a593Smuzhiyun					board_rev_bit_0 {
180*4882a593Smuzhiyun						gpio-hog;
181*4882a593Smuzhiyun						gpios = <0 GPIO_ACTIVE_LOW>;
182*4882a593Smuzhiyun						input;
183*4882a593Smuzhiyun						line-name = "board-rev-0";
184*4882a593Smuzhiyun					};
185*4882a593Smuzhiyun					board_rev_bit_1 {
186*4882a593Smuzhiyun						gpio-hog;
187*4882a593Smuzhiyun						gpios = <1 GPIO_ACTIVE_LOW>;
188*4882a593Smuzhiyun						input;
189*4882a593Smuzhiyun						line-name = "board-rev-1";
190*4882a593Smuzhiyun					};
191*4882a593Smuzhiyun					usb3_ilimit {
192*4882a593Smuzhiyun						gpio-hog;
193*4882a593Smuzhiyun						gpios = <5 GPIO_ACTIVE_HIGH>;
194*4882a593Smuzhiyun						input;
195*4882a593Smuzhiyun						line-name = "usb-overcurrent-status";
196*4882a593Smuzhiyun					};
197*4882a593Smuzhiyun				};
198*4882a593Smuzhiyun
199*4882a593Smuzhiyun				temp_sensor: temp@4c {
200*4882a593Smuzhiyun					compatible = "ti,lm75";
201*4882a593Smuzhiyun					reg = <0x4c>;
202*4882a593Smuzhiyun					vcc-supply = <&reg_3p3v>;
203*4882a593Smuzhiyun				};
204*4882a593Smuzhiyun			};
205*4882a593Smuzhiyun
206*4882a593Smuzhiyun			i2c@11100 {
207*4882a593Smuzhiyun				/*
208*4882a593Smuzhiyun				 * External I2C Bus for user peripheral
209*4882a593Smuzhiyun				 */
210*4882a593Smuzhiyun				clock-frequency = <400000>;
211*4882a593Smuzhiyun				pinctrl-0 = <&helios_i2c1_pins>;
212*4882a593Smuzhiyun				pinctrl-names = "default";
213*4882a593Smuzhiyun				status = "okay";
214*4882a593Smuzhiyun			};
215*4882a593Smuzhiyun
216*4882a593Smuzhiyun			sata@a8000 {
217*4882a593Smuzhiyun				status = "okay";
218*4882a593Smuzhiyun				#address-cells = <1>;
219*4882a593Smuzhiyun				#size-cells = <0>;
220*4882a593Smuzhiyun
221*4882a593Smuzhiyun				sata0: sata-port@0 {
222*4882a593Smuzhiyun					reg = <0>;
223*4882a593Smuzhiyun				};
224*4882a593Smuzhiyun
225*4882a593Smuzhiyun				sata1: sata-port@1 {
226*4882a593Smuzhiyun					reg = <1>;
227*4882a593Smuzhiyun				};
228*4882a593Smuzhiyun			};
229*4882a593Smuzhiyun
230*4882a593Smuzhiyun			sata@e0000 {
231*4882a593Smuzhiyun				status = "okay";
232*4882a593Smuzhiyun				#address-cells = <1>;
233*4882a593Smuzhiyun				#size-cells = <0>;
234*4882a593Smuzhiyun
235*4882a593Smuzhiyun				sata2: sata-port@0 {
236*4882a593Smuzhiyun					reg = <0>;
237*4882a593Smuzhiyun				};
238*4882a593Smuzhiyun
239*4882a593Smuzhiyun				sata3: sata-port@1 {
240*4882a593Smuzhiyun					reg = <1>;
241*4882a593Smuzhiyun				};
242*4882a593Smuzhiyun			};
243*4882a593Smuzhiyun
244*4882a593Smuzhiyun			spi@10680 {
245*4882a593Smuzhiyun				pinctrl-0 = <&spi1_pins
246*4882a593Smuzhiyun					     &microsom_spi1_cs_pins>;
247*4882a593Smuzhiyun				pinctrl-names = "default";
248*4882a593Smuzhiyun				status = "okay";
249*4882a593Smuzhiyun			};
250*4882a593Smuzhiyun
251*4882a593Smuzhiyun			sdhci@d8000 {
252*4882a593Smuzhiyun				bus-width = <4>;
253*4882a593Smuzhiyun				cd-gpios = <&gpio0 20 GPIO_ACTIVE_LOW>;
254*4882a593Smuzhiyun				no-1-8-v;
255*4882a593Smuzhiyun				pinctrl-0 = <&helios_sdhci_pins
256*4882a593Smuzhiyun					     &helios_sdhci_cd_pins>;
257*4882a593Smuzhiyun				pinctrl-names = "default";
258*4882a593Smuzhiyun				status = "okay";
259*4882a593Smuzhiyun				vmmc = <&reg_3p3v>;
260*4882a593Smuzhiyun				wp-inverted;
261*4882a593Smuzhiyun			};
262*4882a593Smuzhiyun
263*4882a593Smuzhiyun			usb@58000 {
264*4882a593Smuzhiyun				usb-phy = <&usb2_phy>;
265*4882a593Smuzhiyun				status = "okay";
266*4882a593Smuzhiyun			};
267*4882a593Smuzhiyun
268*4882a593Smuzhiyun			usb3@f0000 {
269*4882a593Smuzhiyun				status = "okay";
270*4882a593Smuzhiyun			};
271*4882a593Smuzhiyun
272*4882a593Smuzhiyun			usb3@f8000 {
273*4882a593Smuzhiyun				status = "okay";
274*4882a593Smuzhiyun			};
275*4882a593Smuzhiyun
276*4882a593Smuzhiyun			pinctrl@18000 {
277*4882a593Smuzhiyun				pca0_pins: pca0-pins {
278*4882a593Smuzhiyun					marvell,pins = "mpp23";
279*4882a593Smuzhiyun					marvell,function = "gpio";
280*4882a593Smuzhiyun				};
281*4882a593Smuzhiyun				microsom_phy0_int_pins: microsom-phy0-int-pins {
282*4882a593Smuzhiyun					marvell,pins = "mpp18";
283*4882a593Smuzhiyun					marvell,function = "gpio";
284*4882a593Smuzhiyun				};
285*4882a593Smuzhiyun				helios_i2c1_pins: i2c1-pins {
286*4882a593Smuzhiyun					marvell,pins = "mpp26", "mpp27";
287*4882a593Smuzhiyun					marvell,function = "i2c1";
288*4882a593Smuzhiyun				};
289*4882a593Smuzhiyun				helios_sdhci_cd_pins: helios-sdhci-cd-pins {
290*4882a593Smuzhiyun					marvell,pins = "mpp20";
291*4882a593Smuzhiyun					marvell,function = "gpio";
292*4882a593Smuzhiyun				};
293*4882a593Smuzhiyun				helios_sdhci_pins: helios-sdhci-pins {
294*4882a593Smuzhiyun					marvell,pins = "mpp21", "mpp28",
295*4882a593Smuzhiyun						       "mpp37", "mpp38",
296*4882a593Smuzhiyun						       "mpp39", "mpp40";
297*4882a593Smuzhiyun					marvell,function = "sd0";
298*4882a593Smuzhiyun				};
299*4882a593Smuzhiyun				helios_system_led_pins: helios-system-led-pins {
300*4882a593Smuzhiyun					marvell,pins = "mpp24", "mpp25";
301*4882a593Smuzhiyun					marvell,function = "gpio";
302*4882a593Smuzhiyun				};
303*4882a593Smuzhiyun				helios_io_led_pins: helios-io-led-pins {
304*4882a593Smuzhiyun					marvell,pins = "mpp49", "mpp50",
305*4882a593Smuzhiyun						       "mpp52", "mpp53",
306*4882a593Smuzhiyun						       "mpp54";
307*4882a593Smuzhiyun					marvell,function = "gpio";
308*4882a593Smuzhiyun				};
309*4882a593Smuzhiyun				helios_fan1_pins: helios_fan1_pins {
310*4882a593Smuzhiyun					marvell,pins = "mpp41", "mpp43";
311*4882a593Smuzhiyun					marvell,function = "gpio";
312*4882a593Smuzhiyun				};
313*4882a593Smuzhiyun				helios_fan2_pins: helios_fan2_pins {
314*4882a593Smuzhiyun					marvell,pins = "mpp48", "mpp55";
315*4882a593Smuzhiyun					marvell,function = "gpio";
316*4882a593Smuzhiyun				};
317*4882a593Smuzhiyun				microsom_spi1_cs_pins: spi1-cs-pins {
318*4882a593Smuzhiyun					marvell,pins = "mpp59";
319*4882a593Smuzhiyun					marvell,function = "spi1";
320*4882a593Smuzhiyun				};
321*4882a593Smuzhiyun			};
322*4882a593Smuzhiyun		};
323*4882a593Smuzhiyun	};
324*4882a593Smuzhiyun};
325