/* Copyright (c) 2012-2013, 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/ "msm8974-leds.dtsi"
/include/ "msm8974-camera-sensor-cdp.dtsi"

/ {
	aliases {
		spi0 = &spi_0;
	};
};

&soc {
	timer {
		clock-frequency = <5000000>;
	};

	serial@f995e000 {
		status = "ok";
	};

	usb@f9a55000 {
		status = "disable";
	};

	qcom,sdcc@f9824000 {
                qcom,clk-rates = <400000 19200000>;
        };

        qcom,sdcc@f98a4000 {
                qcom,clk-rates = <400000 19200000>;
        };

	qcom,sps@f998000 {
		status = "disable";
	};

	spi@f9924000 {
		status = "disable";
	};

	spi_0: spi@f9923000 { /* BLSP1 QUP1 */
		compatible = "qcom,spi-qup-v2";
		#address-cells = <1>;
		#size-cells = <0>;
		reg-names = "spi_physical", "spi_bam_physical";
		reg = <0xf9923000 0x1000>,
		      <0xf9904000 0xf000>;
		interrupt-names = "spi_irq", "spi_bam_irq";
		interrupts = <0 95 0>, <0 238 0>;
		spi-max-frequency = <19200000>;

		qcom,gpio-mosi = <&msmgpio 0 0>;
		qcom,gpio-miso = <&msmgpio 1 0>;
		qcom,gpio-clk  = <&msmgpio 3 0>;
		qcom,gpio-cs0  = <&msmgpio 9 0>;

		qcom,infinite-mode = <0>;
		qcom,use-bam;
		qcom,ver-reg-exists;
		qcom,bam-consumer-pipe-index = <12>;
		qcom,bam-producer-pipe-index = <13>;
		qcom,master-id = <86>;

		ethernet-switch@2 {
			compatible = "simtec,ks8851";
			reg = <2>;
			interrupt-parent = <&msmgpio>;
			interrupts = <90 0>;
			spi-max-frequency = <5000000>;
		};
	};

	i2c@f9966000 {
		status = "disable";
	};

	i2c@f9967000 {
		cell-index = <0>;
		compatible = "qcom,i2c-qup";
		reg = <0Xf9967000 0x1000>;
		reg-names = "qup_phys_addr";
		interrupts = <0 105 0>;
		interrupt-names = "qup_err_intr";
		qcom,i2c-bus-freq = <100000>;
		qcom,i2c-src-freq = <19200000>;
		gpios = <&msmgpio 83 0>, /* DAT  */
			<&msmgpio 84 0>; /* CLK */
	};

	slim@fe12f000 {
		status = "disable";
	};

	qcom,mdss_dsi@fd922800 {
		status = "disable";
	};

	qcom,spmi@fc4c0000 {
		status = "disable";
	};

	qcom,ssusb@F9200000 {
		status = "disable";
	};

	qcom,lpass@fe200000 {
		status = "disable";
	};

	qcom,pronto@fb21b000 {
		status = "disable";
	};

	qcom,mss@fc880000 {
		status = "disable";
	};

        qcom,kgsl-3d0@fdb00000 {
		status = "disabled";
	};
};

&gdsc_venus {
        status = "disabled";
};

&gdsc_mdss {
        status = "disabled";
};

&gdsc_jpeg {
        status = "disabled";
};

&gdsc_vfe {
        status = "disabled";
};

&gdsc_oxili_gx {
        status = "disabled";
};

&gdsc_oxili_cx {
        status = "disabled";
};

&gdsc_usb_hsic {
        status = "disabled";
};

&rpm_bus {
	rpm-standalone;
};
