Merge tag 'for-linus-5.3-2' of git://github.com/cminyard/linux-ipmi
[sfrench/cifs-2.6.git] / arch / arm / boot / dts / da850-lego-ev3.dts
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Device tree for LEGO MINDSTORMS EV3
4  *
5  * Copyright (C) 2017 David Lechner <david@lechnology.com>
6  */
7
8 /dts-v1/;
9 #include <dt-bindings/gpio/gpio.h>
10 #include <dt-bindings/input/linux-event-codes.h>
11 #include <dt-bindings/pwm/pwm.h>
12
13 #include "da850.dtsi"
14
15 / {
16         compatible = "lego,ev3", "ti,da850";
17         model = "LEGO MINDSTORMS EV3";
18
19         aliases {
20                 serial1 = &serial1;
21         };
22
23         memory@c0000000 {
24                 device_type = "memory";
25                 reg = <0xc0000000 0x04000000>;
26         };
27
28         /*
29          * The buttons on the EV3 are mapped to keyboard keys.
30          */
31         gpio_keys {
32                 compatible = "gpio-keys";
33                 label = "EV3 Brick Buttons";
34                 pinctrl-names = "default";
35                 pinctrl-0 = <&button_bias>;
36
37                 center {
38                         label = "Center";
39                         linux,code = <KEY_ENTER>;
40                         gpios = <&gpio 29 GPIO_ACTIVE_HIGH>;
41                 };
42
43                 left {
44                         label = "Left";
45                         linux,code = <KEY_LEFT>;
46                         gpios = <&gpio 102 GPIO_ACTIVE_HIGH>;
47                 };
48
49                 back {
50                         label = "Back";
51                         linux,code = <KEY_BACKSPACE>;
52                         gpios = <&gpio 106 GPIO_ACTIVE_HIGH>;
53                 };
54
55                 right {
56                         label = "Right";
57                         linux,code = <KEY_RIGHT>;
58                         gpios = <&gpio 124 GPIO_ACTIVE_HIGH>;
59                 };
60
61                 down {
62                         label = "Down";
63                         linux,code = <KEY_DOWN>;
64                         gpios = <&gpio 126 GPIO_ACTIVE_HIGH>;
65                 };
66
67                 up {
68                         label = "Up";
69                         linux,code = <KEY_UP>;
70                         gpios = <&gpio 127 GPIO_ACTIVE_HIGH>;
71                 };
72         };
73
74         /*
75          * The EV3 has two built-in bi-color LEDs behind the buttons.
76          */
77         leds {
78                 compatible = "gpio-leds";
79
80                 left_green {
81                         label = "led0:green:brick-status";
82                         /* GP6[13] */
83                         gpios = <&gpio 103 GPIO_ACTIVE_HIGH>;
84                         linux,default-trigger = "default-on";
85                 };
86
87                 right_red {
88                         label = "led1:red:brick-status";
89                         /* GP6[7] */
90                         gpios = <&gpio 108 GPIO_ACTIVE_HIGH>;
91                         linux,default-trigger = "default-on";
92                 };
93
94                 left_red {
95                         label = "led0:red:brick-status";
96                         /* GP6[12] */
97                         gpios = <&gpio 109 GPIO_ACTIVE_HIGH>;
98                         linux,default-trigger = "default-on";
99                 };
100
101                 right_green {
102                         label = "led1:green:brick-status";
103                         /* GP6[14] */
104                         gpios = <&gpio 110 GPIO_ACTIVE_HIGH>;
105                         linux,default-trigger = "default-on";
106                 };
107         };
108
109         /*
110          * The EV3 is powered down by turning off the main 5V supply.
111          */
112         gpio-poweroff {
113                 compatible = "gpio-poweroff";
114                 gpios = <&gpio 107 GPIO_ACTIVE_LOW>;
115         };
116
117         sound {
118                 compatible = "pwm-beeper";
119                 pinctrl-names = "default";
120                 pinctrl-0 = <&ehrpwm0b_pins>;
121                 pwms = <&ehrpwm0 1 1000000 0>;
122                 amp-supply = <&amp>;
123         };
124
125         cvdd: regulator0 {
126                 compatible = "regulator-fixed";
127                 regulator-name = "cvdd";
128                 regulator-min-microvolt = <1200000>;
129                 regulator-max-microvolt = <1200000>;
130                 regulator-always-on;
131                 regulator-boot-on;
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                 compatible = "regulator-fixed";
140                 regulator-name = "vcc5v";
141                 regulator-min-microvolt = <5000000>;
142                 regulator-max-microvolt = <5000000>;
143                 gpio = <&gpio 101 0>;
144                 over-current-gpios = <&gpio 99 GPIO_ACTIVE_LOW>;
145                 enable-active-high;
146                 regulator-boot-on;
147         };
148
149         /*
150          * This is a simple voltage divider on VCC5V to provide a 2.5V
151          * reference signal to the ADC.
152          */
153         adc_ref: regulator2 {
154                 compatible = "regulator-fixed";
155                 regulator-name = "adc ref";
156                 regulator-min-microvolt = <2500000>;
157                 regulator-max-microvolt = <2500000>;
158                 regulator-boot-on;
159                 vin-supply = <&vcc5v>;
160         };
161
162         /*
163          * This is the amplifier for the speaker.
164          */
165         amp: regulator3 {
166                 compatible = "regulator-fixed";
167                 regulator-name = "amp";
168                 gpio = <&gpio 111 GPIO_ACTIVE_HIGH>;
169                 enable-active-high;
170         };
171
172         /*
173          * The EV3 can use 6-AA batteries or a rechargeable Li-ion battery pack.
174          */
175         battery {
176                 compatible = "lego,ev3-battery";
177                 io-channels = <&adc 4>, <&adc 3>;
178                 io-channel-names = "voltage", "current";
179                 rechargeable-gpios = <&gpio 136 GPIO_ACTIVE_LOW>;
180         };
181
182         bt_slow_clk: bt-clock {
183                 pinctrl-names = "default";
184                 pinctrl-0 = <&ecap2_pins>, <&bt_clock_bias>;
185                 compatible = "pwm-clock";
186                 #clock-cells = <0>;
187                 clock-frequency = <32768>;
188                 pwms = <&ecap2 0 30518 0>;
189         };
190
191         /* ARM local RAM */
192         memory@ffff0000 {
193                 compatible = "syscon", "simple-mfd";
194                 reg = <0xffff0000 0x2000>; /* 8k */
195
196                 /*
197                  * The I2C bootloader looks for this magic value to either
198                  * boot normally or boot into a firmware update mode.
199                  */
200                 reboot-mode {
201                         compatible = "syscon-reboot-mode";
202                         offset = <0x1ffc>;
203                         mode-normal = <0x00000000>;
204                         mode-loader = <0x5555aaaa>;
205                 };
206         };
207 };
208
209 &ref_clk {
210         clock-frequency = <24000000>;
211 };
212
213 &cpu {
214         cpu-supply = <&cvdd>;
215 };
216
217 /* since we have a fixed regulator, we can't run at these points */
218 &opp_100 {
219         status = "disabled";
220 };
221
222 &opp_200 {
223         status = "disabled";
224 };
225
226 /*
227  * The SoC is actually the 456MHz version, but because of the fixed regulator
228  * This is the fastest we can go.
229  */
230 &opp_375 {
231         status = "okay";
232 };
233
234 &pmx_core {
235         status = "okay";
236
237         ev3_lcd_pins: pinmux_lcd {
238                 pinctrl-single,bits = <
239                         /* SIMO, CLK */
240                         0x14 0x00100100 0x00f00f00
241                 >;
242         };
243 };
244
245 &pinconf {
246         status = "okay";
247
248         /* Buttons have external pulldown resistors */
249         button_bias: button-bias-groups {
250                 disable {
251                         groups = "cp5", "cp24", "cp25", "cp28";
252                         bias-disable;
253                 };
254         };
255
256         bt_clock_bias: bt-clock-bias-groups {
257                 disable {
258                         groups = "cp2";
259                         bias-disable;
260                 };
261         };
262
263         bt_pic_bias: bt-pic-bias-groups {
264                 disable {
265                         groups = "cp20";
266                         bias-disable;
267                 };
268         };
269 };
270
271 /* Input port 1 */
272 &serial1 {
273         status = "okay";
274         pinctrl-names = "default";
275         pinctrl-0 = <&serial1_rxtx_pins>;
276 };
277
278 &serial2 {
279         pinctrl-names = "default";
280         pinctrl-0 = <&serial2_rxtx_pins>, <&serial2_rtscts_pins>, <&bt_pic_bias>;
281         status = "okay";
282
283         bluetooth {
284                 compatible = "ti,cc2560";
285                 clocks = <&bt_slow_clk>;
286                 clock-names = "ext_clock";
287                 enable-gpios = <&gpio 73 GPIO_ACTIVE_HIGH>;
288                 max-speed = <2000000>;
289                 nvmem-cells = <&bdaddr>;
290                 nvmem-cell-names = "bd-address";
291         };
292 };
293
294 &rtc0 {
295         status = "okay";
296 };
297
298 &i2c0 {
299         status = "okay";
300         clock-frequency = <400000>;
301         pinctrl-names = "default";
302         pinctrl-0 = <&i2c0_pins>;
303
304         /*
305          * EEPROM contains the first stage bootloader, HW ID and Bluetooth MAC.
306          */
307         eeprom@50 {
308                 compatible = "microchip,24c128", "atmel,24c128";
309                 pagesize = <64>;
310                 read-only;
311                 reg = <0x50>;
312                 #address-cells = <1>;
313                 #size-cells = <1>;
314
315                 bdaddr: bdaddr@3f06 {
316                         reg = <0x3f06 0x06>;
317                 };
318         };
319 };
320
321 &wdt {
322         status = "okay";
323 };
324
325 &mmc0 {
326         status = "okay";
327         max-frequency = <50000000>;
328         bus-width = <4>;
329         cd-gpios = <&gpio 94 GPIO_ACTIVE_LOW>;
330         pinctrl-names = "default";
331         pinctrl-0 = <&mmc0_pins>;
332 };
333
334 &spi0 {
335         status = "okay";
336         pinctrl-names = "default";
337         pinctrl-0 = <&spi0_pins>, <&spi0_cs0_pin>, <&spi0_cs3_pin>;
338
339         flash@0 {
340                 compatible = "n25q128a13", "jedec,spi-nor";
341                 reg = <0>;
342                 spi-max-frequency = <50000000>;
343                 ti,spi-wdelay = <8>;
344
345                 /* Partitions are based on the official firmware from LEGO */
346                 partitions {
347                         compatible = "fixed-partitions";
348                         #address-cells = <1>;
349                         #size-cells = <1>;
350
351                         partition@0 {
352                                 label = "U-Boot";
353                                 reg = <0 0x40000>;
354                         };
355
356                         partition@40000 {
357                                 label = "U-Boot Env";
358                                 reg = <0x40000 0x10000>;
359                         };
360
361                         partition@50000 {
362                                 label = "Kernel";
363                                 reg = <0x50000 0x200000>;
364                         };
365
366                         partition@250000 {
367                                 label = "Filesystem";
368                                 reg = <0x250000 0xa50000>;
369                         };
370
371                         partition@cb0000 {
372                                 label = "Storage";
373                                 reg = <0xcb0000 0x2f0000>;
374                         };
375                 };
376         };
377
378         adc: adc@3 {
379                 compatible = "ti,ads7957";
380                 reg = <3>;
381                 #io-channel-cells = <1>;
382                 spi-max-frequency = <1000000>;
383                 ti,spi-wdelay = <63>;
384                 vref-supply = <&adc_ref>;
385         };
386 };
387
388 &spi1 {
389         status = "okay";
390         pinctrl-0 = <&ev3_lcd_pins>;
391         pinctrl-names = "default";
392         cs-gpios = <&gpio 44 GPIO_ACTIVE_LOW>;
393
394         display@0{
395                 compatible = "lego,ev3-lcd";
396                 reg = <0>;
397                 spi-max-frequency = <10000000>;
398                 a0-gpios = <&gpio 43 GPIO_ACTIVE_HIGH>;
399                 reset-gpios = <&gpio 80 GPIO_ACTIVE_HIGH>;
400         };
401 };
402
403 &ecap2 {
404         status = "okay";
405 };
406
407 &ehrpwm0 {
408         status = "okay";
409 };
410
411 &gpio {
412         status = "okay";
413
414         /* Don't pull down battery voltage adc io channel */
415         batt_volt_en {
416                 gpio-hog;
417                 gpios = <6 GPIO_ACTIVE_HIGH>;
418                 output-high;
419         };
420
421         /* Don't impede Bluetooth clock signal */
422         bt_clock_en {
423                 gpio-hog;
424                 gpios = <5 GPIO_ACTIVE_HIGH>;
425                 input;
426         };
427
428         /*
429          * There is a PIC microcontroller for interfacing with an Apple MFi
430          * chip. This interferes with normal Bluetooth operation, so we need
431          * to make sure it is turned off. Note: The publicly available
432          * schematics from LEGO don't show that these pins are connected to
433          * anything, but they are present in the source code from LEGO.
434          */
435
436         bt_pic_en {
437                 gpio-hog;
438                 gpios = <51 GPIO_ACTIVE_HIGH>;
439                 output-low;
440         };
441
442         bt_pic_rst {
443                 gpio-hog;
444                 gpios = <78 GPIO_ACTIVE_HIGH>;
445                 output-high;
446         };
447
448         bt_pic_cts {
449                 gpio-hog;
450                 gpios = <87 GPIO_ACTIVE_HIGH>;
451                 input;
452         };
453 };
454
455 &usb_phy {
456         status = "okay";
457 };
458
459 &usb0 {
460         status = "okay";
461 };
462
463 &usb1 {
464         status = "okay";
465         vbus-supply = <&vcc5v>;
466 };