treewide: remove redundant IS_ERR() before error code check
[linux/fpc-iii.git] / arch / arm64 / boot / dts / amlogic / meson-sm1-sei610.dts
bloba8bb3fa9fec98e994ce2876b95e81e86b8369c02
1 // SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2 /*
3  * Copyright (c) 2019 BayLibre SAS. All rights reserved.
4  */
6 /dts-v1/;
8 #include "meson-sm1.dtsi"
9 #include <dt-bindings/gpio/gpio.h>
10 #include <dt-bindings/input/input.h>
11 #include <dt-bindings/gpio/meson-g12a-gpio.h>
12 #include <dt-bindings/sound/meson-g12a-tohdmitx.h>
14 / {
15         compatible = "seirobotics,sei610", "amlogic,sm1";
16         model = "SEI Robotics SEI610";
18         aliases {
19                 serial0 = &uart_AO;
20                 ethernet0 = &ethmac;
21         };
23         mono_dac: audio-codec-0 {
24                 compatible = "maxim,max98357a";
25                 #sound-dai-cells = <0>;
26                 sound-name-prefix = "U16";
27                 sdmode-gpios = <&gpio GPIOX_8 GPIO_ACTIVE_HIGH>;
28         };
30         dmics: audio-codec-1 {
31                 #sound-dai-cells = <0>;
32                 compatible = "dmic-codec";
33                 num-channels = <2>;
34                 wakeup-delay-ms = <50>;
35                 status = "okay";
36                 sound-name-prefix = "MIC";
37         };
39         chosen {
40                 stdout-path = "serial0:115200n8";
41         };
43         emmc_pwrseq: emmc-pwrseq {
44                 compatible = "mmc-pwrseq-emmc";
45                 reset-gpios = <&gpio BOOT_12 GPIO_ACTIVE_LOW>;
46         };
48         gpio-keys {
49                 compatible = "gpio-keys";
51                 key1 {
52                         label = "A";
53                         linux,code = <BTN_0>;
54                         gpios = <&gpio GPIOH_6 GPIO_ACTIVE_LOW>;
55                         interrupt-parent = <&gpio_intc>;
56                         interrupts = <34 IRQ_TYPE_EDGE_BOTH>;
57                 };
59                 key2 {
60                         label = "B";
61                         linux,code = <BTN_1>;
62                         gpios = <&gpio GPIOH_7 GPIO_ACTIVE_LOW>;
63                         interrupt-parent = <&gpio_intc>;
64                         interrupts = <35 IRQ_TYPE_EDGE_BOTH>;
65                 };
67                 key3 {
68                         label = "C";
69                         linux,code = <BTN_2>;
70                         gpios = <&gpio_ao GPIOAO_2 GPIO_ACTIVE_LOW>;
71                         interrupt-parent = <&gpio_intc>;
72                         interrupts = <2 IRQ_TYPE_EDGE_BOTH>;
73                 };
75                 mic_mute {
76                         label = "MicMute";
77                         linux,code = <SW_MUTE_DEVICE>;
78                         linux,input-type = <EV_SW>;
79                         gpios = <&gpio_ao GPIOE_2 GPIO_ACTIVE_LOW>;
80                         interrupt-parent = <&gpio_intc>;
81                         interrupts = <99 IRQ_TYPE_EDGE_BOTH>;
82                 };
84                 power_key {
85                         label = "PowerKey";
86                         linux,code = <KEY_POWER>;
87                         gpios = <&gpio_ao GPIOAO_3 GPIO_ACTIVE_LOW>;
88                         interrupt-parent = <&gpio_intc>;
89                         interrupts = <3 IRQ_TYPE_EDGE_BOTH>;
90                 };
91         };
93         hdmi-connector {
94                 compatible = "hdmi-connector";
95                 type = "a";
97                 port {
98                         hdmi_connector_in: endpoint {
99                                 remote-endpoint = <&hdmi_tx_tmds_out>;
100                         };
101                 };
102         };
104         leds {
105                 compatible = "gpio-leds";
107                 bluetooth {
108                         label = "sei610:blue:bt";
109                         gpios = <&gpio GPIOC_7 (GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN)>;
110                         default-state = "off";
111                 };
112         };
114         pwmleds {
115                 compatible = "pwm-leds";
117                 power {
118                         label = "sei610:red:power";
119                         pwms = <&pwm_AO_ab 0 30518 0>;
120                         max-brightness = <255>;
121                         linux,default-trigger = "default-on";
122                         active-low;
123                 };
124         };
126         memory@0 {
127                 device_type = "memory";
128                 reg = <0x0 0x0 0x0 0x40000000>;
129         };
131         ao_5v: regulator-ao_5v {
132                 compatible = "regulator-fixed";
133                 regulator-name = "AO_5V";
134                 regulator-min-microvolt = <5000000>;
135                 regulator-max-microvolt = <5000000>;
136                 vin-supply = <&dc_in>;
137                 regulator-always-on;
138         };
140         dc_in: regulator-dc_in {
141                 compatible = "regulator-fixed";
142                 regulator-name = "DC_IN";
143                 regulator-min-microvolt = <5000000>;
144                 regulator-max-microvolt = <5000000>;
145                 regulator-always-on;
146         };
148         emmc_1v8: regulator-emmc_1v8 {
149                 compatible = "regulator-fixed";
150                 regulator-name = "EMMC_1V8";
151                 regulator-min-microvolt = <1800000>;
152                 regulator-max-microvolt = <1800000>;
153                 vin-supply = <&vddao_3v3>;
154                 regulator-always-on;
155         };
157         vddao_3v3: regulator-vddao_3v3 {
158                 compatible = "regulator-fixed";
159                 regulator-name = "VDDAO_3V3";
160                 regulator-min-microvolt = <3300000>;
161                 regulator-max-microvolt = <3300000>;
162                 vin-supply = <&dc_in>;
163                 regulator-always-on;
164         };
166         /* Used by Tuner, RGB Led & IR Emitter LED array */
167         vddao_3v3_t: regulator-vddao_3v3_t {
168                 compatible = "regulator-fixed";
169                 regulator-name = "VDDAO_3V3_T";
170                 regulator-min-microvolt = <3300000>;
171                 regulator-max-microvolt = <3300000>;
172                 vin-supply = <&vddao_3v3>;
173                 gpio = <&gpio GPIOH_8 GPIO_OPEN_DRAIN>;
174                 enable-active-low;
175                 regulator-always-on;
176         };
178         vddcpu: regulator-vddcpu {
179                 /*
180                  * SY8120B1ABC DC/DC Regulator.
181                  */
182                 compatible = "pwm-regulator";
184                 regulator-name = "VDDCPU";
185                 regulator-min-microvolt = <690000>;
186                 regulator-max-microvolt = <1050000>;
188                 vin-supply = <&dc_in>;
190                 pwms = <&pwm_AO_cd 1 1500 0>;
191                 pwm-dutycycle-range = <100 0>;
193                 regulator-boot-on;
194                 regulator-always-on;
195         };
197         vddio_ao1v8: regulator-vddio_ao1v8 {
198                 compatible = "regulator-fixed";
199                 regulator-name = "VDDIO_AO1V8";
200                 regulator-min-microvolt = <1800000>;
201                 regulator-max-microvolt = <1800000>;
202                 vin-supply = <&vddao_3v3>;
203                 regulator-always-on;
204         };
206         reserved-memory {
207                 /* TEE Reserved Memory */
208                 bl32_reserved: bl32@5000000 {
209                         reg = <0x0 0x05300000 0x0 0x2000000>;
210                         no-map;
211                 };
212         };
214         sdio_pwrseq: sdio-pwrseq {
215                 compatible = "mmc-pwrseq-simple";
216                 reset-gpios = <&gpio GPIOX_6 GPIO_ACTIVE_LOW>;
217                 clocks = <&wifi32k>;
218                 clock-names = "ext_clock";
219         };
221         sound {
222                 compatible = "amlogic,axg-sound-card";
223                 model = "SM1-SEI610";
224                 audio-aux-devs = <&tdmout_a>, <&tdmout_b>,
225                                  <&tdmin_a>, <&tdmin_b>;
226                 audio-routing = "TDMOUT_A IN 0", "FRDDR_A OUT 0",
227                                 "TDMOUT_A IN 1", "FRDDR_B OUT 0",
228                                 "TDMOUT_A IN 2", "FRDDR_C OUT 0",
229                                 "TDM_A Playback", "TDMOUT_A OUT",
230                                 "TDMOUT_B IN 0", "FRDDR_A OUT 1",
231                                 "TDMOUT_B IN 1", "FRDDR_B OUT 1",
232                                 "TDMOUT_B IN 2", "FRDDR_C OUT 1",
233                                 "TDM_B Playback", "TDMOUT_B OUT",
234                                 "TODDR_A IN 4", "PDM Capture",
235                                 "TODDR_B IN 4", "PDM Capture",
236                                 "TODDR_C IN 4", "PDM Capture",
237                                 "TDMIN_A IN 0", "TDM_A Capture",
238                                 "TDMIN_A IN 3", "TDM_A Loopback",
239                                 "TDMIN_B IN 0", "TDM_A Capture",
240                                 "TDMIN_B IN 3", "TDM_A Loopback",
241                                 "TDMIN_A IN 1", "TDM_B Capture",
242                                 "TDMIN_A IN 4", "TDM_B Loopback",
243                                 "TDMIN_B IN 1", "TDM_B Capture",
244                                 "TDMIN_B IN 4", "TDM_B Loopback",
245                                 "TODDR_A IN 0", "TDMIN_A OUT",
246                                 "TODDR_B IN 0", "TDMIN_A OUT",
247                                 "TODDR_C IN 0", "TDMIN_A OUT",
248                                 "TODDR_A IN 1", "TDMIN_B OUT",
249                                 "TODDR_B IN 1", "TDMIN_B OUT",
250                                 "TODDR_C IN 1", "TDMIN_B OUT";
252                 assigned-clocks = <&clkc CLKID_MPLL2>,
253                                   <&clkc CLKID_MPLL0>,
254                                   <&clkc CLKID_MPLL1>;
255                 assigned-clock-parents = <0>, <0>, <0>;
256                 assigned-clock-rates = <294912000>,
257                                        <270950400>,
258                                        <393216000>;
259                 status = "okay";
261                 dai-link-0 {
262                         sound-dai = <&frddr_a>;
263                 };
265                 dai-link-1 {
266                         sound-dai = <&frddr_b>;
267                 };
269                 dai-link-2 {
270                         sound-dai = <&frddr_c>;
271                 };
273                 dai-link-3 {
274                         sound-dai = <&toddr_a>;
275                 };
277                 dai-link-4 {
278                         sound-dai = <&toddr_b>;
279                 };
281                 dai-link-5 {
282                         sound-dai = <&toddr_c>;
283                 };
285                 /* internal speaker interface */
286                 dai-link-6 {
287                         sound-dai = <&tdmif_a>;
288                         dai-format = "i2s";
289                         dai-tdm-slot-tx-mask-0 = <1 1>;
290                         mclk-fs = <256>;
292                         codec-0 {
293                                 sound-dai = <&mono_dac>;
294                         };
296                         codec-1 {
297                                 sound-dai = <&tohdmitx TOHDMITX_I2S_IN_A>;
298                         };
299                 };
301                 /* 8ch hdmi interface */
302                 dai-link-7 {
303                         sound-dai = <&tdmif_b>;
304                         dai-format = "i2s";
305                         dai-tdm-slot-tx-mask-0 = <1 1>;
306                         dai-tdm-slot-tx-mask-1 = <1 1>;
307                         dai-tdm-slot-tx-mask-2 = <1 1>;
308                         dai-tdm-slot-tx-mask-3 = <1 1>;
309                         mclk-fs = <256>;
311                         codec {
312                                 sound-dai = <&tohdmitx TOHDMITX_I2S_IN_B>;
313                         };
314                 };
316                 /* internal digital mics */
317                 dai-link-8 {
318                         sound-dai = <&pdm>;
320                         codec {
321                                 sound-dai = <&dmics>;
322                         };
323                 };
325                 /* hdmi glue */
326                 dai-link-9 {
327                         sound-dai = <&tohdmitx TOHDMITX_I2S_OUT>;
329                         codec {
330                                 sound-dai = <&hdmi_tx>;
331                         };
332                 };
333         };
335         wifi32k: wifi32k {
336                 compatible = "pwm-clock";
337                 #clock-cells = <0>;
338                 clock-frequency = <32768>;
339                 pwms = <&pwm_ef 0 30518 0>; /* PWM_E at 32.768KHz */
340         };
343 &arb {
344         status = "okay";
347 &cec_AO {
348         pinctrl-0 = <&cec_ao_a_h_pins>;
349         pinctrl-names = "default";
350         status = "disabled";
351         hdmi-phandle = <&hdmi_tx>;
354 &cecb_AO {
355         pinctrl-0 = <&cec_ao_b_h_pins>;
356         pinctrl-names = "default";
357         status = "okay";
358         hdmi-phandle = <&hdmi_tx>;
361 &clkc_audio {
362         status = "okay";
365 &cpu0 {
366         cpu-supply = <&vddcpu>;
367         operating-points-v2 = <&cpu_opp_table>;
368         clocks = <&clkc CLKID_CPU_CLK>;
369         clock-latency = <50000>;
372 &cpu1 {
373         cpu-supply = <&vddcpu>;
374         operating-points-v2 = <&cpu_opp_table>;
375         clocks = <&clkc CLKID_CPU1_CLK>;
376         clock-latency = <50000>;
379 &cpu2 {
380         cpu-supply = <&vddcpu>;
381         operating-points-v2 = <&cpu_opp_table>;
382         clocks = <&clkc CLKID_CPU2_CLK>;
383         clock-latency = <50000>;
386 &cpu3 {
387         cpu-supply = <&vddcpu>;
388         operating-points-v2 = <&cpu_opp_table>;
389         clocks = <&clkc CLKID_CPU3_CLK>;
390         clock-latency = <50000>;
393 &ethmac {
394         status = "okay";
395         phy-handle = <&internal_ephy>;
396         phy-mode = "rmii";
399 &frddr_a {
400         status = "okay";
403 &frddr_b {
404         status = "okay";
407 &frddr_c {
408         status = "okay";
411 &hdmi_tx {
412         status = "okay";
413         pinctrl-0 = <&hdmitx_hpd_pins>, <&hdmitx_ddc_pins>;
414         pinctrl-names = "default";
417 &hdmi_tx_tmds_port {
418         hdmi_tx_tmds_out: endpoint {
419                 remote-endpoint = <&hdmi_connector_in>;
420         };
423 &i2c3 {
424         status = "okay";
425         pinctrl-0 = <&i2c3_sda_a_pins>, <&i2c3_sck_a_pins>;
426         pinctrl-names = "default";
429 &ir {
430         status = "okay";
431         pinctrl-0 = <&remote_input_ao_pins>;
432         pinctrl-names = "default";
435 &pdm {
436         pinctrl-0 = <&pdm_din0_z_pins>, <&pdm_dclk_z_pins>;
437         pinctrl-names = "default";
438         status = "okay";
441 &pwm_AO_ab {
442         status = "okay";
443         pinctrl-0 = <&pwm_ao_a_pins>;
444         pinctrl-names = "default";
445         clocks = <&xtal>;
446         clock-names = "clkin0";
449 &pwm_AO_cd {
450         pinctrl-0 = <&pwm_ao_d_e_pins>;
451         pinctrl-names = "default";
452         clocks = <&xtal>;
453         clock-names = "clkin1";
454         status = "okay";
457 &pwm_ef {
458         status = "okay";
459         pinctrl-0 = <&pwm_e_pins>;
460         pinctrl-names = "default";
461         clocks = <&xtal>;
462         clock-names = "clkin0";
465 &saradc {
466         status = "okay";
467         vref-supply = <&vddio_ao1v8>;
470 /* SDIO */
471 &sd_emmc_a {
472         status = "okay";
473         pinctrl-0 = <&sdio_pins>;
474         pinctrl-1 = <&sdio_clk_gate_pins>;
475         pinctrl-names = "default", "clk-gate";
476         #address-cells = <1>;
477         #size-cells = <0>;
479         bus-width = <4>;
480         cap-sd-highspeed;
481         sd-uhs-sdr50;
482         max-frequency = <100000000>;
484         non-removable;
485         disable-wp;
487         /* WiFi firmware requires power to be kept while in suspend */
488         keep-power-in-suspend;
490         mmc-pwrseq = <&sdio_pwrseq>;
492         vmmc-supply = <&vddao_3v3>;
493         vqmmc-supply = <&vddio_ao1v8>;
495         brcmf: wifi@1 {
496                 reg = <1>;
497                 compatible = "brcm,bcm4329-fmac";
498         };
501 /* SD card */
502 &sd_emmc_b {
503         status = "okay";
504         pinctrl-0 = <&sdcard_c_pins>;
505         pinctrl-1 = <&sdcard_clk_gate_c_pins>;
506         pinctrl-names = "default", "clk-gate";
508         bus-width = <4>;
509         cap-sd-highspeed;
510         max-frequency = <50000000>;
511         disable-wp;
513         cd-gpios = <&gpio GPIOC_6 GPIO_ACTIVE_LOW>;
514         vmmc-supply = <&vddao_3v3>;
515         vqmmc-supply = <&vddao_3v3>;
518 /* eMMC */
519 &sd_emmc_c {
520         status = "okay";
521         pinctrl-0 = <&emmc_pins>, <&emmc_ds_pins>;
522         pinctrl-1 = <&emmc_clk_gate_pins>;
523         pinctrl-names = "default", "clk-gate";
525         bus-width = <8>;
526         cap-mmc-highspeed;
527         mmc-ddr-1_8v;
528         mmc-hs200-1_8v;
529         max-frequency = <200000000>;
530         non-removable;
531         disable-wp;
533         mmc-pwrseq = <&emmc_pwrseq>;
534         vmmc-supply = <&vddao_3v3>;
535         vqmmc-supply = <&emmc_1v8>;
538 &tdmif_a {
539         pinctrl-0 = <&tdm_a_dout0_pins>, <&tdm_a_fs_pins>, <&tdm_a_sclk_pins>;
540         pinctrl-names = "default";
541         status = "okay";
543         assigned-clocks = <&clkc_audio AUD_CLKID_TDM_SCLK_PAD0>,
544                           <&clkc_audio AUD_CLKID_TDM_LRCLK_PAD0>;
545         assigned-clock-parents = <&clkc_audio AUD_CLKID_MST_A_SCLK>,
546                                  <&clkc_audio AUD_CLKID_MST_A_LRCLK>;
547         assigned-clock-rates = <0>, <0>;
550 &tdmif_b {
551         status = "okay";
554 &tdmin_a {
555         status = "okay";
558 &tdmin_b {
559         status = "okay";
562 &tdmout_a {
563         status = "okay";
566 &tdmout_b {
567         status = "okay";
570 &toddr_a {
571         status = "okay";
574 &toddr_b {
575         status = "okay";
578 &toddr_c {
579         status = "okay";
582 &tohdmitx {
583         status = "okay";
586 &uart_A {
587         status = "okay";
588         pinctrl-0 = <&uart_a_pins>, <&uart_a_cts_rts_pins>;
589         pinctrl-names = "default";
590         uart-has-rtscts;
592         bluetooth {
593                 compatible = "brcm,bcm43438-bt";
594                 interrupt-parent = <&gpio_intc>;
595                 interrupts = <95 IRQ_TYPE_LEVEL_HIGH>;
596                 shutdown-gpios = <&gpio GPIOX_17 GPIO_ACTIVE_HIGH>;
597                 max-speed = <2000000>;
598                 clocks = <&wifi32k>;
599                 clock-names = "lpo";
600                 vbat-supply = <&vddao_3v3>;
601                 vddio-supply = <&vddio_ao1v8>;
602         };
605 /* Exposed via the on-board USB to Serial FT232RL IC */
606 &uart_AO {
607         status = "okay";
608         pinctrl-0 = <&uart_ao_a_pins>;
609         pinctrl-names = "default";
612 &usb {
613         status = "okay";
614         dr_mode = "otg";