arm: dts: bcm2711-rpi-4-b: Adds buttons for speaker profile
[platform/kernel/linux-rpi.git] / arch / arm / boot / dts / bcm2711-rpi-4-b.dts
1 // SPDX-License-Identifier: GPL-2.0
2 /dts-v1/;
3 #include "bcm2711.dtsi"
4 #include "bcm2711-rpi.dtsi"
5 //#include "bcm283x-rpi-usb-peripheral.dtsi"
6 #include <dt-bindings/input/input.h>
7
8 / {
9         compatible = "raspberrypi,4-model-b", "brcm,bcm2711";
10         model = "Raspberry Pi 4 Model B";
11
12         chosen {
13                 /* 8250 auxiliary UART instead of pl011 */
14                 stdout-path = "serial1:115200n8";
15         };
16
17         gpio-keys {
18                 compatible = "gpio-keys";
19
20                 key-volume-up {
21                         lable = "volume-up";
22                         linux,code = <KEY_VOLUMEUP>;
23                         gpios = <&gpio 16 GPIO_ACTIVE_LOW>;
24                 };
25
26                 key-volume-down {
27                         lable = "volume-down";
28                         linux,code = <KEY_VOLUMEDOWN>;
29                         gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
30                 };
31
32                 key-fastforward {
33                         lable = "fastforward";
34                         linux,code = <KEY_FASTFORWARD>;
35                         gpios = <&gpio 6 GPIO_ACTIVE_LOW>;
36                 };
37
38                 key-rewind {
39                         lable = "rewind";
40                         linux,code = <KEY_REWIND>;
41                         gpios = <&gpio 12 GPIO_ACTIVE_LOW>;
42                 };
43
44                 key-playpause {
45                         lable = "playpause";
46                         linux,code = <KEY_PLAYPAUSE>;
47                         gpios = <&gpio 25 GPIO_ACTIVE_LOW>;
48                 };
49         };
50
51         leds {
52                 led-act {
53                         gpios = <&gpio 42 GPIO_ACTIVE_HIGH>;
54                 };
55
56                 led-pwr {
57                         label = "PWR";
58                         gpios = <&expgpio 2 GPIO_ACTIVE_LOW>;
59                         default-state = "keep";
60                         linux,default-trigger = "default-on";
61                 };
62         };
63
64         wifi_pwrseq: wifi-pwrseq {
65                 compatible = "mmc-pwrseq-simple";
66                 reset-gpios = <&expgpio 1 GPIO_ACTIVE_LOW>;
67         };
68
69         sd_io_1v8_reg: sd_io_1v8_reg {
70                 compatible = "regulator-gpio";
71                 regulator-name = "vdd-sd-io";
72                 regulator-min-microvolt = <1800000>;
73                 regulator-max-microvolt = <3300000>;
74                 regulator-boot-on;
75                 regulator-always-on;
76                 regulator-settling-time-us = <5000>;
77                 gpios = <&expgpio 4 GPIO_ACTIVE_HIGH>;
78                 states = <1800000 0x1>,
79                          <3300000 0x0>;
80                 status = "okay";
81         };
82
83         sd_vcc_reg: sd_vcc_reg {
84                 compatible = "regulator-fixed";
85                 regulator-name = "vcc-sd";
86                 regulator-min-microvolt = <3300000>;
87                 regulator-max-microvolt = <3300000>;
88                 regulator-boot-on;
89                 enable-active-high;
90                 gpio = <&expgpio 6 GPIO_ACTIVE_HIGH>;
91         };
92 };
93
94 &ddc0 {
95         status = "okay";
96 };
97
98 &ddc1 {
99         status = "okay";
100 };
101
102 &expgpio {
103         gpio-line-names = "BT_ON",
104                           "WL_ON",
105                           "PWR_LED_OFF",
106                           "GLOBAL_RESET",
107                           "VDD_SD_IO_SEL",
108                           "CAM_GPIO",
109                           "SD_PWR_ON",
110                           "SD_OC_N";
111 };
112
113 &gpio {
114         /*
115          * Parts taken from rpi_SCH_4b_4p0_reduced.pdf and
116          * the official GPU firmware DT blob.
117          *
118          * Legend:
119          * "FOO" = GPIO line named "FOO" on the schematic
120          * "FOO_N" = GPIO line named "FOO" on schematic, active low
121          */
122         gpio-line-names = "ID_SDA",
123                           "ID_SCL",
124                           "SDA1",
125                           "SCL1",
126                           "GPIO_GCLK",
127                           "GPIO5",
128                           "GPIO6",
129                           "SPI_CE1_N",
130                           "SPI_CE0_N",
131                           "SPI_MISO",
132                           "SPI_MOSI",
133                           "SPI_SCLK",
134                           "GPIO12",
135                           "GPIO13",
136                           /* Serial port */
137                           "TXD1",
138                           "RXD1",
139                           "GPIO16",
140                           "GPIO17",
141                           "GPIO18",
142                           "GPIO19",
143                           "GPIO20",
144                           "GPIO21",
145                           "GPIO22",
146                           "GPIO23",
147                           "GPIO24",
148                           "GPIO25",
149                           "GPIO26",
150                           "GPIO27",
151                           "RGMII_MDIO",
152                           "RGMIO_MDC",
153                           /* Used by BT module */
154                           "CTS0",
155                           "RTS0",
156                           "TXD0",
157                           "RXD0",
158                           /* Used by Wifi */
159                           "SD1_CLK",
160                           "SD1_CMD",
161                           "SD1_DATA0",
162                           "SD1_DATA1",
163                           "SD1_DATA2",
164                           "SD1_DATA3",
165                           /* Shared with SPI flash */
166                           "PWM0_MISO",
167                           "PWM1_MOSI",
168                           "STATUS_LED_G_CLK",
169                           "SPIFLASH_CE_N",
170                           "SDA0",
171                           "SCL0",
172                           "RGMII_RXCLK",
173                           "RGMII_RXCTL",
174                           "RGMII_RXD0",
175                           "RGMII_RXD1",
176                           "RGMII_RXD2",
177                           "RGMII_RXD3",
178                           "RGMII_TXCLK",
179                           "RGMII_TXCTL",
180                           "RGMII_TXD0",
181                           "RGMII_TXD1",
182                           "RGMII_TXD2",
183                           "RGMII_TXD3";
184 };
185
186 &hdmi0 {
187         status = "okay";
188 };
189
190 &hdmi1 {
191         status = "okay";
192 };
193
194 &pixelvalve0 {
195         status = "okay";
196 };
197
198 &pixelvalve1 {
199         status = "okay";
200 };
201
202 &pixelvalve2 {
203         status = "okay";
204 };
205
206 &pixelvalve4 {
207         status = "okay";
208 };
209
210 &pwm1 {
211         pinctrl-names = "default";
212         pinctrl-0 = <&pwm1_0_gpio40 &pwm1_1_gpio41>;
213         status = "okay";
214 };
215
216 /* SDHCI is used to control the SDIO for wireless */
217 &sdhci {
218         #address-cells = <1>;
219         #size-cells = <0>;
220         pinctrl-names = "default";
221         pinctrl-0 = <&emmc_gpio34>;
222         bus-width = <4>;
223         non-removable;
224         mmc-pwrseq = <&wifi_pwrseq>;
225         status = "okay";
226
227         brcmf: wifi@1 {
228                 reg = <1>;
229                 compatible = "brcm,bcm4329-fmac";
230         };
231 };
232
233 /* EMMC2 is used to drive the SD card */
234 &emmc2 {
235         vqmmc-supply = <&sd_io_1v8_reg>;
236         vmmc-supply = <&sd_vcc_reg>;
237         broken-cd;
238         non-removable;
239         status = "okay";
240 };
241
242 &genet {
243         phy-handle = <&phy1>;
244         phy-mode = "rgmii-rxid";
245         status = "okay";
246 };
247
248 &genet_mdio {
249         phy1: ethernet-phy@1 {
250                 /* No PHY interrupt */
251                 reg = <0x1>;
252         };
253 };
254
255 &pcie0 {
256         pci@0,0 {
257                 device_type = "pci";
258                 #address-cells = <3>;
259                 #size-cells = <2>;
260                 ranges;
261
262                 reg = <0 0 0 0 0>;
263
264                 usb@0,0 {
265                         reg = <0 0 0 0 0>;
266                         resets = <&reset RASPBERRYPI_FIRMWARE_RESET_ID_USB>;
267                 };
268         };
269 };
270
271 /* uart0 communicates with the BT module */
272 &uart0 {
273         pinctrl-names = "default";
274         pinctrl-0 = <&uart0_ctsrts_gpio30 &uart0_gpio32>;
275         uart-has-rtscts;
276         status = "okay";
277
278         bluetooth {
279                 compatible = "brcm,bcm43438-bt";
280                 max-speed = <2000000>;
281                 shutdown-gpios = <&expgpio 0 GPIO_ACTIVE_HIGH>;
282         };
283 };
284
285 /* uart1 is mapped to the pin header */
286 &uart1 {
287         pinctrl-names = "default";
288         pinctrl-0 = <&uart1_gpio14>;
289         status = "okay";
290 };
291
292 &vc4 {
293         status = "okay";
294 };
295
296 &vec {
297         status = "disabled";
298 };
299
300 // =============================================
301 // Downstream rpi- changes
302
303 #define BCM2711
304
305 #include "bcm270x.dtsi"
306 #include "bcm271x-rpi-bt.dtsi"
307
308 / {
309         soc {
310                 /delete-node/ pixelvalve@7e807000;
311                 /delete-node/ hdmi@7e902000;
312         };
313 };
314
315 #include "bcm2711-rpi-ds.dtsi"
316 #include "bcm283x-rpi-csi1-2lane.dtsi"
317 #include "bcm283x-rpi-i2c0mux_0_44.dtsi"
318
319 / {
320         chosen {
321                 bootargs = "coherent_pool=1M 8250.nr_uarts=1 snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1";
322         };
323
324         aliases {
325                 serial0 = &uart1;
326                 serial1 = &uart0;
327                 mmc0 = &emmc2;
328                 mmc1 = &mmcnr;
329                 mmc2 = &sdhost;
330                 i2c3 = &i2c3;
331                 i2c4 = &i2c4;
332                 i2c5 = &i2c5;
333                 i2c6 = &i2c6;
334                 i2c20 = &ddc0;
335                 i2c21 = &ddc1;
336                 spi3 = &spi3;
337                 spi4 = &spi4;
338                 spi5 = &spi5;
339                 spi6 = &spi6;
340                 /delete-property/ intc;
341         };
342
343         /delete-node/ wifi-pwrseq;
344 };
345
346 &mmcnr {
347         #address-cells = <1>;
348         #size-cells = <0>;
349         pinctrl-names = "default";
350         pinctrl-0 = <&sdio_pins>;
351         bus-width = <4>;
352         status = "okay";
353         brcmf: wifi@1 {
354                 reg = <1>;
355                 compatible = "brcm,bcm4329-fmac";
356                 brcm,feature-disable = <0x2000>; /* BIT[13] : sup-wpa */
357         };
358 };
359
360 &uart0 {
361         pinctrl-0 = <&uart0_pins &bt_pins &uart0_ctsrts_gpio30>;
362         status = "okay";
363 };
364
365 &uart1 {
366         pinctrl-0 = <&uart1_pins>;
367 };
368
369 &uart2 {
370         pinctrl-names = "default";
371         pinctrl-0 = <&uart2_pins>;
372         status = "okay";
373 };
374
375 &spi0 {
376         pinctrl-names = "default";
377         pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
378         cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
379         status = "okay";
380
381         spidev0: spidev@0{
382                 compatible = "spidev";
383                 reg = <0>;      /* CE0 */
384                 #address-cells = <1>;
385                 #size-cells = <0>;
386                 spi-max-frequency = <125000000>;
387         };
388
389         spidev1: spidev@1{
390                 compatible = "spidev";
391                 reg = <1>;      /* CE1 */
392                 #address-cells = <1>;
393                 #size-cells = <0>;
394                 spi-max-frequency = <125000000>;
395         };
396 };
397
398 &gpio {
399         spi0_pins: spi0_pins {
400                 brcm,pins = <9 10 11>;
401                 brcm,function = <BCM2835_FSEL_ALT0>;
402         };
403
404         spi0_cs_pins: spi0_cs_pins {
405                 brcm,pins = <8 7>;
406                 brcm,function = <BCM2835_FSEL_GPIO_OUT>;
407         };
408
409         spi3_pins: spi3_pins {
410                 brcm,pins = <1 2 3>;
411                 brcm,function = <BCM2835_FSEL_ALT3>;
412         };
413
414         spi3_cs_pins: spi3_cs_pins {
415                 brcm,pins = <0 24>;
416                 brcm,function = <BCM2835_FSEL_GPIO_OUT>;
417         };
418
419         spi4_pins: spi4_pins {
420                 brcm,pins = <5 6 7>;
421                 brcm,function = <BCM2835_FSEL_ALT3>;
422         };
423
424         spi4_cs_pins: spi4_cs_pins {
425                 brcm,pins = <4 25>;
426                 brcm,function = <BCM2835_FSEL_GPIO_OUT>;
427         };
428
429         spi5_pins: spi5_pins {
430                 brcm,pins = <13 14 15>;
431                 brcm,function = <BCM2835_FSEL_ALT3>;
432         };
433
434         spi5_cs_pins: spi5_cs_pins {
435                 brcm,pins = <12 26>;
436                 brcm,function = <BCM2835_FSEL_GPIO_OUT>;
437         };
438
439         spi6_pins: spi6_pins {
440                 brcm,pins = <19 20 21>;
441                 brcm,function = <BCM2835_FSEL_ALT3>;
442         };
443
444         spi6_cs_pins: spi6_cs_pins {
445                 brcm,pins = <18 27>;
446                 brcm,function = <BCM2835_FSEL_GPIO_OUT>;
447         };
448
449         i2c0_pins: i2c0 {
450                 brcm,pins = <0 1>;
451                 brcm,function = <BCM2835_FSEL_ALT0>;
452                 brcm,pull = <BCM2835_PUD_UP>;
453         };
454
455         i2c1_pins: i2c1 {
456                 brcm,pins = <2 3>;
457                 brcm,function = <BCM2835_FSEL_ALT0>;
458                 brcm,pull = <BCM2835_PUD_UP>;
459         };
460
461         i2c3_pins: i2c3 {
462                 brcm,pins = <4 5>;
463                 brcm,function = <BCM2835_FSEL_ALT5>;
464                 brcm,pull = <BCM2835_PUD_UP>;
465         };
466
467         i2c4_pins: i2c4 {
468                 brcm,pins = <8 9>;
469                 brcm,function = <BCM2835_FSEL_ALT5>;
470                 brcm,pull = <BCM2835_PUD_UP>;
471         };
472
473         i2c5_pins: i2c5 {
474                 brcm,pins = <12 13>;
475                 brcm,function = <BCM2835_FSEL_ALT5>;
476                 brcm,pull = <BCM2835_PUD_UP>;
477         };
478
479         i2c6_pins: i2c6 {
480                 brcm,pins = <22 23>;
481                 brcm,function = <BCM2835_FSEL_ALT5>;
482                 brcm,pull = <BCM2835_PUD_UP>;
483         };
484
485         i2s_pins: i2s {
486                 brcm,pins = <18 19 20 21>;
487                 brcm,function = <BCM2835_FSEL_ALT0>;
488         };
489
490         sdio_pins: sdio_pins {
491                 brcm,pins =     <34 35 36 37 38 39>;
492                 brcm,function = <BCM2835_FSEL_ALT3>; // alt3 = SD1
493                 brcm,pull =     <0 2 2 2 2 2>;
494         };
495
496         bt_pins: bt_pins {
497                 brcm,pins = "-"; // non-empty to keep btuart happy, //4 = 0
498                                  // to fool pinctrl
499                 brcm,function = <0>;
500                 brcm,pull = <2>;
501         };
502
503         uart0_pins: uart0_pins {
504                 brcm,pins = <32 33>;
505                 brcm,function = <BCM2835_FSEL_ALT3>;
506                 brcm,pull = <0 2>;
507         };
508
509         uart1_pins: uart1_pins {
510                 brcm,pins;
511                 brcm,function;
512                 brcm,pull;
513         };
514
515         uart2_pins: uart2_pins {
516                 brcm,pins = <0 1>;
517                 brcm,function = <BCM2835_FSEL_ALT4>;
518                 brcm,pull = <0 2>;
519         };
520
521         uart3_pins: uart3_pins {
522                 brcm,pins = <4 5>;
523                 brcm,function = <BCM2835_FSEL_ALT4>;
524                 brcm,pull = <0 2>;
525         };
526
527         uart4_pins: uart4_pins {
528                 brcm,pins = <8 9>;
529                 brcm,function = <BCM2835_FSEL_ALT4>;
530                 brcm,pull = <0 2>;
531         };
532
533         uart5_pins: uart5_pins {
534                 brcm,pins = <12 13>;
535                 brcm,function = <BCM2835_FSEL_ALT4>;
536                 brcm,pull = <0 2>;
537         };
538
539         /* Needs to describe gpio settings at config.txt */
540         key_volume_up: key_volume_up {
541                 brcm,pins = <16>;
542                 brcm,function = <1>; /* BCM2835_FSEL_GPIO_IN */
543                 brcm,pull = <2>; /* BCM2835_PUD_UP */
544         };
545
546         key_volume_down: key_volume_down {
547                 brcm,pins = <13>;
548                 brcm,function = <1>;
549                 brcm,pull = <2>;
550         };
551
552         key_fastforward: key_fastforward {
553                 brcm,pins = <6>;
554                 brcm,function = <1>;
555                 brcm,pull = <2>;
556         };
557
558         key_rewind: key_rewind {
559                 brcm,pins = <12>;
560                 brcm,function = <1>;
561                 brcm,pull = <2>;
562         };
563
564         key_playpause: key_playpause {
565                 brcm,pins = <25>;
566                 brcm,function = <1>;
567                 brcm,pull = <2>;
568         };
569 };
570
571 &i2c0if {
572         clock-frequency = <100000>;
573 };
574
575 &i2c1 {
576         pinctrl-names = "default";
577         pinctrl-0 = <&i2c1_pins>;
578         clock-frequency = <100000>;
579         status = "okay";
580
581         #address-cells = <1>;
582         #size-cells = <0>;
583
584         ac108_a: ac108@3b{
585                 compatible = "x-power,ac108_0";
586                 reg = <0x3b>;
587                 #sound-dai-cells = <0>;
588                 data-protocol = <0>;
589         };
590 };
591
592 &i2s {
593         pinctrl-names = "default";
594         pinctrl-0 = <&i2s_pins>;
595
596         #sound-dai-cells = <0>;
597         status = "okay";
598 };
599
600 &sound {
601         compatible = "seeed-voicecard";
602         seeed-voice-card,format = "dsp_a";
603         seeed-voice-card,name = "seeed-4mic-voicecard";
604         status = "okay";
605
606         seeed-voice-card,bitclock-master = <&codec_dai>;
607         seeed-voice-card,frame-master = <&codec_dai>;
608         seeed-voice-card,channels-playback-override = <4>;
609         seeed-voice-card,channels-capture-override  = <4>;
610
611         cpu_dai: seeed-voice-card,cpu {
612                 sound-dai = <&i2s>;
613                 dai-tdm-slot-num     = <2>;
614                 dai-tdm-slot-width   = <32>;
615                 dai-tdm-slot-tx-mask = <1 1 0 0>;
616                 dai-tdm-slot-rx-mask = <1 1 0 0>;
617         };
618         codec_dai: seeed-voice-card,codec {
619                 sound-dai = <&ac108_a>;
620                 system-clock-frequency = <24000000>;
621         };
622 };
623
624 // =============================================
625 // Board specific stuff here
626
627 &sdhost {
628         status = "disabled";
629 };
630
631 &phy1 {
632         led-modes = <0x00 0x08>; /* link/activity link */
633 };
634
635 &gpio {
636         audio_pins: audio_pins {
637                 brcm,pins = <40 41>;
638                 brcm,function = <4>;
639         };
640 };
641
642 &leds {
643         act_led: led-act {
644                 label = "led0";
645                 linux,default-trigger = "mmc0";
646                 gpios = <&gpio 42 GPIO_ACTIVE_HIGH>;
647         };
648
649         pwr_led: led-pwr {
650                 label = "led1";
651                 linux,default-trigger = "default-on";
652                 gpios = <&expgpio 2 GPIO_ACTIVE_LOW>;
653         };
654 };
655
656 &pwm1 {
657         status = "disabled";
658 };
659
660 &audio {
661         pinctrl-names = "default";
662         pinctrl-0 = <&audio_pins>;
663         status = "okay";
664 };
665
666 &cam1_reg {
667         gpio = <&expgpio 5 GPIO_ACTIVE_HIGH>;
668 };
669
670 cam0_reg: &cam_dummy_reg {
671 };
672
673 &cma {
674         size = <0x19000000>; /* 400MB (256 + 128 + 16) */
675 };
676
677 / {
678         __overrides__ {
679                 act_led_gpio = <&act_led>,"gpios:4";
680                 act_led_activelow = <&act_led>,"gpios:8";
681                 act_led_trigger = <&act_led>,"linux,default-trigger";
682
683                 pwr_led_gpio = <&pwr_led>,"gpios:4";
684                 pwr_led_activelow = <&pwr_led>,"gpios:8";
685                 pwr_led_trigger = <&pwr_led>,"linux,default-trigger";
686
687                 eth_led0 = <&phy1>,"led-modes:0";
688                 eth_led1 = <&phy1>,"led-modes:4";
689
690                 sd_poll_once = <&emmc2>, "non-removable?";
691                 spi_dma4 = <&spi0>, "dmas:0=", <&dma40>,
692                            <&spi0>, "dmas:8=", <&dma40>;
693         };
694 };