// SPDX-License-Identifier: GPL-2.0-only
/*
 * Copyright (c) 2015, The Linux Foundation. All rights reserved.
 */

#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>, <&usb_id>;
			status = "okay";
			adp-disable;
			hnp-disable;
			srp-disable;
			dr_mode = "otg";
			pinctrl-names = "default", "device";
			pinctrl-0 = <&usb_sw_sel_pm &usb_hub_reset_pm>;
			pinctrl-1 = <&usb_sw_sel_pm_device &usb_hub_reset_pm_device>;
			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";
		id-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>;
		};
	};
};

&spmi_bus {
	pm8916_0: pm8916@0 {
		pon@800 {
			resin {
				compatible = "qcom,pm8941-resin";
				interrupts = <0x0 0x8 1 IRQ_TYPE_EDGE_BOTH>;
				debounce = <15625>;
				bias-pull-up;
				linux,code = <KEY_VOLUMEDOWN>;
			};
		};
	};
};

&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_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>;
		regulator-allow-set-load;
		regulator-system-load = <200000>;
	};

	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>;
	};
};
