]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/gnu/dts/arm/da850-lego-ev3.dts
MFV r337167: 9442 decrease indirect block size of spacemaps
[FreeBSD/FreeBSD.git] / sys / gnu / dts / arm / da850-lego-ev3.dts
1 /*
2  * Device tree for LEGO MINDSTORMS EV3
3  *
4  * Copyright (C) 2017 David Lechner <david@lechnology.com>
5  *
6  * This program is free software; you can redistribute  it and/or modify it
7  * under  the terms of  the GNU General  Public License as published by the
8  * Free Software Foundation, version 2.
9  */
10
11 /dts-v1/;
12 #include <dt-bindings/gpio/gpio.h>
13 #include <dt-bindings/input/linux-event-codes.h>
14 #include <dt-bindings/pwm/pwm.h>
15
16 #include "da850.dtsi"
17
18 / {
19         compatible = "lego,ev3", "ti,da850";
20         model = "LEGO MINDSTORMS EV3";
21
22         aliases {
23                 serial1 = &serial1;
24         };
25
26         memory@c0000000 {
27                 device_type = "memory";
28                 reg = <0xc0000000 0x04000000>;
29         };
30
31         /*
32          * The buttons on the EV3 are mapped to keyboard keys.
33          */
34         gpio_keys {
35                 compatible = "gpio-keys";
36                 #address-cells = <1>;
37                 #size-cells = <0>;
38                 label = "EV3 Brick Buttons";
39                 pinctrl-names = "default";
40                 pinctrl-0 = <&button_pins>, <&button_bias>;
41
42                 center {
43                         label = "Center";
44                         linux,code = <KEY_ENTER>;
45                         gpios = <&gpio 29 GPIO_ACTIVE_HIGH>;
46                 };
47
48                 left {
49                         label = "Left";
50                         linux,code = <KEY_LEFT>;
51                         gpios = <&gpio 102 GPIO_ACTIVE_HIGH>;
52                 };
53
54                 back {
55                         label = "Back";
56                         linux,code = <KEY_BACKSPACE>;
57                         gpios = <&gpio 106 GPIO_ACTIVE_HIGH>;
58                 };
59
60                 right {
61                         label = "Right";
62                         linux,code = <KEY_RIGHT>;
63                         gpios = <&gpio 124 GPIO_ACTIVE_HIGH>;
64                 };
65
66                 down {
67                         label = "Down";
68                         linux,code = <KEY_DOWN>;
69                         gpios = <&gpio 126 GPIO_ACTIVE_HIGH>;
70                 };
71
72                 up {
73                         label = "Up";
74                         linux,code = <KEY_UP>;
75                         gpios = <&gpio 127 GPIO_ACTIVE_HIGH>;
76                 };
77         };
78
79         /*
80          * The EV3 has two built-in bi-color LEDs behind the buttons.
81          */
82         leds {
83                 compatible = "gpio-leds";
84                 pinctrl-names = "default";
85                 pinctrl-0 = <&led_pins>;
86
87                 left_green {
88                         label = "led0:green:brick-status";
89                         /* GP6[13] */
90                         gpios = <&gpio 103 GPIO_ACTIVE_HIGH>;
91                         linux,default-trigger = "default-on";
92                 };
93
94                 right_red {
95                         label = "led1:red:brick-status";
96                         /* GP6[7] */
97                         gpios = <&gpio 108 GPIO_ACTIVE_HIGH>;
98                         linux,default-trigger = "default-on";
99                 };
100
101                 left_red {
102                         label = "led0:red:brick-status";
103                         /* GP6[12] */
104                         gpios = <&gpio 109 GPIO_ACTIVE_HIGH>;
105                         linux,default-trigger = "default-on";
106                 };
107
108                 right_green {
109                         label = "led1:green:brick-status";
110                         /* GP6[14] */
111                         gpios = <&gpio 110 GPIO_ACTIVE_HIGH>;
112                         linux,default-trigger = "default-on";
113                 };
114         };
115
116         /*
117          * The EV3 is powered down by turning off the main 5V supply.
118          */
119         gpio-poweroff {
120                 compatible = "gpio-poweroff";
121                 gpios = <&gpio 107 GPIO_ACTIVE_LOW>;
122                 pinctrl-names = "default";
123                 pinctrl-0 = <&system_power_pin>;
124         };
125
126         sound {
127                 compatible = "pwm-beeper";
128                 pinctrl-names = "default";
129                 pinctrl-0 = <&ehrpwm0b_pins>;
130                 pwms = <&ehrpwm0 1 1000000 0>;
131                 amp-supply = <&amp>;
132         };
133
134         /*
135          * This is a 5V current limiting regulator that is shared by USB,
136          * the sensor (input) ports, the motor (output) ports and the A/DC.
137          */
138         vcc5v: regulator1 {
139                 pinctrl-names = "default";
140                 pinctrl-0 = <&vcc5v_pins>;
141                 compatible = "regulator-fixed";
142                 regulator-name = "vcc5v";
143                 regulator-min-microvolt = <5000000>;
144                 regulator-max-microvolt = <5000000>;
145                 gpio = <&gpio 101 0>;
146                 over-current-gpios = <&gpio 99 GPIO_ACTIVE_LOW>;
147                 enable-active-high;
148                 regulator-boot-on;
149         };
150
151         /*
152          * This is a simple voltage divider on VCC5V to provide a 2.5V
153          * reference signal to the ADC.
154          */
155         adc_ref: regulator2 {
156                 compatible = "regulator-fixed";
157                 regulator-name = "adc ref";
158                 regulator-min-microvolt = <2500000>;
159                 regulator-max-microvolt = <2500000>;
160                 regulator-boot-on;
161                 vin-supply = <&vcc5v>;
162         };
163
164         /*
165          * This is the amplifier for the speaker.
166          */
167         amp: regulator3 {
168                 pinctrl-names = "default";
169                 pinctrl-0 = <&amp_pins>;
170                 compatible = "regulator-fixed";
171                 regulator-name = "amp";
172                 gpio = <&gpio 111 GPIO_ACTIVE_HIGH>;
173                 enable-active-high;
174         };
175
176         /*
177          * The EV3 can use 6-AA batteries or a rechargeable Li-ion battery pack.
178          */
179         battery {
180                 pinctrl-names = "default";
181                 pinctrl-0 = <&battery_pins>;
182                 compatible = "lego,ev3-battery";
183                 io-channels = <&adc 4>, <&adc 3>;
184                 io-channel-names = "voltage", "current";
185                 rechargeable-gpios = <&gpio 136 GPIO_ACTIVE_LOW>;
186         };
187
188         /* ARM local RAM */
189         memory@ffff0000 {
190                 compatible = "syscon", "simple-mfd";
191                 reg = <0xffff0000 0x2000>; /* 8k */
192
193                 /*
194                  * The I2C bootloader looks for this magic value to either
195                  * boot normally or boot into a firmware update mode.
196                  */
197                 reboot-mode {
198                         compatible = "syscon-reboot-mode";
199                         offset = <0x1ffc>;
200                         mode-normal = <0x00000000>;
201                         mode-loader = <0x5555aaaa>;
202                 };
203         };
204 };
205
206 &pmx_core {
207         status = "okay";
208
209         mmc0_cd_pin: pinmux_mmc0_cd {
210                 pinctrl-single,bits = <
211                         /* GP5[14] */
212                         0x2C 0x00000080 0x000000f0
213                 >;
214         };
215
216         button_pins: pinmux_button_pins {
217                 pinctrl-single,bits = <
218                         /* GP1[13] */
219                         0x8 0x00000800 0x00000f00
220                         /* GP6[10] */
221                         0x34 0x00800000 0x00f00000
222                         /* GP6[6] */
223                         0x38 0x00000080 0x000000f0
224                         /* GP7[12], GP7[14], GP7[15] */
225                         0x40 0x00808800 0x00f0ff00
226                 >;
227         };
228
229         led_pins: pinmux_led_pins {
230                 pinctrl-single,bits = <
231                         /* GP6[12], GP6[13], GP6[14] */
232                         0x34 0x00008880 0x0000fff0
233                         /* GP6[7] */
234                         0x38 0x00000008 0x0000000f
235                 >;
236         };
237
238         system_power_pin: pinmux_system_power {
239                 pinctrl-single,bits = <
240                         /* GP6[11] */
241                         0x34 0x00080000 0x000f0000
242                 >;
243         };
244
245         vcc5v_pins: pinmux_vcc5v {
246                 pinctrl-single,bits = <
247                         /* GP6[5] */
248                         0x40 0x00000080 0x000000f0
249                         /* GP6[3] */
250                         0x4c 0x00008000 0x0000f000
251                 >;
252         };
253
254         amp_pins: pinmux_amp_pins {
255                 pinctrl-single,bits = <
256                         /* GP6[15] */
257                         0x34 0x00000008 0x0000000f
258                 >;
259         };
260
261         battery_pins: pinmux_battery_pins {
262                 pinctrl-single,bits = <
263                         /* GP0[6] */
264                         0x04 0x00000080 0x000000f0
265                         /* GP8[8] */
266                         0x4c 0x00000080 0x000000f0
267                 >;
268         };
269
270         ev3_lcd_pins: pinmux_lcd {
271                 pinctrl-single,bits = <
272                         /* SIMO, GP2[11], GP2[12], CLK */
273                         0x14 0x00188100 0x00ffff00
274                         /* GP5[0] */
275                         0x30 0x80000000 0xf0000000
276                 >;
277         };
278 };
279
280 &pinconf {
281         status = "okay";
282
283         /* Buttons have external pulldown resistors */
284         button_bias: button-bias-groups {
285                 disable {
286                         groups = "cp5", "cp24", "cp25", "cp28";
287                         bias-disable;
288                 };
289         };
290 };
291
292 /* Input port 1 */
293 &serial1 {
294         status = "okay";
295         pinctrl-names = "default";
296         pinctrl-0 = <&serial1_rxtx_pins>;
297 };
298
299 &rtc0 {
300         status = "okay";
301 };
302
303 &i2c0 {
304         status = "okay";
305         clock-frequency = <400000>;
306         pinctrl-names = "default";
307         pinctrl-0 = <&i2c0_pins>;
308
309         /*
310          * EEPROM contains the first stage bootloader, HW ID and Bluetooth MAC.
311          */
312         eeprom@50 {
313                 compatible = "microchip,24c128", "atmel,24c128";
314                 pagesize = <64>;
315                 read-only;
316                 reg = <0x50>;
317         };
318 };
319
320 &wdt {
321         status = "okay";
322 };
323
324 &mmc0 {
325         status = "okay";
326         max-frequency = <50000000>;
327         bus-width = <4>;
328         cd-gpios = <&gpio 94 GPIO_ACTIVE_LOW>;
329         pinctrl-names = "default";
330         pinctrl-0 = <&mmc0_pins>, <&mmc0_cd_pin>;
331 };
332
333 &spi0 {
334         status = "okay";
335         pinctrl-names = "default";
336         pinctrl-0 = <&spi0_pins>, <&spi0_cs0_pin>, <&spi0_cs3_pin>;
337
338         flash@0 {
339                 compatible = "n25q128a13", "jedec,spi-nor";
340                 reg = <0>;
341                 spi-max-frequency = <50000000>;
342                 ti,spi-wdelay = <8>;
343
344                 /* Partitions are based on the official firmware from LEGO */
345                 partitions {
346                         compatible = "fixed-partitions";
347                         #address-cells = <1>;
348                         #size-cells = <1>;
349
350                         partition@0 {
351                                 label = "U-Boot";
352                                 reg = <0 0x40000>;
353                         };
354
355                         partition@40000 {
356                                 label = "U-Boot Env";
357                                 reg = <0x40000 0x10000>;
358                         };
359
360                         partition@50000 {
361                                 label = "Kernel";
362                                 reg = <0x50000 0x200000>;
363                         };
364
365                         partition@250000 {
366                                 label = "Filesystem";
367                                 reg = <0x250000 0xa50000>;
368                         };
369
370                         partition@cb0000 {
371                                 label = "Storage";
372                                 reg = <0xcb0000 0x2f0000>;
373                         };
374                 };
375         };
376
377         adc: adc@3 {
378                 compatible = "ti,ads7957";
379                 reg = <3>;
380                 #io-channel-cells = <1>;
381                 spi-max-frequency = <10000000>;
382                 vref-supply = <&adc_ref>;
383         };
384 };
385
386 &spi1 {
387         status = "okay";
388         pinctrl-0 = <&ev3_lcd_pins>;
389         pinctrl-names = "default";
390         cs-gpios = <&gpio 44 GPIO_ACTIVE_LOW>;
391
392         display@0{
393                 compatible = "lego,ev3-lcd";
394                 reg = <0>;
395                 spi-max-frequency = <10000000>;
396                 a0-gpios = <&gpio 43 GPIO_ACTIVE_HIGH>;
397                 reset-gpios = <&gpio 80 GPIO_ACTIVE_HIGH>;
398         };
399 };
400
401 &ehrpwm0 {
402         status = "okay";
403 };
404
405 &gpio {
406         status = "okay";
407
408         /* Don't pull down battery voltage adc io channel */
409         batt_volt_en {
410                 gpio-hog;
411                 gpios = <6 GPIO_ACTIVE_HIGH>;
412                 output-high;
413         };
414 };
415
416 &usb_phy {
417         status = "okay";
418 };
419
420 &usb0 {
421         status = "okay";
422 };
423
424 &usb1 {
425         status = "okay";
426         vbus-supply = <&vcc5v>;
427 };