1/*
2 * Copyright (c) 2015, The Linux Foundation. All rights reserved.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 and
6 * only version 2 as published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 * GNU General Public License for more details.
12 */
13
14#include "msm8916.dtsi"
15#include "pm8916.dtsi"
16#include "apq8016-sbc-soc-pins.dtsi"
17#include "apq8016-sbc-pmic-pins.dtsi"
18#include <dt-bindings/gpio/gpio.h>
19#include <dt-bindings/input/input.h>
20#include <dt-bindings/sound/apq8016-lpass.h>
21
22/*
23 * GPIO name legend: proper name = the GPIO line is used as GPIO
24 *         NC = not connected (pin out but not routed from the chip to
25 *              anything the board)
26 *         "[PER]" = pin is muxed for [peripheral] (not GPIO)
27 *         LSEC = Low Speed External Connector
28 *         HSEC = High Speed External Connector
29 *
30 * Line names are taken from the schematic "DragonBoard410c"
31 * dated monday, august 31, 2015. Page 5 in particular.
32 *
33 * For the lines routed to the external connectors the
34 * lines are named after the 96Boards CE Specification 1.0,
35 * Appendix "Expansion Connector Signal Description".
36 *
37 * When the 96Board naming of a line and the schematic name of
38 * the same line are in conflict, the 96Board specification
39 * takes precedence, which means that the external UART on the
40 * LSEC is named UART0 while the schematic and SoC names this
41 * UART3. This is only for the informational lines i.e. "[FOO]",
42 * the GPIO named lines "GPIO-A" thru "GPIO-L" are the only
43 * ones actually used for GPIO.
44 */
45
46/ {
47	aliases {
48		serial0 = &blsp1_uart2;
49		serial1 = &blsp1_uart1;
50		usid0 = &pm8916_0;
51		i2c0	= &blsp_i2c2;
52		i2c1	= &blsp_i2c6;
53		i2c3	= &blsp_i2c4;
54		spi0	= &blsp_spi5;
55		spi1	= &blsp_spi3;
56	};
57
58	chosen {
59		stdout-path = "serial0";
60	};
61
62	reserved-memory {
63		ramoops@bff00000{
64			compatible = "ramoops";
65			reg = <0x0 0xbff00000 0x0 0x100000>;
66
67			record-size = <0x20000>;
68			console-size = <0x20000>;
69			ftrace-size = <0x20000>;
70		};
71	};
72
73	soc {
74		pinctrl@1000000 {
75			gpio-line-names =
76				"[UART0_TX]", /* GPIO_0, LSEC pin 5 */
77				"[UART0_RX]", /* GPIO_1, LSEC pin 7 */
78				"[UART0_CTS_N]", /* GPIO_2, LSEC pin 3 */
79				"[UART0_RTS_N]", /* GPIO_3, LSEC pin 9 */
80				"[UART1_TX]", /* GPIO_4, LSEC pin 11 */
81				"[UART1_RX]", /* GPIO_5, LSEC pin 13 */
82				"[I2C0_SDA]", /* GPIO_8, LSEC pin 17 */
83				"[I2C0_SCL]", /* GPIO_7, LSEC pin 15 */
84				"[SPI1_DOUT]", /* SPI1_MOSI, HSEC pin 1 */
85				"[SPI1_DIN]", /* SPI1_MISO, HSEC pin 11 */
86				"[SPI1_CS]", /* SPI1_CS_N, HSEC pin 7 */
87				"[SPI1_SCLK]", /* SPI1_CLK, HSEC pin 9 */
88				"GPIO-B", /* LS_EXP_GPIO_B, LSEC pin 24 */
89				"GPIO-C", /* LS_EXP_GPIO_C, LSEC pin 25 */
90				"[I2C3_SDA]", /* HSEC pin 38 */
91				"[I2C3_SCL]", /* HSEC pin 36 */
92				"[SPI0_MOSI]", /* LSEC pin 14 */
93				"[SPI0_MISO]", /* LSEC pin 10 */
94				"[SPI0_CS_N]", /* LSEC pin 12 */
95				"[SPI0_CLK]", /* LSEC pin 8 */
96				"HDMI_HPD_N", /* GPIO 20 */
97				"USR_LED_1_CTRL",
98				"[I2C1_SDA]", /* GPIO_22, LSEC pin 21 */
99				"[I2C1_SCL]", /* GPIO_23, LSEC pin 19 */
100				"GPIO-G", /* LS_EXP_GPIO_G, LSEC pin 29 */
101				"GPIO-H", /* LS_EXP_GPIO_H, LSEC pin 30 */
102				"[CSI0_MCLK]", /* HSEC pin 15 */
103				"[CSI1_MCLK]", /* HSEC pin 17 */
104				"GPIO-K", /* LS_EXP_GPIO_K, LSEC pin 33 */
105				"[I2C2_SDA]", /* HSEC pin 34 */
106				"[I2C2_SCL]", /* HSEC pin 32 */
107				"DSI2HDMI_INT_N",
108				"DSI_SW_SEL_APQ",
109				"GPIO-L", /* LS_EXP_GPIO_L, LSEC pin 34 */
110				"GPIO-J", /* LS_EXP_GPIO_J, LSEC pin 32 */
111				"GPIO-I", /* LS_EXP_GPIO_I, LSEC pin 31 */
112				"GPIO-A", /* LS_EXP_GPIO_A, LSEC pin 23 */
113				"FORCED_USB_BOOT",
114				"SD_CARD_DET_N",
115				"[WCSS_BT_SSBI]",
116				"[WCSS_WLAN_DATA_2]", /* GPIO 40 */
117				"[WCSS_WLAN_DATA_1]",
118				"[WCSS_WLAN_DATA_0]",
119				"[WCSS_WLAN_SET]",
120				"[WCSS_WLAN_CLK]",
121				"[WCSS_FM_SSBI]",
122				"[WCSS_FM_SDI]",
123				"[WCSS_BT_DAT_CTL]",
124				"[WCSS_BT_DAT_STB]",
125				"NC",
126				"NC", /* GPIO 50 */
127				"NC",
128				"NC",
129				"NC",
130				"NC",
131				"NC",
132				"NC",
133				"NC",
134				"NC",
135				"NC",
136				"NC", /* GPIO 60 */
137				"NC",
138				"NC",
139				"[CDC_PDM0_CLK]",
140				"[CDC_PDM0_SYNC]",
141				"[CDC_PDM0_TX0]",
142				"[CDC_PDM0_RX0]",
143				"[CDC_PDM0_RX1]",
144				"[CDC_PDM0_RX2]",
145				"GPIO-D", /* LS_EXP_GPIO_D, LSEC pin 26 */
146				"NC", /* GPIO 70 */
147				"NC",
148				"NC",
149				"NC",
150				"NC", /* GPIO 74 */
151				"NC",
152				"NC",
153				"NC",
154				"NC",
155				"NC",
156				"BOOT_CONFIG_0", /* GPIO 80 */
157				"BOOT_CONFIG_1",
158				"BOOT_CONFIG_2",
159				"BOOT_CONFIG_3",
160				"NC",
161				"NC",
162				"BOOT_CONFIG_5",
163				"NC",
164				"NC",
165				"NC",
166				"NC", /* GPIO 90 */
167				"NC",
168				"NC",
169				"NC",
170				"NC",
171				"NC",
172				"NC",
173				"NC",
174				"NC",
175				"NC",
176				"NC", /* GPIO 100 */
177				"NC",
178				"NC",
179				"NC",
180				"SSBI_GPS",
181				"NC",
182				"NC",
183				"KEY_VOLP_N",
184				"NC",
185				"NC",
186				"[LS_EXP_MI2S_WS]", /* GPIO 110 */
187				"NC",
188				"NC",
189				"[LS_EXP_MI2S_SCK]",
190				"[LS_EXP_MI2S_DATA0]",
191				"GPIO-E", /* LS_EXP_GPIO_E, LSEC pin 27 */
192				"NC",
193				"[DSI2HDMI_MI2S_WS]",
194				"[DSI2HDMI_MI2S_SCK]",
195				"[DSI2HDMI_MI2S_DATA0]",
196				"USR_LED_2_CTRL", /* GPIO 120 */
197				"SB_HS_ID";
198		};
199
200		dma@7884000 {
201			status = "okay";
202		};
203
204		serial@78af000 {
205			label = "LS-UART0";
206			status = "okay";
207			pinctrl-names = "default", "sleep";
208			pinctrl-0 = <&blsp1_uart1_default>;
209			pinctrl-1 = <&blsp1_uart1_sleep>;
210		};
211
212		serial@78b0000 {
213			label = "LS-UART1";
214			status = "okay";
215			pinctrl-names = "default", "sleep";
216			pinctrl-0 = <&blsp1_uart2_default>;
217			pinctrl-1 = <&blsp1_uart2_sleep>;
218		};
219
220		i2c@78b6000 {
221		/* On Low speed expansion */
222			label = "LS-I2C0";
223			status = "okay";
224		};
225
226		i2c@78b8000 {
227		/* On High speed expansion */
228			label = "HS-I2C2";
229			status = "okay";
230
231			adv_bridge: bridge@39 {
232				status = "okay";
233
234				compatible = "adi,adv7533";
235				reg = <0x39>;
236
237				interrupt-parent = <&msmgpio>;
238				interrupts = <31 2>;
239
240				adi,dsi-lanes = <4>;
241				clocks = <&rpmcc RPM_SMD_BB_CLK2>;
242				clock-names = "cec";
243
244				pd-gpios = <&msmgpio 32 0>;
245
246				avdd-supply = <&pm8916_l6>;
247				v1p2-supply = <&pm8916_l6>;
248				v3p3-supply = <&pm8916_l17>;
249
250				pinctrl-names = "default","sleep";
251				pinctrl-0 = <&adv7533_int_active &adv7533_switch_active>;
252				pinctrl-1 = <&adv7533_int_suspend &adv7533_switch_suspend>;
253				#sound-dai-cells = <1>;
254
255				ports {
256					#address-cells = <1>;
257					#size-cells = <0>;
258
259					port@0 {
260						reg = <0>;
261						adv7533_in: endpoint {
262							remote-endpoint = <&dsi0_out>;
263						};
264					};
265
266					port@1 {
267						reg = <1>;
268						adv7533_out: endpoint {
269							remote-endpoint = <&hdmi_con>;
270						};
271					};
272				};
273			};
274		};
275
276		i2c@78ba000 {
277		/* On Low speed expansion */
278			label = "LS-I2C1";
279			status = "okay";
280		};
281
282		spi@78b7000 {
283		/* On High speed expansion */
284			label = "HS-SPI1";
285			status = "okay";
286		};
287
288		spi@78b9000 {
289		/* On Low speed expansion */
290			label = "LS-SPI0";
291			status = "okay";
292		};
293
294		leds {
295			pinctrl-names = "default";
296			pinctrl-0 = <&msmgpio_leds>,
297				    <&pm8916_gpios_leds>,
298				    <&pm8916_mpps_leds>;
299
300			compatible = "gpio-leds";
301
302			led@1 {
303				label = "apq8016-sbc:green:user1";
304				gpios = <&msmgpio 21 GPIO_ACTIVE_HIGH>;
305				linux,default-trigger = "heartbeat";
306				default-state = "off";
307			};
308
309			led@2 {
310				label = "apq8016-sbc:green:user2";
311				gpios = <&msmgpio 120 GPIO_ACTIVE_HIGH>;
312				linux,default-trigger = "mmc0";
313				default-state = "off";
314			};
315
316			led@3 {
317				label = "apq8016-sbc:green:user3";
318				gpios = <&pm8916_gpios 1 GPIO_ACTIVE_HIGH>;
319				linux,default-trigger = "mmc1";
320				default-state = "off";
321			};
322
323			led@4 {
324				label = "apq8016-sbc:green:user4";
325				gpios = <&pm8916_gpios 2 GPIO_ACTIVE_HIGH>;
326				linux,default-trigger = "none";
327				panic-indicator;
328				default-state = "off";
329			};
330
331			led@5 {
332				label = "apq8016-sbc:yellow:wlan";
333				gpios = <&pm8916_mpps 2 GPIO_ACTIVE_HIGH>;
334				linux,default-trigger = "phy0tx";
335				default-state = "off";
336			};
337
338			led@6 {
339				label = "apq8016-sbc:blue:bt";
340				gpios = <&pm8916_mpps 3 GPIO_ACTIVE_HIGH>;
341				linux,default-trigger = "bluetooth-power";
342				default-state = "off";
343			};
344		};
345
346		sdhci@7824000 {
347			vmmc-supply = <&pm8916_l8>;
348			vqmmc-supply = <&pm8916_l5>;
349
350			pinctrl-names = "default", "sleep";
351			pinctrl-0 = <&sdc1_clk_on &sdc1_cmd_on &sdc1_data_on>;
352			pinctrl-1 = <&sdc1_clk_off &sdc1_cmd_off &sdc1_data_off>;
353			status = "okay";
354		};
355
356		sdhci@7864000 {
357			vmmc-supply = <&pm8916_l11>;
358			vqmmc-supply = <&pm8916_l12>;
359
360			pinctrl-names = "default", "sleep";
361			pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdc2_cd_on>;
362			pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off &sdc2_cd_off>;
363
364			cd-gpios = <&msmgpio 38 0x1>;
365			status = "okay";
366		};
367
368		usb@78d9000 {
369			extcon = <&usb_id>;
370			status = "okay";
371			adp-disable;
372			hnp-disable;
373			srp-disable;
374			dr_mode = "host";
375			pinctrl-names = "default";
376			pinctrl-0 = <&usb_sw_sel_pm>;
377			ulpi {
378				phy {
379					v1p8-supply = <&pm8916_l7>;
380					v3p3-supply = <&pm8916_l13>;
381					extcon = <&usb_id>;
382				};
383			};
384		};
385
386		lpass@7708000 {
387			status = "okay";
388		};
389
390		mdss@1a00000 {
391			status = "okay";
392
393			mdp@1a01000 {
394				status = "okay";
395			};
396
397			dsi@1a98000 {
398				status = "okay";
399
400				vdda-supply = <&pm8916_l2>;
401				vddio-supply = <&pm8916_l6>;
402
403				ports {
404					port@1 {
405						endpoint {
406							remote-endpoint = <&adv7533_in>;
407							data-lanes = <0 1 2 3>;
408						};
409					};
410				};
411			};
412
413			dsi-phy@1a98300 {
414				status = "okay";
415
416				vddio-supply = <&pm8916_l6>;
417			};
418		};
419
420		lpass_codec: codec{
421			status = "okay";
422		};
423
424		/*
425		Internal Codec
426			playback - Primary MI2S
427			capture - Ter MI2S
428
429		External Primary:
430			playback - secondary MI2S
431			capture - Quat MI2S
432
433		External Secondary:
434			playback - Quat MI2S
435			capture - Quat MI2S
436
437		*/
438
439                sound: sound {
440                        compatible = "qcom,apq8016-sbc-sndcard";
441                        reg = <0x07702000 0x4>, <0x07702004 0x4>;
442                        reg-names = "mic-iomux", "spkr-iomux";
443
444                        status = "okay";
445                        pinctrl-0 = <&cdc_pdm_lines_act &ext_sec_tlmm_lines_act &ext_mclk_tlmm_lines_act>;
446                        pinctrl-1 = <&cdc_pdm_lines_sus &ext_sec_tlmm_lines_sus &ext_mclk_tlmm_lines_sus>;
447                        pinctrl-names = "default", "sleep";
448                        qcom,model = "DB410c";
449                        qcom,audio-routing =
450                                "AMIC2", "MIC BIAS Internal2",
451                                "AMIC3", "MIC BIAS External1";
452			external-dai-link@0 {
453				link-name = "ADV7533";
454				cpu { /* QUAT */
455					sound-dai = <&lpass MI2S_QUATERNARY>;
456				};
457				codec {
458					sound-dai = <&adv_bridge 0>;
459				};
460			};
461
462                        internal-codec-playback-dai-link@0 {            /* I2S - Internal codec */
463                                link-name = "WCD";
464                                cpu { /* PRIMARY */
465                                        sound-dai = <&lpass MI2S_PRIMARY>;
466                                };
467                                codec {
468                                        sound-dai = <&lpass_codec 0>, <&wcd_codec 0>;
469                                };
470                        };
471
472                        internal-codec-capture-dai-link@0 {             /* I2S - Internal codec */
473                                link-name = "WCD-Capture";
474                                cpu { /* PRIMARY */
475                                        sound-dai = <&lpass MI2S_TERTIARY>;
476                                };
477                                codec {
478                                        sound-dai = <&lpass_codec 1>, <&wcd_codec 1>;
479                                };
480                        };
481                };
482
483		spmi@200f000 {
484			pm8916@0 {
485				gpios@c000 {
486					gpio-line-names =
487						"USR_LED_3_CTRL",
488						"USR_LED_4_CTRL",
489						"USB_HUB_RESET_N_PM",
490						"USB_SW_SEL_PM";
491				};
492				mpps@a000 {
493					gpio-line-names =
494						"VDD_PX_BIAS",
495						"WLAN_LED_CTRL",
496						"BT_LED_CTRL",
497						"GPIO-F"; /* LS_EXP_GPIO_F, LSEC pin 28 */
498				};
499			};
500		};
501
502		wcnss@a21b000 {
503			status = "okay";
504		};
505	};
506
507	usb2513 {
508		compatible = "smsc,usb3503";
509		reset-gpios = <&pm8916_gpios 3 GPIO_ACTIVE_LOW>;
510		initial-mode = <1>;
511	};
512
513	usb_id: usb-id {
514		compatible = "linux,extcon-usb-gpio";
515		vbus-gpio = <&msmgpio 121 GPIO_ACTIVE_HIGH>;
516		pinctrl-names = "default";
517		pinctrl-0 = <&usb_id_default>;
518	};
519
520	hdmi-out {
521		compatible = "hdmi-connector";
522		type = "a";
523
524		port {
525			hdmi_con: endpoint {
526				remote-endpoint = <&adv7533_out>;
527			};
528		};
529	};
530
531	gpio_keys {
532		compatible = "gpio-keys";
533		#address-cells = <1>;
534		#size-cells = <0>;
535		autorepeat;
536
537		pinctrl-names = "default";
538		pinctrl-0 = <&msm_key_volp_n_default>;
539
540		button@0 {
541			label = "Volume Up";
542			linux,code = <KEY_VOLUMEUP>;
543			gpios = <&msmgpio 107 GPIO_ACTIVE_LOW>;
544		};
545	};
546};
547
548&wcd_codec {
549        status = "okay";
550        clocks = <&gcc GCC_CODEC_DIGCODEC_CLK>;
551        clock-names = "mclk";
552	qcom,mbhc-vthreshold-low = <75 150 237 450 500>;
553	qcom,mbhc-vthreshold-high = <75 150 237 450 500>;
554};
555
556&smd_rpm_regulators {
557	vdd_l1_l2_l3-supply = <&pm8916_s3>;
558	vdd_l5-supply = <&pm8916_s3>;
559	vdd_l4_l5_l6-supply = <&pm8916_s4>;
560	vdd_l7-supply = <&pm8916_s4>;
561
562	s1 {
563		regulator-min-microvolt = <375000>;
564		regulator-max-microvolt = <1562000>;
565	};
566
567	s3 {
568		regulator-min-microvolt = <375000>;
569		regulator-max-microvolt = <1562000>;
570	};
571
572	s4 {
573		regulator-min-microvolt = <1800000>;
574		regulator-max-microvolt = <1800000>;
575
576		regulator-always-on;
577		regulator-boot-on;
578	};
579
580	l1 {
581		regulator-min-microvolt = <375000>;
582		regulator-max-microvolt = <1525000>;
583	};
584
585	l2 {
586		regulator-min-microvolt = <1200000>;
587		regulator-max-microvolt = <1200000>;
588	};
589
590	l3 {
591		regulator-min-microvolt = <375000>;
592		regulator-max-microvolt = <1525000>;
593	};
594
595	l4 {
596		regulator-min-microvolt = <1750000>;
597		regulator-max-microvolt = <3337000>;
598	};
599
600	l5 {
601		regulator-min-microvolt = <1750000>;
602		regulator-max-microvolt = <3337000>;
603	};
604
605	l6 {
606		regulator-min-microvolt = <1800000>;
607		regulator-max-microvolt = <1800000>;
608	};
609
610	l7 {
611		regulator-min-microvolt = <1750000>;
612		regulator-max-microvolt = <3337000>;
613	};
614
615	l8 {
616		regulator-min-microvolt = <1750000>;
617		regulator-max-microvolt = <3337000>;
618	};
619
620	l9 {
621		regulator-min-microvolt = <1750000>;
622		regulator-max-microvolt = <3337000>;
623	};
624
625	l10 {
626		regulator-min-microvolt = <1750000>;
627		regulator-max-microvolt = <3337000>;
628	};
629
630	l11 {
631		regulator-min-microvolt = <1750000>;
632		regulator-max-microvolt = <3337000>;
633	};
634
635	l12 {
636		regulator-min-microvolt = <1750000>;
637		regulator-max-microvolt = <3337000>;
638	};
639
640	l13 {
641		regulator-min-microvolt = <1750000>;
642		regulator-max-microvolt = <3337000>;
643	};
644
645	l14 {
646		regulator-min-microvolt = <1750000>;
647		regulator-max-microvolt = <3337000>;
648	};
649
650	/**
651	 * 1.8v required on LS expansion
652	 * for mezzanine boards
653	 */
654	l15 {
655		regulator-min-microvolt = <1750000>;
656		regulator-max-microvolt = <3337000>;
657		regulator-always-on;
658	};
659
660	l16 {
661		regulator-min-microvolt = <1750000>;
662		regulator-max-microvolt = <3337000>;
663	};
664
665	l17 {
666		regulator-min-microvolt = <3300000>;
667		regulator-max-microvolt = <3300000>;
668	};
669
670	l18 {
671		regulator-min-microvolt = <1750000>;
672		regulator-max-microvolt = <3337000>;
673	};
674};
675