blob: 9ffad7d1f2b6cb9e700f7d3db7b29ac10b755b5b [file] [log] [blame]
Tom Rini53633a82024-02-29 12:33:36 -05001// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Copyright (c) 2015, The Linux Foundation. All rights reserved.
4 */
5
6/dts-v1/;
7
8#include "msm8916-pm8916.dtsi"
9#include <dt-bindings/gpio/gpio.h>
10#include <dt-bindings/input/input.h>
11#include <dt-bindings/leds/common.h>
12#include <dt-bindings/pinctrl/qcom,pmic-gpio.h>
13#include <dt-bindings/pinctrl/qcom,pmic-mpp.h>
14#include <dt-bindings/sound/apq8016-lpass.h>
15
16/ {
17 model = "Qualcomm Technologies, Inc. APQ 8016 SBC";
18 compatible = "qcom,apq8016-sbc", "qcom,apq8016";
19
20 aliases {
21 mmc0 = &sdhc_1; /* eMMC */
22 mmc1 = &sdhc_2; /* SD card */
23 serial0 = &blsp_uart2;
24 serial1 = &blsp_uart1;
25 usid0 = &pm8916_0;
26 i2c0 = &blsp_i2c2;
27 i2c1 = &blsp_i2c6;
28 i2c3 = &blsp_i2c4;
29 spi0 = &blsp_spi5;
30 spi1 = &blsp_spi3;
31 };
32
33 chosen {
34 stdout-path = "serial0";
35 };
36
37 reserved-memory {
38 ramoops@bff00000 {
39 compatible = "ramoops";
40 reg = <0x0 0xbff00000 0x0 0x100000>;
41
42 record-size = <0x20000>;
43 console-size = <0x20000>;
44 ftrace-size = <0x20000>;
45 };
46 };
47
48 usb2513 {
49 compatible = "smsc,usb3503";
50 reset-gpios = <&pm8916_gpios 3 GPIO_ACTIVE_LOW>;
51 initial-mode = <1>;
52 };
53
54 usb_id: usb-id {
55 compatible = "linux,extcon-usb-gpio";
56 id-gpios = <&tlmm 121 GPIO_ACTIVE_HIGH>;
57 pinctrl-names = "default";
58 pinctrl-0 = <&usb_id_default>;
59 };
60
61 hdmi-out {
62 compatible = "hdmi-connector";
63 type = "a";
64
65 port {
66 hdmi_con: endpoint {
67 remote-endpoint = <&adv7533_out>;
68 };
69 };
70 };
71
72 gpio-keys {
73 compatible = "gpio-keys";
74 autorepeat;
75
76 pinctrl-names = "default";
77 pinctrl-0 = <&msm_key_volp_n_default>;
78
79 button {
80 label = "Volume Up";
81 linux,code = <KEY_VOLUMEUP>;
82 gpios = <&tlmm 107 GPIO_ACTIVE_LOW>;
83 };
84 };
85
86 leds {
87 pinctrl-names = "default";
88 pinctrl-0 = <&tlmm_leds>,
89 <&pm8916_gpios_leds>,
90 <&pm8916_mpps_leds>;
91
92 compatible = "gpio-leds";
93
94 led@1 {
95 label = "apq8016-sbc:green:user1";
96 function = LED_FUNCTION_HEARTBEAT;
97 color = <LED_COLOR_ID_GREEN>;
98 gpios = <&tlmm 21 GPIO_ACTIVE_HIGH>;
99 linux,default-trigger = "heartbeat";
100 default-state = "off";
101 };
102
103 led@2 {
104 label = "apq8016-sbc:green:user2";
105 function = LED_FUNCTION_DISK_ACTIVITY;
106 color = <LED_COLOR_ID_GREEN>;
107 gpios = <&tlmm 120 GPIO_ACTIVE_HIGH>;
108 linux,default-trigger = "mmc0";
109 default-state = "off";
110 };
111
112 led@3 {
113 label = "apq8016-sbc:green:user3";
114 function = LED_FUNCTION_DISK_ACTIVITY;
115 color = <LED_COLOR_ID_GREEN>;
116 gpios = <&pm8916_gpios 1 GPIO_ACTIVE_HIGH>;
117 linux,default-trigger = "mmc1";
118 default-state = "off";
119 };
120
121 led@4 {
122 label = "apq8016-sbc:green:user4";
123 color = <LED_COLOR_ID_GREEN>;
124 gpios = <&pm8916_gpios 2 GPIO_ACTIVE_HIGH>;
125 linux,default-trigger = "none";
126 panic-indicator;
127 default-state = "off";
128 };
129
130 led@5 {
131 label = "apq8016-sbc:yellow:wlan";
132 function = LED_FUNCTION_WLAN;
133 color = <LED_COLOR_ID_YELLOW>;
134 gpios = <&pm8916_mpps 2 GPIO_ACTIVE_HIGH>;
135 linux,default-trigger = "phy0tx";
136 default-state = "off";
137 };
138
139 led@6 {
140 label = "apq8016-sbc:blue:bt";
141 function = LED_FUNCTION_BLUETOOTH;
142 color = <LED_COLOR_ID_BLUE>;
143 gpios = <&pm8916_mpps 3 GPIO_ACTIVE_HIGH>;
144 linux,default-trigger = "bluetooth-power";
145 default-state = "off";
146 };
147 };
148};
149
150&blsp_i2c2 {
151 /* On Low speed expansion: LS-I2C0 */
152 status = "okay";
153};
154
155&blsp_i2c4 {
156 /* On High speed expansion: HS-I2C2 */
157 status = "okay";
158
159 adv_bridge: bridge@39 {
160 status = "okay";
161
162 compatible = "adi,adv7533";
163 reg = <0x39>;
164
165 interrupt-parent = <&tlmm>;
166 interrupts = <31 IRQ_TYPE_EDGE_FALLING>;
167
168 adi,dsi-lanes = <4>;
169 clocks = <&rpmcc RPM_SMD_BB_CLK2>;
170 clock-names = "cec";
171
172 pd-gpios = <&tlmm 32 GPIO_ACTIVE_HIGH>;
173
174 avdd-supply = <&pm8916_l6>;
175 a2vdd-supply = <&pm8916_l6>;
176 dvdd-supply = <&pm8916_l6>;
177 pvdd-supply = <&pm8916_l6>;
178 v1p2-supply = <&pm8916_l6>;
179 v3p3-supply = <&pm8916_l17>;
180
181 pinctrl-names = "default","sleep";
182 pinctrl-0 = <&adv7533_int_active &adv7533_switch_active>;
183 pinctrl-1 = <&adv7533_int_suspend &adv7533_switch_suspend>;
184 #sound-dai-cells = <1>;
185
186 ports {
187 #address-cells = <1>;
188 #size-cells = <0>;
189
190 port@0 {
191 reg = <0>;
192 adv7533_in: endpoint {
193 remote-endpoint = <&mdss_dsi0_out>;
194 };
195 };
196
197 port@1 {
198 reg = <1>;
199 adv7533_out: endpoint {
200 remote-endpoint = <&hdmi_con>;
201 };
202 };
203 };
204 };
205};
206
207&blsp_i2c6 {
208 /* On Low speed expansion: LS-I2C1 */
209 status = "okay";
210};
211
212&blsp_spi3 {
213 /* On High speed expansion: HS-SPI1 */
214 status = "okay";
215};
216
217&blsp_spi5 {
218 /* On Low speed expansion: LS-SPI0 */
219 status = "okay";
220};
221
222&blsp_uart1 {
223 status = "okay";
224 label = "LS-UART0";
225};
226
227&blsp_uart2 {
228 status = "okay";
229 label = "LS-UART1";
230};
231
232&camss {
233 status = "okay";
234};
235
236&gpu {
237 status = "okay";
238};
239
240&lpass {
241 status = "okay";
242};
243
244&lpass_codec {
245 status = "okay";
246};
247
248&mba_mem {
249 status = "okay";
250};
251
252&mdss {
253 status = "okay";
254};
255
256&mdss_dsi0_out {
257 data-lanes = <0 1 2 3>;
258 remote-endpoint = <&adv7533_in>;
259};
260
261&mpss {
262 status = "okay";
263
264 firmware-name = "qcom/apq8016/mba.mbn", "qcom/apq8016/modem.mbn";
265};
266
267&mpss_mem {
268 status = "okay";
269 reg = <0x0 0x86800000 0x0 0x2b00000>;
270};
271
272&pm8916_codec {
273 status = "okay";
274 qcom,mbhc-vthreshold-low = <75 150 237 450 500>;
275 qcom,mbhc-vthreshold-high = <75 150 237 450 500>;
276};
277
278&pm8916_resin {
279 status = "okay";
280 linux,code = <KEY_VOLUMEDOWN>;
281};
282
283&pm8916_rpm_regulators {
284 /*
285 * The 96Boards specification expects a 1.8V power rail on the low-speed
286 * expansion connector that is able to provide at least 0.18W / 100 mA.
287 * L15/L16 are connected in parallel to provide 55 mA each. A minimum load
288 * must be specified to ensure the regulators are not put in LPM where they
289 * would only provide 5 mA.
290 */
291 pm8916_l15: l15 {
292 regulator-min-microvolt = <1800000>;
293 regulator-max-microvolt = <1800000>;
294 regulator-system-load = <50000>;
295 regulator-allow-set-load;
296 regulator-always-on;
297 };
298 pm8916_l16: l16 {
299 regulator-min-microvolt = <1800000>;
300 regulator-max-microvolt = <1800000>;
301 regulator-system-load = <50000>;
302 regulator-allow-set-load;
303 regulator-always-on;
304 };
305
306 pm8916_l17: l17 {
307 regulator-min-microvolt = <3300000>;
308 regulator-max-microvolt = <3300000>;
309 };
310};
311
312&sdhc_1 {
313 status = "okay";
314};
315
316&sdhc_2 {
317 status = "okay";
318
319 pinctrl-names = "default", "sleep";
320 pinctrl-0 = <&sdc2_default &sdc2_cd_default>;
321 pinctrl-1 = <&sdc2_sleep &sdc2_cd_default>;
322
323 cd-gpios = <&tlmm 38 GPIO_ACTIVE_LOW>;
324};
325
326&sound {
327 status = "okay";
328
329 pinctrl-0 = <&cdc_pdm_default &sec_mi2s_default>;
330 pinctrl-1 = <&cdc_pdm_sleep &sec_mi2s_sleep>;
331 pinctrl-names = "default", "sleep";
332 model = "DB410c";
333 audio-routing =
334 "AMIC2", "MIC BIAS Internal2",
335 "AMIC3", "MIC BIAS External1";
336
337 quaternary-dai-link {
338 link-name = "ADV7533";
339 cpu {
340 sound-dai = <&lpass MI2S_QUATERNARY>;
341 };
342 codec {
343 sound-dai = <&adv_bridge 0>;
344 };
345 };
346
347 primary-dai-link {
348 link-name = "WCD";
349 cpu {
350 sound-dai = <&lpass MI2S_PRIMARY>;
351 };
352 codec {
353 sound-dai = <&lpass_codec 0>, <&pm8916_codec 0>;
354 };
355 };
356
357 tertiary-dai-link {
358 link-name = "WCD-Capture";
359 cpu {
360 sound-dai = <&lpass MI2S_TERTIARY>;
361 };
362 codec {
363 sound-dai = <&lpass_codec 1>, <&pm8916_codec 1>;
364 };
365 };
366};
367
368&usb {
369 status = "okay";
370 extcon = <&usb_id>, <&usb_id>;
371
372 pinctrl-names = "default", "device";
373 pinctrl-0 = <&usb_sw_sel_pm &usb_hub_reset_pm>;
374 pinctrl-1 = <&usb_sw_sel_pm_device &usb_hub_reset_pm_device>;
375};
376
377&usb_hs_phy {
378 extcon = <&usb_id>;
379};
380
381&venus {
382 status = "okay";
383};
384
385&venus_mem {
386 status = "okay";
387};
388
389&wcnss {
390 status = "okay";
391 firmware-name = "qcom/apq8016/wcnss.mbn";
392};
393
394&wcnss_ctrl {
395 firmware-name = "qcom/apq8016/WCNSS_qcom_wlan_nv_sbc.bin";
396};
397
398&wcnss_iris {
399 compatible = "qcom,wcn3620";
400};
401
402&wcnss_mem {
403 status = "okay";
404};
405
406/* Enable CoreSight */
407&cti0 { status = "okay"; };
408&cti1 { status = "okay"; };
409&cti12 { status = "okay"; };
410&cti13 { status = "okay"; };
411&cti14 { status = "okay"; };
412&cti15 { status = "okay"; };
413&debug0 { status = "okay"; };
414&debug1 { status = "okay"; };
415&debug2 { status = "okay"; };
416&debug3 { status = "okay"; };
417&etf { status = "okay"; };
418&etm0 { status = "okay"; };
419&etm1 { status = "okay"; };
420&etm2 { status = "okay"; };
421&etm3 { status = "okay"; };
422&etr { status = "okay"; };
423&funnel0 { status = "okay"; };
424&funnel1 { status = "okay"; };
425&replicator { status = "okay"; };
426&stm { status = "okay"; };
427&tpiu { status = "okay"; };
428
429/*
430 * 2mA drive strength is not enough when connecting multiple
431 * I2C devices with different pull up resistors.
432 */
433&blsp_i2c2_default {
434 drive-strength = <16>;
435};
436
437&blsp_i2c4_default {
438 drive-strength = <16>;
439};
440
441&blsp_i2c6_default {
442 drive-strength = <16>;
443};
444
445/*
446 * GPIO name legend: proper name = the GPIO line is used as GPIO
447 * NC = not connected (pin out but not routed from the chip to
448 * anything the board)
449 * "[PER]" = pin is muxed for [peripheral] (not GPIO)
450 * LSEC = Low Speed External Connector
451 * HSEC = High Speed External Connector
452 *
453 * Line names are taken from the schematic "DragonBoard410c"
454 * dated monday, august 31, 2015. Page 5 in particular.
455 *
456 * For the lines routed to the external connectors the
457 * lines are named after the 96Boards CE Specification 1.0,
458 * Appendix "Expansion Connector Signal Description".
459 *
460 * When the 96Board naming of a line and the schematic name of
461 * the same line are in conflict, the 96Board specification
462 * takes precedence, which means that the external UART on the
463 * LSEC is named UART0 while the schematic and SoC names this
464 * UART3. This is only for the informational lines i.e. "[FOO]",
465 * the GPIO named lines "GPIO-A" thru "GPIO-L" are the only
466 * ones actually used for GPIO.
467 */
468
469&tlmm {
470 gpio-line-names =
471 "[UART0_TX]", /* GPIO_0, LSEC pin 5 */
472 "[UART0_RX]", /* GPIO_1, LSEC pin 7 */
473 "[UART0_CTS_N]", /* GPIO_2, LSEC pin 3 */
474 "[UART0_RTS_N]", /* GPIO_3, LSEC pin 9 */
475 "[UART1_TX]", /* GPIO_4, LSEC pin 11 */
476 "[UART1_RX]", /* GPIO_5, LSEC pin 13 */
477 "[I2C0_SDA]", /* GPIO_8, LSEC pin 17 */
478 "[I2C0_SCL]", /* GPIO_7, LSEC pin 15 */
479 "[SPI1_DOUT]", /* SPI1_MOSI, HSEC pin 1 */
480 "[SPI1_DIN]", /* SPI1_MISO, HSEC pin 11 */
481 "[SPI1_CS]", /* SPI1_CS_N, HSEC pin 7 */
482 "[SPI1_SCLK]", /* SPI1_CLK, HSEC pin 9 */
483 "GPIO-B", /* LS_EXP_GPIO_B, LSEC pin 24 */
484 "GPIO-C", /* LS_EXP_GPIO_C, LSEC pin 25 */
485 "[I2C3_SDA]", /* HSEC pin 38 */
486 "[I2C3_SCL]", /* HSEC pin 36 */
487 "[SPI0_MOSI]", /* LSEC pin 14 */
488 "[SPI0_MISO]", /* LSEC pin 10 */
489 "[SPI0_CS_N]", /* LSEC pin 12 */
490 "[SPI0_CLK]", /* LSEC pin 8 */
491 "HDMI_HPD_N", /* GPIO 20 */
492 "USR_LED_1_CTRL",
493 "[I2C1_SDA]", /* GPIO_22, LSEC pin 21 */
494 "[I2C1_SCL]", /* GPIO_23, LSEC pin 19 */
495 "GPIO-G", /* LS_EXP_GPIO_G, LSEC pin 29 */
496 "GPIO-H", /* LS_EXP_GPIO_H, LSEC pin 30 */
497 "[CSI0_MCLK]", /* HSEC pin 15 */
498 "[CSI1_MCLK]", /* HSEC pin 17 */
499 "GPIO-K", /* LS_EXP_GPIO_K, LSEC pin 33 */
500 "[I2C2_SDA]", /* HSEC pin 34 */
501 "[I2C2_SCL]", /* HSEC pin 32 */
502 "DSI2HDMI_INT_N",
503 "DSI_SW_SEL_APQ",
504 "GPIO-L", /* LS_EXP_GPIO_L, LSEC pin 34 */
505 "GPIO-J", /* LS_EXP_GPIO_J, LSEC pin 32 */
506 "GPIO-I", /* LS_EXP_GPIO_I, LSEC pin 31 */
507 "GPIO-A", /* LS_EXP_GPIO_A, LSEC pin 23 */
508 "FORCED_USB_BOOT",
509 "SD_CARD_DET_N",
510 "[WCSS_BT_SSBI]",
511 "[WCSS_WLAN_DATA_2]", /* GPIO 40 */
512 "[WCSS_WLAN_DATA_1]",
513 "[WCSS_WLAN_DATA_0]",
514 "[WCSS_WLAN_SET]",
515 "[WCSS_WLAN_CLK]",
516 "[WCSS_FM_SSBI]",
517 "[WCSS_FM_SDI]",
518 "[WCSS_BT_DAT_CTL]",
519 "[WCSS_BT_DAT_STB]",
520 "NC",
521 "NC", /* GPIO 50 */
522 "NC",
523 "NC",
524 "NC",
525 "NC",
526 "NC",
527 "NC",
528 "NC",
529 "NC",
530 "NC",
531 "NC", /* GPIO 60 */
532 "NC",
533 "NC",
534 "[CDC_PDM0_CLK]",
535 "[CDC_PDM0_SYNC]",
536 "[CDC_PDM0_TX0]",
537 "[CDC_PDM0_RX0]",
538 "[CDC_PDM0_RX1]",
539 "[CDC_PDM0_RX2]",
540 "GPIO-D", /* LS_EXP_GPIO_D, LSEC pin 26 */
541 "NC", /* GPIO 70 */
542 "NC",
543 "NC",
544 "NC",
545 "NC", /* GPIO 74 */
546 "NC",
547 "NC",
548 "NC",
549 "NC",
550 "NC",
551 "BOOT_CONFIG_0", /* GPIO 80 */
552 "BOOT_CONFIG_1",
553 "BOOT_CONFIG_2",
554 "BOOT_CONFIG_3",
555 "NC",
556 "NC",
557 "BOOT_CONFIG_5",
558 "NC",
559 "NC",
560 "NC",
561 "NC", /* GPIO 90 */
562 "NC",
563 "NC",
564 "NC",
565 "NC",
566 "NC",
567 "NC",
568 "NC",
569 "NC",
570 "NC",
571 "NC", /* GPIO 100 */
572 "NC",
573 "NC",
574 "NC",
575 "SSBI_GPS",
576 "NC",
577 "NC",
578 "KEY_VOLP_N",
579 "NC",
580 "NC",
581 "[LS_EXP_MI2S_WS]", /* GPIO 110 */
582 "NC",
583 "NC",
584 "[LS_EXP_MI2S_SCK]",
585 "[LS_EXP_MI2S_DATA0]",
586 "GPIO-E", /* LS_EXP_GPIO_E, LSEC pin 27 */
587 "NC",
588 "[DSI2HDMI_MI2S_WS]",
589 "[DSI2HDMI_MI2S_SCK]",
590 "[DSI2HDMI_MI2S_DATA0]",
591 "USR_LED_2_CTRL", /* GPIO 120 */
592 "SB_HS_ID";
593
594 sdc2_cd_default: sdc2-cd-default-state {
595 pins = "gpio38";
596 function = "gpio";
597 drive-strength = <2>;
598 bias-disable;
599 };
600
601 tlmm_leds: tlmm-leds-state {
602 pins = "gpio21", "gpio120";
603 function = "gpio";
604
605 output-low;
606 };
607
608 usb_id_default: usb-id-default-state {
609 pins = "gpio121";
610 function = "gpio";
611
612 drive-strength = <8>;
613 bias-pull-up;
614 };
615
616 adv7533_int_active: adv533-int-active-state {
617 pins = "gpio31";
618 function = "gpio";
619
620 drive-strength = <16>;
621 bias-disable;
622 };
623
624 adv7533_int_suspend: adv7533-int-suspend-state {
625 pins = "gpio31";
626 function = "gpio";
627
628 drive-strength = <2>;
629 bias-disable;
630 };
631
632 adv7533_switch_active: adv7533-switch-active-state {
633 pins = "gpio32";
634 function = "gpio";
635
636 drive-strength = <16>;
637 bias-disable;
638 };
639
640 adv7533_switch_suspend: adv7533-switch-suspend-state {
641 pins = "gpio32";
642 function = "gpio";
643
644 drive-strength = <2>;
645 bias-disable;
646 };
647
648 msm_key_volp_n_default: msm-key-volp-n-default-state {
649 pins = "gpio107";
650 function = "gpio";
651
652 drive-strength = <8>;
653 bias-pull-up;
654 };
655};
656
657&pm8916_gpios {
658 gpio-line-names =
659 "USR_LED_3_CTRL",
660 "USR_LED_4_CTRL",
661 "USB_HUB_RESET_N_PM",
662 "USB_SW_SEL_PM";
663
664 usb_hub_reset_pm: usb-hub-reset-pm-state {
665 pins = "gpio3";
666 function = PMIC_GPIO_FUNC_NORMAL;
667
668 input-disable;
669 output-high;
670 };
671
672 usb_hub_reset_pm_device: usb-hub-reset-pm-device-state {
673 pins = "gpio3";
674 function = PMIC_GPIO_FUNC_NORMAL;
675
676 output-low;
677 };
678
679 usb_sw_sel_pm: usb-sw-sel-pm-state {
680 pins = "gpio4";
681 function = PMIC_GPIO_FUNC_NORMAL;
682
683 power-source = <PM8916_GPIO_VPH>;
684 input-disable;
685 output-high;
686 };
687
688 usb_sw_sel_pm_device: usb-sw-sel-pm-device-state {
689 pins = "gpio4";
690 function = PMIC_GPIO_FUNC_NORMAL;
691
692 power-source = <PM8916_GPIO_VPH>;
693 input-disable;
694 output-low;
695 };
696
697 pm8916_gpios_leds: pm8916-gpios-leds-state {
698 pins = "gpio1", "gpio2";
699 function = PMIC_GPIO_FUNC_NORMAL;
700
701 output-low;
702 };
703};
704
705&pm8916_mpps {
706 gpio-line-names =
707 "VDD_PX_BIAS",
708 "WLAN_LED_CTRL",
709 "BT_LED_CTRL",
710 "GPIO-F"; /* LS_EXP_GPIO_F, LSEC pin 28 */
711
712 pinctrl-names = "default";
713 pinctrl-0 = <&ls_exp_gpio_f>;
714
715 ls_exp_gpio_f: pm8916-mpp4-state {
716 pins = "mpp4";
717 function = "digital";
718
719 output-low;
720 power-source = <PM8916_MPP_L5>; /* 1.8V */
721 };
722
723 pm8916_mpps_leds: pm8916-mpps-state {
724 pins = "mpp2", "mpp3";
725 function = "digital";
726
727 output-low;
728 };
729};