/* Copyright (c) 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.
 */

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

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

	timer@f9020000 {
		clock-frequency = <5000000>;
	};

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

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

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

	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-cs2  = <&msmgpio 11 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 {
		status = "disable";
		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_jpeg {
        status = "disabled";
};

&gdsc_oxili_gx {
        status = "disabled";
};

&gdsc_oxili_cx {
        status = "disabled";
};

&gdsc_usb_hsic {
        status = "disabled";
};
