xref: /linux/scripts/dtc/include-prefixes/arm64/rockchip/rk3588-jaguar-ethernet-switch.dtso (revision 115e74a29b530d121891238e9551c4bcdf7b04b5)
1*8674f059SQuentin Schulz// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2*8674f059SQuentin Schulz/*
3*8674f059SQuentin Schulz * Copyright (c) 2025 Cherry Embedded Solutions GmbH
4*8674f059SQuentin Schulz *
5*8674f059SQuentin Schulz * Device Tree Overlay for the Ethernet Switch adapter for the Mezzanine
6*8674f059SQuentin Schulz * connector on RK3588 Jaguar
7*8674f059SQuentin Schulz * (manual: https://embedded.cherry.de/jaguar-ethernet-switch-user-manual/)
8*8674f059SQuentin Schulz *
9*8674f059SQuentin Schulz * This adapter has a KSZ9896 Ethernet Switch with 4 1GbE Ethernet connectors,
10*8674f059SQuentin Schulz * two user controllable LEDs, and an M12 12-pin connector which exposes the
11*8674f059SQuentin Schulz * following signals:
12*8674f059SQuentin Schulz *  - RS232/RS485 (max 250Kbps/500Kbps, RX pin1, TX pin2)
13*8674f059SQuentin Schulz *  - two digital inputs (pin4 routed to GPIO3_C5 on SoC, pin5 to GPIO4_B4)
14*8674f059SQuentin Schulz *  - two digital outputs (pin7 routed to GPIO3_D3 on SoC, pin8 to GPIO3_D1)
15*8674f059SQuentin Schulz *  - two analog inputs (pin10 to channel1 of ADS1015, pin11 to channel2)
16*8674f059SQuentin Schulz *
17*8674f059SQuentin Schulz * RK3588 Jaguar can be powered entirely through the adapter via the M8 3-pin
18*8674f059SQuentin Schulz * connector (12-24V).
19*8674f059SQuentin Schulz */
20*8674f059SQuentin Schulz
21*8674f059SQuentin Schulz/dts-v1/;
22*8674f059SQuentin Schulz/plugin/;
23*8674f059SQuentin Schulz
24*8674f059SQuentin Schulz#include <dt-bindings/clock/rockchip,rk3588-cru.h>
25*8674f059SQuentin Schulz#include <dt-bindings/gpio/gpio.h>
26*8674f059SQuentin Schulz#include <dt-bindings/interrupt-controller/irq.h>
27*8674f059SQuentin Schulz#include <dt-bindings/leds/common.h>
28*8674f059SQuentin Schulz#include <dt-bindings/pinctrl/rockchip.h>
29*8674f059SQuentin Schulz
30*8674f059SQuentin Schulz&{/} {
31*8674f059SQuentin Schulz	aliases {
32*8674f059SQuentin Schulz		ethernet1 = "/ethernet@fe1c0000";
33*8674f059SQuentin Schulz	};
34*8674f059SQuentin Schulz
35*8674f059SQuentin Schulz	mezzanine-leds {
36*8674f059SQuentin Schulz		compatible = "gpio-leds";
37*8674f059SQuentin Schulz		pinctrl-names = "default";
38*8674f059SQuentin Schulz		pinctrl-0 = <&led_usr1_pin &led_usr2_pin>;
39*8674f059SQuentin Schulz
40*8674f059SQuentin Schulz		led-1 {
41*8674f059SQuentin Schulz			gpios = <&gpio1 RK_PC1 GPIO_ACTIVE_HIGH>;
42*8674f059SQuentin Schulz			label = "USR1";
43*8674f059SQuentin Schulz		};
44*8674f059SQuentin Schulz
45*8674f059SQuentin Schulz		led-2 {
46*8674f059SQuentin Schulz			gpios = <&gpio3 RK_PC4 GPIO_ACTIVE_HIGH>;
47*8674f059SQuentin Schulz			label = "USR2";
48*8674f059SQuentin Schulz		};
49*8674f059SQuentin Schulz	};
50*8674f059SQuentin Schulz};
51*8674f059SQuentin Schulz
52*8674f059SQuentin Schulz&gmac1 {
53*8674f059SQuentin Schulz	clock_in_out = "output";
54*8674f059SQuentin Schulz	phy-mode = "rgmii-id";
55*8674f059SQuentin Schulz	pinctrl-names = "default";
56*8674f059SQuentin Schulz	pinctrl-0 = <&gmac1_rx_bus2
57*8674f059SQuentin Schulz		     &gmac1_tx_bus2
58*8674f059SQuentin Schulz		     &gmac1_rgmii_clk
59*8674f059SQuentin Schulz		     &gmac1_rgmii_bus
60*8674f059SQuentin Schulz		     &eth1_pins>;
61*8674f059SQuentin Schulz	rx_delay = <0x0>;
62*8674f059SQuentin Schulz	tx_delay = <0x0>;
63*8674f059SQuentin Schulz	status = "okay";
64*8674f059SQuentin Schulz
65*8674f059SQuentin Schulz	fixed-link {
66*8674f059SQuentin Schulz		speed = <1000>;
67*8674f059SQuentin Schulz		full-duplex;
68*8674f059SQuentin Schulz	};
69*8674f059SQuentin Schulz};
70*8674f059SQuentin Schulz
71*8674f059SQuentin Schulz&i2c1 {
72*8674f059SQuentin Schulz	#address-cells = <1>;
73*8674f059SQuentin Schulz	/*
74*8674f059SQuentin Schulz	 * ADS1015 can handle high-speed (HS) mode (up to 3.4MHz) on I2C bus,
75*8674f059SQuentin Schulz	 * but SoC can handle only up to 400kHz.
76*8674f059SQuentin Schulz	 */
77*8674f059SQuentin Schulz	clock-frequency = <400000>;
78*8674f059SQuentin Schulz	#size-cells = <0>;
79*8674f059SQuentin Schulz	status = "okay";
80*8674f059SQuentin Schulz
81*8674f059SQuentin Schulz	adc@48 {
82*8674f059SQuentin Schulz		compatible = "ti,ads1015";
83*8674f059SQuentin Schulz		reg = <0x48>;
84*8674f059SQuentin Schulz		#address-cells = <1>;
85*8674f059SQuentin Schulz		interrupt-parent = <&gpio3>;
86*8674f059SQuentin Schulz		interrupts = <RK_PC7 IRQ_TYPE_EDGE_FALLING>;
87*8674f059SQuentin Schulz		pinctrl-0 = <&adc_alert>;
88*8674f059SQuentin Schulz		pinctrl-names = "default";
89*8674f059SQuentin Schulz		#io-channel-cells = <1>;
90*8674f059SQuentin Schulz		#size-cells = <0>;
91*8674f059SQuentin Schulz
92*8674f059SQuentin Schulz		channel@1 {
93*8674f059SQuentin Schulz			reg = <5>; /* Single-ended between AIN1 and GND */
94*8674f059SQuentin Schulz			ti,datarate = <0>;
95*8674f059SQuentin Schulz			ti,gain = <5>;
96*8674f059SQuentin Schulz		};
97*8674f059SQuentin Schulz
98*8674f059SQuentin Schulz		channel@2 {
99*8674f059SQuentin Schulz			reg = <6>; /* Single-ended between AIN2 and GND */
100*8674f059SQuentin Schulz			ti,datarate = <0>;
101*8674f059SQuentin Schulz			ti,gain = <5>;
102*8674f059SQuentin Schulz		};
103*8674f059SQuentin Schulz	};
104*8674f059SQuentin Schulz
105*8674f059SQuentin Schulz	switch@5f {
106*8674f059SQuentin Schulz		compatible = "microchip,ksz9896";
107*8674f059SQuentin Schulz		reg = <0x5f>;
108*8674f059SQuentin Schulz		interrupt-parent = <&gpio3>;
109*8674f059SQuentin Schulz		interrupts = <RK_PB7 IRQ_TYPE_EDGE_FALLING>; /* ETH_INTRP_N */
110*8674f059SQuentin Schulz		pinctrl-0 = <&eth_reset_n &eth_intrp_n>;
111*8674f059SQuentin Schulz		pinctrl-names = "default";
112*8674f059SQuentin Schulz		reset-gpios = <&gpio3 RK_PB6 GPIO_ACTIVE_LOW>; /* ETH_RESET */
113*8674f059SQuentin Schulz		microchip,synclko-disable; /* CLKO_25_125 only routed to TP1 */
114*8674f059SQuentin Schulz
115*8674f059SQuentin Schulz		ethernet-ports {
116*8674f059SQuentin Schulz			#address-cells = <1>;
117*8674f059SQuentin Schulz			#size-cells = <0>;
118*8674f059SQuentin Schulz
119*8674f059SQuentin Schulz			lan1: port@0 {
120*8674f059SQuentin Schulz				reg = <0>;
121*8674f059SQuentin Schulz				label = "ETH1";
122*8674f059SQuentin Schulz			};
123*8674f059SQuentin Schulz
124*8674f059SQuentin Schulz			lan2: port@1 {
125*8674f059SQuentin Schulz				reg = <1>;
126*8674f059SQuentin Schulz				label = "ETH2";
127*8674f059SQuentin Schulz			};
128*8674f059SQuentin Schulz
129*8674f059SQuentin Schulz			lan3: port@2 {
130*8674f059SQuentin Schulz				reg = <2>;
131*8674f059SQuentin Schulz				label = "ETH3";
132*8674f059SQuentin Schulz			};
133*8674f059SQuentin Schulz
134*8674f059SQuentin Schulz			lan4: port@3 {
135*8674f059SQuentin Schulz				reg = <3>;
136*8674f059SQuentin Schulz				label = "ETH4";
137*8674f059SQuentin Schulz			};
138*8674f059SQuentin Schulz
139*8674f059SQuentin Schulz			port@5 {
140*8674f059SQuentin Schulz				reg = <5>;
141*8674f059SQuentin Schulz				ethernet = <&gmac1>;
142*8674f059SQuentin Schulz				label = "CPU";
143*8674f059SQuentin Schulz				phy-mode = "rgmii-id";
144*8674f059SQuentin Schulz				rx-internal-delay-ps = <2000>;
145*8674f059SQuentin Schulz				tx-internal-delay-ps = <2000>;
146*8674f059SQuentin Schulz
147*8674f059SQuentin Schulz				fixed-link {
148*8674f059SQuentin Schulz					speed = <1000>;
149*8674f059SQuentin Schulz					full-duplex;
150*8674f059SQuentin Schulz				};
151*8674f059SQuentin Schulz			};
152*8674f059SQuentin Schulz		};
153*8674f059SQuentin Schulz	};
154*8674f059SQuentin Schulz};
155*8674f059SQuentin Schulz
156*8674f059SQuentin Schulz&pinctrl {
157*8674f059SQuentin Schulz	adc {
158*8674f059SQuentin Schulz		adc_alert: adc-alert-irq {
159*8674f059SQuentin Schulz			rockchip,pins =
160*8674f059SQuentin Schulz				<3 RK_PC7 RK_FUNC_GPIO &pcfg_pull_up>;
161*8674f059SQuentin Schulz		};
162*8674f059SQuentin Schulz	};
163*8674f059SQuentin Schulz
164*8674f059SQuentin Schulz	ethernet {
165*8674f059SQuentin Schulz		eth_intrp_n: eth-intrp-n {
166*8674f059SQuentin Schulz			rockchip,pins =
167*8674f059SQuentin Schulz				<3 RK_PB7 RK_FUNC_GPIO &pcfg_pull_none>;
168*8674f059SQuentin Schulz		};
169*8674f059SQuentin Schulz
170*8674f059SQuentin Schulz		eth_reset_n: eth-reset-n {
171*8674f059SQuentin Schulz			rockchip,pins =
172*8674f059SQuentin Schulz				<3 RK_PB6 RK_FUNC_GPIO &pcfg_pull_none>;
173*8674f059SQuentin Schulz		};
174*8674f059SQuentin Schulz	};
175*8674f059SQuentin Schulz
176*8674f059SQuentin Schulz	leds {
177*8674f059SQuentin Schulz		led_usr1_pin: led-usr1-pin {
178*8674f059SQuentin Schulz			rockchip,pins =
179*8674f059SQuentin Schulz				<1 RK_PC1 RK_FUNC_GPIO &pcfg_pull_down>;
180*8674f059SQuentin Schulz		};
181*8674f059SQuentin Schulz
182*8674f059SQuentin Schulz		led_usr2_pin: led-usr2-pin {
183*8674f059SQuentin Schulz			rockchip,pins =
184*8674f059SQuentin Schulz				<3 RK_PC4 RK_FUNC_GPIO &pcfg_pull_down>;
185*8674f059SQuentin Schulz		};
186*8674f059SQuentin Schulz	};
187*8674f059SQuentin Schulz};
188*8674f059SQuentin Schulz
189*8674f059SQuentin Schulz&uart9 {
190*8674f059SQuentin Schulz	/* GPIO3_D0/EN_RS485_MODE for switching between RS232 and RS485 */
191*8674f059SQuentin Schulz	pinctrl-0 = <&uart9m2_xfer &uart9m2_rtsn>;
192*8674f059SQuentin Schulz	pinctrl-names = "default";
193*8674f059SQuentin Schulz	linux,rs485-enabled-at-boot-time;
194*8674f059SQuentin Schulz	status = "okay";
195*8674f059SQuentin Schulz};
196