/* 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.
 */
/ {
	qcom,smp2p-modem {
		compatible = "qcom,smp2p";
		reg = <0xf9011008 0x4>;
		qcom,remote-pid = <1>;
		qcom,irq-bitmask = <0x4000>;
		interrupts = <0 27 1>;
	};

	qcom,smp2p-adsp {
		compatible = "qcom,smp2p";
		reg = <0xf9011008 0x4>;
		qcom,remote-pid = <2>;
		qcom,irq-bitmask = <0x400>;
		interrupts = <0 158 1>;
	};

	qcom,smp2p-wcnss {
		compatible = "qcom,smp2p";
		reg = <0xf9011008 0x4>;
		qcom,remote-pid = <4>;
		qcom,irq-bitmask = <0x40000>;
		interrupts = <0 143 1>;
	};

	/* SMP2P Test Driver for inbound entries */
	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>;
	};

	/* SMP2P Test Driver for outbound entries */
	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>;
	};

	/* SMP2P Test Driver for modem inbound */
	smp2pgpio_smp2p_1_in: qcom,smp2pgpio-smp2p-1-in {
		compatible = "qcom,smp2pgpio";
		qcom,entry-name = "smp2p";
		qcom,remote-pid = <1>;
		qcom,is-inbound;
		gpio-controller;
		#gpio-cells = <2>;
		interrupt-controller;
		#interrupt-cells = <2>;
	};

	qcom,smp2pgpio_test_smp2p_1_in {
		compatible = "qcom,smp2pgpio_test_smp2p_1_in";
		gpios = <&smp2pgpio_smp2p_1_in 0 0>;
	};

	/* SMP2P Test Driver for modem output */
	smp2pgpio_smp2p_1_out: qcom,smp2pgpio-smp2p-1-out {
		compatible = "qcom,smp2pgpio";
		qcom,entry-name = "smp2p";
		qcom,remote-pid = <1>;
		gpio-controller;
		#gpio-cells = <2>;
		interrupt-controller;
		#interrupt-cells = <2>;
	};

	qcom,smp2pgpio_test_smp2p_1_out {
		compatible = "qcom,smp2pgpio_test_smp2p_1_out";
		gpios = <&smp2pgpio_smp2p_1_out 0 0>;
	};

	/* SMP2P SSR Driver for inbound entry from modem. */
	smp2pgpio_ssr_smp2p_1_in: qcom,smp2pgpio-ssr-smp2p-1-in {
		compatible = "qcom,smp2pgpio";
		qcom,entry-name = "slave-kernel";
		qcom,remote-pid = <1>;
		qcom,is-inbound;
		gpio-controller;
		#gpio-cells = <2>;
		interrupt-controller;
		#interrupt-cells = <2>;
	};

	/* SMP2P SSR Driver for outbound entry to modem */
	smp2pgpio_ssr_smp2p_1_out: qcom,smp2pgpio-ssr-smp2p-1-out {
		compatible = "qcom,smp2pgpio";
		qcom,entry-name = "master-kernel";
		qcom,remote-pid = <1>;
		gpio-controller;
		#gpio-cells = <2>;
		interrupt-controller;
		#interrupt-cells = <2>;
	};

	/* SMP2P Test Driver for adsp inbound */
	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>;
	};

	/* SMP2P Test Driver for adsp output */
	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>;
	};

	/* SMP2P Test Driver for wcnss inbound */
	smp2pgpio_smp2p_4_in: qcom,smp2pgpio-smp2p-4-in {
		compatible = "qcom,smp2pgpio";
		qcom,entry-name = "smp2p";
		qcom,remote-pid = <4>;
		qcom,is-inbound;
		gpio-controller;
		#gpio-cells = <2>;
		interrupt-controller;
		#interrupt-cells = <2>;
	};

	qcom,smp2pgpio_test_smp2p_4_in {
		compatible = "qcom,smp2pgpio_test_smp2p_4_in";
		gpios = <&smp2pgpio_smp2p_4_in 0 0>;
	};

	/* SMP2P Test Driver for wcnss output */
	smp2pgpio_smp2p_4_out: qcom,smp2pgpio-smp2p-4-out {
		compatible = "qcom,smp2pgpio";
		qcom,entry-name = "smp2p";
		qcom,remote-pid = <4>;
		gpio-controller;
		#gpio-cells = <2>;
		interrupt-controller;
		#interrupt-cells = <2>;
	};

	qcom,smp2pgpio_test_smp2p_4_out {
		compatible = "qcom,smp2pgpio_test_smp2p_4_out";
		gpios = <&smp2pgpio_smp2p_4_out 0 0>;
	};
};
