/*
 * 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 = "bluetooth-power";
				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>;
	};
};
