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

/*
 * As a general rule, only version-specific property overrides should be placed
 * inside this file. However, device definitions should be placed inside the
 * msm9625.dtsi file.
 */

/include/ "msm9625.dtsi"

&soc {
	qcom,msm-imem@fc42a800 {
		compatible = "qcom,msm-imem";
		reg = <0xfc42a800 0x1000>; /* Address and size of IMEM */
	};

	android_usb@fc42a8c8 {
		compatible = "qcom,android-usb";
		reg = <0xfc42a8c8 0xc8>;
		qcom,android-usb-swfi-latency = <100>;
	};

	qcom,bam_dmux@fc834000 {
		compatible = "qcom,bam_dmux";
		reg = <0xfc834000 0x7000>;
		interrupts = <0 29 1>;
	};
};

&hsic_host {
	qcom,disable-park-mode;
};

&ipa_hw {
	qcom,ipa-hw-ver = <1>; /* IPA h-w revision */
};

/* CoreSight */
&tmc_etr {
	qcom,reset-flush-race;
	qcom,byte-cntr-absent;
};

&stm {
	qcom,write-64bit;
};

&sfpb_spinlock {
	status = "disable";
};

&ldrex_spinlock {
	status = "ok";
};

&hsic_host {
	qcom,phy-sof-workaround;
};
