1 From 6a028ad5aed9e68280c9ccf6d4ca5370fcfdb4a2 Mon Sep 17 00:00:00 2001
2 From: Marc Kleine-Budde <mkl@pengutronix.de>
3 Date: Fri, 15 Nov 2019 00:54:07 +0100
4 Subject: [PATCH] mcp251xfd: add overlay
6 Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
8 arch/arm/boot/dts/overlays/Makefile | 1 +
9 arch/arm/boot/dts/overlays/README | 22 ++
10 .../boot/dts/overlays/mcp251xfd-overlay.dts | 226 ++++++++++++++++++
11 3 files changed, 249 insertions(+)
12 create mode 100644 arch/arm/boot/dts/overlays/mcp251xfd-overlay.dts
14 --- a/arch/arm/boot/dts/overlays/Makefile
15 +++ b/arch/arm/boot/dts/overlays/Makefile
16 @@ -108,6 +108,7 @@ dtbo-$(CONFIG_ARCH_BCM2835) += \
24 --- a/arch/arm/boot/dts/overlays/README
25 +++ b/arch/arm/boot/dts/overlays/README
26 @@ -1779,6 +1779,28 @@ Params: oscillator Clock fr
27 interrupt GPIO for interrupt signal
31 +Info: Configures the MCP251XFD CAN controller family
32 + For devices on spi1 or spi2, the interfaces should be enabled
33 + with one of the spi1-1/2/3cs and/or spi2-1/2/3cs overlays.
34 +Load: dtoverlay=mcp251xfd,<param>=<val>
35 +Params: spi<n>-<m> Configure device at spi<n>, cs<m>
38 + oscillator Clock frequency for the CAN controller (Hz)
40 + speed Maximum SPI frequence (Hz)
42 + interrupt GPIO for interrupt signal
44 + rx_interrupt GPIO for RX interrupt signal (nINT1) (optional)
46 + xceiver_enable GPIO for CAN transceiver enable (optional)
48 + xceiver_active_high specifiy if CAN transceiver enable pin is
49 + active high (optional, default: active low)
53 Info: Configures MCP3008 A/D converters
54 For devices on spi1 or spi2, the interfaces should be enabled
56 +++ b/arch/arm/boot/dts/overlays/mcp251xfd-overlay.dts
58 +// SPDX-License-Identifier: (GPL-2.0 OR MIT)
63 +#include <dt-bindings/gpio/gpio.h>
64 +#include <dt-bindings/interrupt-controller/irq.h>
65 +#include <dt-bindings/pinctrl/bcm2835.h>
68 + compatible = "brcm,bcm2835";
71 + target = <&spidev0>;
73 + status = "disabled";
78 + target = <&spidev1>;
80 + status = "disabled";
85 + target-path = "spi1/spidev@0";
87 + status = "disabled";
92 + target-path = "spi1/spidev@1";
94 + status = "disabled";
99 + target-path = "spi1/spidev@2";
101 + status = "disabled";
106 + target-path = "spi2/spidev@0";
108 + status = "disabled";
113 + target-path = "spi2/spidev@1";
115 + status = "disabled";
120 + target-path = "spi2/spidev@2";
122 + status = "disabled";
129 + mcp251xfd_pins: mcp251xfd_pins {
131 + brcm,function = <BCM2835_FSEL_GPIO_IN>;
137 + target-path = "/clocks";
139 + clk_mcp251xfd_osc: mcp251xfd-osc {
140 + #clock-cells = <0>;
141 + compatible = "fixed-clock";
142 + clock-frequency = <40000000>;
147 + mcp251xfd_frag: fragment@10 {
151 + #address-cells = <1>;
154 + mcp251xfd: mcp251xfd@0 {
155 + compatible = "microchip,mcp251xfd";
157 + pinctrl-names = "default";
158 + pinctrl-0 = <&mcp251xfd_pins>;
159 + spi-max-frequency = <20000000>;
160 + interrupt-parent = <&gpio>;
161 + interrupts = <25 IRQ_TYPE_LEVEL_LOW>;
162 + clocks = <&clk_mcp251xfd_osc>;
168 + target = <&mcp251xfd>;
169 + mcp251xfd_rx_int_gpios: __dormant__ {
170 + microchip,rx-int-gpios = <&gpio 255 GPIO_ACTIVE_LOW>;
177 + mcp251xfd_xceiver_pins: mcp251xfd_xceiver_pins {
179 + brcm,function = <BCM2835_FSEL_GPIO_OUT>;
187 + reg_mcp251xfd_xceiver: reg_mcp251xfd_xceiver {
188 + compatible = "regulator-fixed";
189 + regulator-name = "mcp251xfd_xceiver";
190 + regulator-min-microvolt = <3300000>;
191 + regulator-max-microvolt = <3300000>;
192 + gpio = <&gpio 4 GPIO_ACTIVE_HIGH>;
193 + pinctrl-names = "default";
194 + pinctrl-0 = <&mcp251xfd_xceiver_pins>;
200 + target = <&mcp251xfd>;
202 + xceiver-supply = <®_mcp251xfd_xceiver>;
207 + spi0-0 = <0>, "+0",
208 + <&mcp251xfd_frag>, "target:0=", <&spi0>,
209 + <&mcp251xfd>, "reg:0=0",
210 + <&mcp251xfd_pins>, "name=mcp251xfd_spi0_0_pins",
211 + <&clk_mcp251xfd_osc>, "name=mcp251xfd-spi0-0-osc",
212 + <&mcp251xfd_xceiver_pins>, "name=mcp251xfd_spi0_0_xceiver_pins",
213 + <®_mcp251xfd_xceiver>, "name=reg-mcp251xfd-spi0-0-xceiver",
214 + <®_mcp251xfd_xceiver>, "regulator-name=mcp251xfd-spi0-0-xceiver";
215 + spi0-1 = <0>, "+1",
216 + <&mcp251xfd_frag>, "target:0=", <&spi0>,
217 + <&mcp251xfd>, "reg:0=1",
218 + <&mcp251xfd_pins>, "name=mcp251xfd_spi0_1_pins",
219 + <&clk_mcp251xfd_osc>, "name=mcp251xfd-spi0-1-osc",
220 + <&mcp251xfd_xceiver_pins>, "name=mcp251xfd_spi0_1_xceiver_pins",
221 + <®_mcp251xfd_xceiver>, "name=reg-mcp251xfd-spi0-1-xceiver",
222 + <®_mcp251xfd_xceiver>, "regulator-name=mcp251xfd-spi0-1-xceiver";
223 + spi1-0 = <0>, "+2",
224 + <&mcp251xfd_frag>, "target:0=", <&spi1>,
225 + <&mcp251xfd>, "reg:0=0",
226 + <&mcp251xfd_pins>, "name=mcp251xfd_spi1_0_pins",
227 + <&clk_mcp251xfd_osc>, "name=mcp251xfd-spi1-0-osc",
228 + <&mcp251xfd_xceiver_pins>, "name=mcp251xfd_spi1_0_xceiver_pins",
229 + <®_mcp251xfd_xceiver>, "name=reg-mcp251xfd-spi1-0-xceiver",
230 + <®_mcp251xfd_xceiver>, "regulator-name=mcp251xfd-spi1-0-xceiver";
231 + spi1-1 = <0>, "+3",
232 + <&mcp251xfd_frag>, "target:0=", <&spi1>,
233 + <&mcp251xfd>, "reg:0=1",
234 + <&mcp251xfd_pins>, "name=mcp251xfd_spi1_1_pins",
235 + <&clk_mcp251xfd_osc>, "name=mcp251xfd-spi1-1-osc",
236 + <&mcp251xfd_xceiver_pins>, "name=mcp251xfd_spi1_1_xceiver_pins",
237 + <®_mcp251xfd_xceiver>, "name=reg-mcp251xfd-spi1-1-xceiver",
238 + <®_mcp251xfd_xceiver>, "regulator-name=mcp251xfd-spi1-1-xceiver";
239 + spi1-2 = <0>, "+4",
240 + <&mcp251xfd_frag>, "target:0=", <&spi1>,
241 + <&mcp251xfd>, "reg:0=2",
242 + <&mcp251xfd_pins>, "name=mcp251xfd_spi1_2_pins",
243 + <&clk_mcp251xfd_osc>, "name=mcp251xfd-spi1-2-osc",
244 + <&mcp251xfd_xceiver_pins>, "name=mcp251xfd_spi1_2_xceiver_pins",
245 + <®_mcp251xfd_xceiver>, "name=reg-mcp251xfd-spi1-2-xceiver",
246 + <®_mcp251xfd_xceiver>, "regulator-name=mcp251xfd-spi1-2-xceiver";
247 + spi2-0 = <0>, "+5",
248 + <&mcp251xfd_frag>, "target:0=", <&spi2>,
249 + <&mcp251xfd>, "reg:0=0",
250 + <&mcp251xfd_pins>, "name=mcp251xfd_spi2_0_pins",
251 + <&clk_mcp251xfd_osc>, "name=mcp251xfd-spi2-0-osc",
252 + <&mcp251xfd_xceiver_pins>, "name=mcp251xfd_spi2_0_xceiver_pins",
253 + <®_mcp251xfd_xceiver>, "name=reg-mcp251xfd-spi2-0-xceiver",
254 + <®_mcp251xfd_xceiver>, "regulator-name=mcp251xfd-spi2-0-xceiver";
255 + spi2-1 = <0>, "+6",
256 + <&mcp251xfd_frag>, "target:0=", <&spi2>,
257 + <&mcp251xfd>, "reg:0=1",
258 + <&mcp251xfd_pins>, "name=mcp251xfd_spi2_1_pins",
259 + <&clk_mcp251xfd_osc>, "name=mcp251xfd-spi2-1-osc",
260 + <&mcp251xfd_xceiver_pins>, "name=mcp251xfd_spi2_1_xceiver_pins",
261 + <®_mcp251xfd_xceiver>, "name=reg-mcp251xfd-spi2-1-xceiver",
262 + <®_mcp251xfd_xceiver>, "regulator-name=mcp251xfd-spi2-1-xceiver";
263 + spi2-2 = <0>, "+7",
264 + <&mcp251xfd_frag>, "target:0=", <&spi2>,
265 + <&mcp251xfd>, "reg:0=2",
266 + <&mcp251xfd_pins>, "name=mcp251xfd_spi2_2_pins",
267 + <&clk_mcp251xfd_osc>, "name=mcp251xfd-spi2-2-osc",
268 + <&mcp251xfd_xceiver_pins>, "name=mcp251xfd_spi2_2_xceiver_pins",
269 + <®_mcp251xfd_xceiver>, "name=reg-mcp251xfd-spi2-2-xceiver",
270 + <®_mcp251xfd_xceiver>, "regulator-name=mcp251xfd-spi2-2-xceiver";
271 + oscillator = <&clk_mcp251xfd_osc>, "clock-frequency:0";
272 + speed = <&mcp251xfd>, "spi-max-frequency:0";
273 + interrupt = <&mcp251xfd_pins>, "brcm,pins:0",
274 + <&mcp251xfd>, "interrupts:0";
275 + rx_interrupt = <0>, "+11",
276 + <&mcp251xfd_pins>, "brcm,pins:4",
277 + <&mcp251xfd_rx_int_gpios>, "microchip,rx-int-gpios:4";
278 + xceiver_enable = <0>, "+12+13+14",
279 + <&mcp251xfd_xceiver_pins>, "brcm,pins:0",
280 + <®_mcp251xfd_xceiver>, "gpio:4";
281 + xceiver_active_high = <®_mcp251xfd_xceiver>, "enable-active-high?";