/*
 * 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"

/ {
	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";
	};

	soc {
		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";
		};

		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";
				default-state = "off";
			};

			led@5 {
				label = "apq8016-sbc:yellow:wlan";
				gpios = <&pm8916_mpps 2 GPIO_ACTIVE_HIGH>;
				linux,default-trigger = "wlan";
				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@07824000 {
			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";
		};

		usb@78d9000 {
			extcon = <&usb_id>, <&usb_id>;
			status = "okay";
		};

		ehci@78d9000 {
			status = "okay";
		};

		phy@78d9000 {
			v1p8-supply = <&pm8916_l7>;
			v3p3-supply = <&pm8916_l13>;
			vddcx-supply = <&pm8916_s1>;
			extcon = <&usb_id>, <&usb_id>;
			dr_mode = "otg";
			status = "okay";
			switch-gpio = <&pm8916_gpios 4 GPIO_ACTIVE_HIGH>;
			pinctrl-names = "default";
			pinctrl-0 = <&usb_sw_sel_pm>;
		};

		lpass@07708000 {
			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>;
	};
};

&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 = <375000>;
		regulator-max-microvolt = <1525000>;
	};

	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 = <1750000>;
		regulator-max-microvolt = <3337000>;
	};

	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 = <1750000>;
		regulator-max-microvolt = <3337000>;
	};

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