/*
 * Copyright (c) 2015, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
 * only version 2 as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */

#include "msm8916.dtsi"
#include "pm8916.dtsi"
#include "apq8016-sbc-soc-pins.dtsi"
#include "apq8016-sbc-pmic-pins.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/sound/apq8016-lpass.h>

/*
 * GPIO name legend: proper name = the GPIO line is used as GPIO
 *         NC = not connected (pin out but not routed from the chip to
 *              anything the board)
 *         "[PER]" = pin is muxed for [peripheral] (not GPIO)
 *         LSEC = Low Speed External Connector
 *         HSEC = High Speed External Connector
 *
 * Line names are taken from the schematic "DragonBoard410c"
 * dated monday, august 31, 2015. Page 5 in particular.
 *
 * For the lines routed to the external connectors the
 * lines are named after the 96Boards CE Specification 1.0,
 * Appendix "Expansion Connector Signal Description".
 *
 * When the 96Board naming of a line and the schematic name of
 * the same line are in conflict, the 96Board specification
 * takes precedence, which means that the external UART on the
 * LSEC is named UART0 while the schematic and SoC names this
 * UART3. This is only for the informational lines i.e. "[FOO]",
 * the GPIO named lines "GPIO-A" thru "GPIO-L" are the only
 * ones actually used for GPIO.
 */

/ {
	aliases {
		serial0 = &blsp1_uart2;
		serial1 = &blsp1_uart1;
		usid0 = &pm8916_0;
		i2c0	= &blsp_i2c2;
		i2c1	= &blsp_i2c6;
		i2c3	= &blsp_i2c4;
		spi0	= &blsp_spi5;
		spi1	= &blsp_spi3;
	};

	chosen {
		stdout-path = "serial0";
	};

	reserved-memory {
		ramoops@bff00000{
			compatible = "ramoops";
			reg = <0x0 0xbff00000 0x0 0x100000>;

			record-size = <0x20000>;
			console-size = <0x20000>;
			ftrace-size = <0x20000>;
		};
	};

	soc {
		pinctrl@1000000 {
			gpio-line-names =
				"[UART0_TX]", /* GPIO_0, LSEC pin 5 */
				"[UART0_RX]", /* GPIO_1, LSEC pin 7 */
				"[UART0_CTS_N]", /* GPIO_2, LSEC pin 3 */
				"[UART0_RTS_N]", /* GPIO_3, LSEC pin 9 */
				"[UART1_TX]", /* GPIO_4, LSEC pin 11 */
				"[UART1_RX]", /* GPIO_5, LSEC pin 13 */
				"[I2C0_SDA]", /* GPIO_8, LSEC pin 17 */
				"[I2C0_SCL]", /* GPIO_7, LSEC pin 15 */
				"[SPI1_DOUT]", /* SPI1_MOSI, HSEC pin 1 */
				"[SPI1_DIN]", /* SPI1_MISO, HSEC pin 11 */
				"[SPI1_CS]", /* SPI1_CS_N, HSEC pin 7 */
				"[SPI1_SCLK]", /* SPI1_CLK, HSEC pin 9 */
				"GPIO-B", /* LS_EXP_GPIO_B, LSEC pin 24 */
				"GPIO-C", /* LS_EXP_GPIO_C, LSEC pin 25 */
				"[I2C3_SDA]", /* HSEC pin 38 */
				"[I2C3_SCL]", /* HSEC pin 36 */
				"[SPI0_MOSI]", /* LSEC pin 14 */
				"[SPI0_MISO]", /* LSEC pin 10 */
				"[SPI0_CS_N]", /* LSEC pin 12 */
				"[SPI0_CLK]", /* LSEC pin 8 */
				"HDMI_HPD_N", /* GPIO 20 */
				"USR_LED_1_CTRL",
				"[I2C1_SDA]", /* GPIO_22, LSEC pin 21 */
				"[I2C1_SCL]", /* GPIO_23, LSEC pin 19 */
				"GPIO-G", /* LS_EXP_GPIO_G, LSEC pin 29 */
				"GPIO-H", /* LS_EXP_GPIO_H, LSEC pin 30 */
				"[CSI0_MCLK]", /* HSEC pin 15 */
				"[CSI1_MCLK]", /* HSEC pin 17 */
				"GPIO-K", /* LS_EXP_GPIO_K, LSEC pin 33 */
				"[I2C2_SDA]", /* HSEC pin 34 */
				"[I2C2_SCL]", /* HSEC pin 32 */
				"DSI2HDMI_INT_N",
				"DSI_SW_SEL_APQ",
				"GPIO-L", /* LS_EXP_GPIO_L, LSEC pin 34 */
				"GPIO-J", /* LS_EXP_GPIO_J, LSEC pin 32 */
				"GPIO-I", /* LS_EXP_GPIO_I, LSEC pin 31 */
				"GPIO-A", /* LS_EXP_GPIO_A, LSEC pin 23 */
				"FORCED_USB_BOOT",
				"SD_CARD_DET_N",
				"[WCSS_BT_SSBI]",
				"[WCSS_WLAN_DATA_2]", /* GPIO 40 */
				"[WCSS_WLAN_DATA_1]",
				"[WCSS_WLAN_DATA_0]",
				"[WCSS_WLAN_SET]",
				"[WCSS_WLAN_CLK]",
				"[WCSS_FM_SSBI]",
				"[WCSS_FM_SDI]",
				"[WCSS_BT_DAT_CTL]",
				"[WCSS_BT_DAT_STB]",
				"NC",
				"NC", /* GPIO 50 */
				"NC",
				"NC",
				"NC",
				"NC",
				"NC",
				"NC",
				"NC",
				"NC",
				"NC",
				"NC", /* GPIO 60 */
				"NC",
				"NC",
				"[CDC_PDM0_CLK]",
				"[CDC_PDM0_SYNC]",
				"[CDC_PDM0_TX0]",
				"[CDC_PDM0_RX0]",
				"[CDC_PDM0_RX1]",
				"[CDC_PDM0_RX2]",
				"GPIO-D", /* LS_EXP_GPIO_D, LSEC pin 26 */
				"NC", /* GPIO 70 */
				"NC",
				"NC",
				"NC",
				"NC", /* GPIO 74 */
				"NC",
				"NC",
				"NC",
				"NC",
				"NC",
				"BOOT_CONFIG_0", /* GPIO 80 */
				"BOOT_CONFIG_1",
				"BOOT_CONFIG_2",
				"BOOT_CONFIG_3",
				"NC",
				"NC",
				"BOOT_CONFIG_5",
				"NC",
				"NC",
				"NC",
				"NC", /* GPIO 90 */
				"NC",
				"NC",
				"NC",
				"NC",
				"NC",
				"NC",
				"NC",
				"NC",
				"NC",
				"NC", /* GPIO 100 */
				"NC",
				"NC",
				"NC",
				"SSBI_GPS",
				"NC",
				"NC",
				"KEY_VOLP_N",
				"NC",
				"NC",
				"[LS_EXP_MI2S_WS]", /* GPIO 110 */
				"NC",
				"NC",
				"[LS_EXP_MI2S_SCK]",
				"[LS_EXP_MI2S_DATA0]",
				"GPIO-E", /* LS_EXP_GPIO_E, LSEC pin 27 */
				"NC",
				"[DSI2HDMI_MI2S_WS]",
				"[DSI2HDMI_MI2S_SCK]",
				"[DSI2HDMI_MI2S_DATA0]",
				"USR_LED_2_CTRL", /* GPIO 120 */
				"SB_HS_ID";
		};

		dma@7884000 {
			status = "okay";
		};

		serial@78af000 {
			label = "LS-UART0";
			status = "okay";
			pinctrl-names = "default", "sleep";
			pinctrl-0 = <&blsp1_uart1_default>;
			pinctrl-1 = <&blsp1_uart1_sleep>;
		};

		serial@78b0000 {
			label = "LS-UART1";
			status = "okay";
			pinctrl-names = "default", "sleep";
			pinctrl-0 = <&blsp1_uart2_default>;
			pinctrl-1 = <&blsp1_uart2_sleep>;
		};

		i2c@78b6000 {
		/* On Low speed expansion */
			label = "LS-I2C0";
			status = "okay";
		};

		i2c@78b8000 {
		/* On High speed expansion */
			label = "HS-I2C2";
			status = "okay";

			adv_bridge: bridge@39 {
				status = "okay";

				compatible = "adi,adv7533";
				reg = <0x39>;

				interrupt-parent = <&msmgpio>;
				interrupts = <31 2>;

				adi,dsi-lanes = <4>;
				clocks = <&rpmcc RPM_SMD_BB_CLK2>;
				clock-names = "cec";

				pd-gpios = <&msmgpio 32 0>;

				avdd-supply = <&pm8916_l6>;
				v1p2-supply = <&pm8916_l6>;
				v3p3-supply = <&pm8916_l17>;

				pinctrl-names = "default","sleep";
				pinctrl-0 = <&adv7533_int_active &adv7533_switch_active>;
				pinctrl-1 = <&adv7533_int_suspend &adv7533_switch_suspend>;
				#sound-dai-cells = <1>;

				ports {
					#address-cells = <1>;
					#size-cells = <0>;

					port@0 {
						reg = <0>;
						adv7533_in: endpoint {
							remote-endpoint = <&dsi0_out>;
						};
					};

					port@1 {
						reg = <1>;
						adv7533_out: endpoint {
							remote-endpoint = <&hdmi_con>;
						};
					};
				};
			};
		};

		i2c@78ba000 {
		/* On Low speed expansion */
			label = "LS-I2C1";
			status = "okay";
		};

		spi@78b7000 {
		/* On High speed expansion */
			label = "HS-SPI1";
			status = "okay";
		};

		spi@78b9000 {
		/* On Low speed expansion */
			label = "LS-SPI0";
			status = "okay";
		};

		leds {
			pinctrl-names = "default";
			pinctrl-0 = <&msmgpio_leds>,
				    <&pm8916_gpios_leds>,
				    <&pm8916_mpps_leds>;

			compatible = "gpio-leds";

			led@1 {
				label = "apq8016-sbc:green:user1";
				gpios = <&msmgpio 21 GPIO_ACTIVE_HIGH>;
				linux,default-trigger = "heartbeat";
				default-state = "off";
			};

			led@2 {
				label = "apq8016-sbc:green:user2";
				gpios = <&msmgpio 120 GPIO_ACTIVE_HIGH>;
				linux,default-trigger = "mmc0";
				default-state = "off";
			};

			led@3 {
				label = "apq8016-sbc:green:user3";
				gpios = <&pm8916_gpios 1 GPIO_ACTIVE_HIGH>;
				linux,default-trigger = "mmc1";
				default-state = "off";
			};

			led@4 {
				label = "apq8016-sbc:green:user4";
				gpios = <&pm8916_gpios 2 GPIO_ACTIVE_HIGH>;
				linux,default-trigger = "none";
				panic-indicator;
				default-state = "off";
			};

			led@5 {
				label = "apq8016-sbc:yellow:wlan";
				gpios = <&pm8916_mpps 2 GPIO_ACTIVE_HIGH>;
				linux,default-trigger = "phy0tx";
				default-state = "off";
			};

			led@6 {
				label = "apq8016-sbc:blue:bt";
				gpios = <&pm8916_mpps 3 GPIO_ACTIVE_HIGH>;
				linux,default-trigger = "bt";
				default-state = "off";
			};
		};

		sdhci@7824000 {
			vmmc-supply = <&pm8916_l8>;
			vqmmc-supply = <&pm8916_l5>;

			pinctrl-names = "default", "sleep";
			pinctrl-0 = <&sdc1_clk_on &sdc1_cmd_on &sdc1_data_on>;
			pinctrl-1 = <&sdc1_clk_off &sdc1_cmd_off &sdc1_data_off>;
			status = "okay";
		};

		sdhci@7864000 {
			vmmc-supply = <&pm8916_l11>;
			vqmmc-supply = <&pm8916_l12>;

			pinctrl-names = "default", "sleep";
			pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdc2_cd_on>;
			pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off &sdc2_cd_off>;

			cd-gpios = <&msmgpio 38 0x1>;
			status = "okay";
		};

		usb@78d9000 {
			extcon = <&usb_id>;
			status = "okay";
			adp-disable;
			hnp-disable;
			srp-disable;
			dr_mode = "host";
			pinctrl-names = "default";
			pinctrl-0 = <&usb_sw_sel_pm>;
			ulpi {
				phy {
					v1p8-supply = <&pm8916_l7>;
					v3p3-supply = <&pm8916_l13>;
					extcon = <&usb_id>;
				};
			};
		};

		lpass@7708000 {
			status = "okay";
		};

		mdss@1a00000 {
			status = "okay";

			mdp@1a01000 {
				status = "okay";
			};

			dsi@1a98000 {
				status = "okay";

				vdda-supply = <&pm8916_l2>;
				vddio-supply = <&pm8916_l6>;

				ports {
					port@1 {
						endpoint {
							remote-endpoint = <&adv7533_in>;
							data-lanes = <0 1 2 3>;
						};
					};
				};
			};

			dsi-phy@1a98300 {
				status = "okay";

				vddio-supply = <&pm8916_l6>;
			};
		};

		lpass_codec: codec{
			status = "okay";
		};

		/*
		Internal Codec
			playback - Primary MI2S
			capture - Ter MI2S

		External Primary:
			playback - secondary MI2S
			capture - Quat MI2S

		External Secondary:
			playback - Quat MI2S
			capture - Quat MI2S

		*/

                sound: sound {
                        compatible = "qcom,apq8016-sbc-sndcard";
                        reg = <0x07702000 0x4>, <0x07702004 0x4>;
                        reg-names = "mic-iomux", "spkr-iomux";

                        status = "okay";
                        pinctrl-0 = <&cdc_pdm_lines_act &ext_sec_tlmm_lines_act &ext_mclk_tlmm_lines_act>;
                        pinctrl-1 = <&cdc_pdm_lines_sus &ext_sec_tlmm_lines_sus &ext_mclk_tlmm_lines_sus>;
                        pinctrl-names = "default", "sleep";
                        qcom,model = "DB410c";
                        qcom,audio-routing =
                                "AMIC2", "MIC BIAS Internal2",
                                "AMIC3", "MIC BIAS External1";
			external-dai-link@0 {
				link-name = "ADV7533";
				cpu { /* QUAT */
					sound-dai = <&lpass MI2S_QUATERNARY>;
				};
				codec {
					sound-dai = <&adv_bridge 0>;
				};
			};

                        internal-codec-playback-dai-link@0 {            /* I2S - Internal codec */
                                link-name = "WCD";
                                cpu { /* PRIMARY */
                                        sound-dai = <&lpass MI2S_PRIMARY>;
                                };
                                codec {
                                        sound-dai = <&lpass_codec 0>, <&wcd_codec 0>;
                                };
                        };

                        internal-codec-capture-dai-link@0 {             /* I2S - Internal codec */
                                link-name = "WCD-Capture";
                                cpu { /* PRIMARY */
                                        sound-dai = <&lpass MI2S_TERTIARY>;
                                };
                                codec {
                                        sound-dai = <&lpass_codec 1>, <&wcd_codec 1>;
                                };
                        };
                };

		spmi@200f000 {
			pm8916@0 {
				gpios@c000 {
					gpio-line-names =
						"USR_LED_3_CTRL",
						"USR_LED_4_CTRL",
						"USB_HUB_RESET_N_PM",
						"USB_SW_SEL_PM";
				};
				mpps@a000 {
					gpio-line-names =
						"VDD_PX_BIAS",
						"WLAN_LED_CTRL",
						"BT_LED_CTRL",
						"GPIO-F"; /* LS_EXP_GPIO_F, LSEC pin 28 */
				};
			};
		};

		wcnss@a21b000 {
			status = "okay";
		};
	};

	usb2513 {
		compatible = "smsc,usb3503";
		reset-gpios = <&pm8916_gpios 3 GPIO_ACTIVE_LOW>;
		initial-mode = <1>;
	};

	usb_id: usb-id {
		compatible = "linux,extcon-usb-gpio";
		vbus-gpio = <&msmgpio 121 GPIO_ACTIVE_HIGH>;
		pinctrl-names = "default";
		pinctrl-0 = <&usb_id_default>;
	};

	hdmi-out {
		compatible = "hdmi-connector";
		type = "a";

		port {
			hdmi_con: endpoint {
				remote-endpoint = <&adv7533_out>;
			};
		};
	};

	gpio_keys {
		compatible = "gpio-keys";
		#address-cells = <1>;
		#size-cells = <0>;
		autorepeat;

		pinctrl-names = "default";
		pinctrl-0 = <&msm_key_volp_n_default>;

		button@0 {
			label = "Volume Up";
			linux,code = <KEY_VOLUMEUP>;
			gpios = <&msmgpio 107 GPIO_ACTIVE_LOW>;
		};
	};
};

&wcd_codec {
        status = "okay";
        clocks = <&gcc GCC_CODEC_DIGCODEC_CLK>;
        clock-names = "mclk";
	qcom,mbhc-vthreshold-low = <75 150 237 450 500>;
	qcom,mbhc-vthreshold-high = <75 150 237 450 500>;
};

&smd_rpm_regulators {
	vdd_l1_l2_l3-supply = <&pm8916_s3>;
	vdd_l5-supply = <&pm8916_s3>;
	vdd_l4_l5_l6-supply = <&pm8916_s4>;
	vdd_l7-supply = <&pm8916_s4>;

	s1 {
		regulator-min-microvolt = <375000>;
		regulator-max-microvolt = <1562000>;
	};

	s3 {
		regulator-min-microvolt = <375000>;
		regulator-max-microvolt = <1562000>;
	};

	s4 {
		regulator-min-microvolt = <1800000>;
		regulator-max-microvolt = <1800000>;

		regulator-always-on;
		regulator-boot-on;
	};

	l1 {
		regulator-min-microvolt = <375000>;
		regulator-max-microvolt = <1525000>;
	};

	l2 {
		regulator-min-microvolt = <1200000>;
		regulator-max-microvolt = <1200000>;
	};

	l3 {
		regulator-min-microvolt = <375000>;
		regulator-max-microvolt = <1525000>;
	};

	l4 {
		regulator-min-microvolt = <1750000>;
		regulator-max-microvolt = <3337000>;
	};

	l5 {
		regulator-min-microvolt = <1750000>;
		regulator-max-microvolt = <3337000>;
	};

	l6 {
		regulator-min-microvolt = <1800000>;
		regulator-max-microvolt = <1800000>;
	};

	l7 {
		regulator-min-microvolt = <1750000>;
		regulator-max-microvolt = <3337000>;
	};

	l8 {
		regulator-min-microvolt = <1750000>;
		regulator-max-microvolt = <3337000>;
	};

	l9 {
		regulator-min-microvolt = <1750000>;
		regulator-max-microvolt = <3337000>;
	};

	l10 {
		regulator-min-microvolt = <1750000>;
		regulator-max-microvolt = <3337000>;
	};

	l11 {
		regulator-min-microvolt = <1750000>;
		regulator-max-microvolt = <3337000>;
	};

	l12 {
		regulator-min-microvolt = <1750000>;
		regulator-max-microvolt = <3337000>;
	};

	l13 {
		regulator-min-microvolt = <1750000>;
		regulator-max-microvolt = <3337000>;
	};

	l14 {
		regulator-min-microvolt = <1750000>;
		regulator-max-microvolt = <3337000>;
	};

	/**
	 * 1.8v required on LS expansion
	 * for mezzanine boards
	 */
	l15 {
		regulator-min-microvolt = <1750000>;
		regulator-max-microvolt = <3337000>;
		regulator-always-on;
	};

	l16 {
		regulator-min-microvolt = <1750000>;
		regulator-max-microvolt = <3337000>;
	};

	l17 {
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
	};

	l18 {
		regulator-min-microvolt = <1750000>;
		regulator-max-microvolt = <3337000>;
	};
};
