/* 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.
 */
&soc {
	qcom,smp2p-adsp {
		compatible = "qcom,smp2p";
		reg = <0xf9011008 0x4>;
		qcom,remote-pid = <2>;
		qcom,irq-bitmask = <0x400>;
		interrupts = <0 158 1>;
	};

	smp2pgpio_smp2p_7_in: qcom,smp2pgpio-smp2p-7-in {
		compatible = "qcom,smp2pgpio";
		qcom,entry-name = "smp2p";
		qcom,remote-pid = <7>;
		qcom,is-inbound;
		gpio-controller;
		#gpio-cells = <2>;
		interrupt-controller;
		#interrupt-cells = <2>;
	};

	qcom,smp2pgpio_test_smp2p_7_in {
		compatible = "qcom,smp2pgpio_test_smp2p_7_in";
		gpios = <&smp2pgpio_smp2p_7_in 0 0>;
	};

	smp2pgpio_smp2p_7_out: qcom,smp2pgpio-smp2p-7-out {
		compatible = "qcom,smp2pgpio";
		qcom,entry-name = "smp2p";
		qcom,remote-pid = <7>;
		gpio-controller;
		#gpio-cells = <2>;
		interrupt-controller;
		#interrupt-cells = <2>;
	};

	qcom,smp2pgpio_test_smp2p_7_out {
		compatible = "qcom,smp2pgpio_test_smp2p_7_out";
		gpios = <&smp2pgpio_smp2p_7_out 0 0>;
	};

	smp2pgpio_smp2p_2_in: qcom,smp2pgpio-smp2p-2-in {
		compatible = "qcom,smp2pgpio";
		qcom,entry-name = "smp2p";
		qcom,remote-pid = <2>;
		qcom,is-inbound;
		gpio-controller;
		#gpio-cells = <2>;
		interrupt-controller;
		#interrupt-cells = <2>;
	};

	qcom,smp2pgpio_test_smp2p_2_in {
		compatible = "qcom,smp2pgpio_test_smp2p_2_in";
		gpios = <&smp2pgpio_smp2p_2_in 0 0>;
	};

	smp2pgpio_smp2p_2_out: qcom,smp2pgpio-smp2p-2-out {
		compatible = "qcom,smp2pgpio";
		qcom,entry-name = "smp2p";
		qcom,remote-pid = <2>;
		gpio-controller;
		#gpio-cells = <2>;
		interrupt-controller;
		#interrupt-cells = <2>;
	};

	qcom,smp2pgpio_test_smp2p_2_out {
		compatible = "qcom,smp2pgpio_test_smp2p_2_out";
		gpios = <&smp2pgpio_smp2p_2_out 0 0>;
	};
};
