1// 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};
730