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