/* Copyright (c) 2017, 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 {
	smp2pgpio_rdbg_2_in: qcom,smp2pgpio-rdbg-2-in {
		compatible = "qcom,smp2pgpio";
		qcom,entry-name = "rdbg";
		qcom,remote-pid = <2>;
		qcom,is-inbound;
		gpio-controller;
		#gpio-cells = <2>;
		interrupt-controller;
		#interrupt-cells = <2>;
	};

	qcom,smp2pgpio_client_rdbg_2_in {
		compatible = "qcom,smp2pgpio_client_rdbg_2_in";
		gpios = <&smp2pgpio_rdbg_2_in 0 0>;
	};

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

	qcom,smp2pgpio_client_rdbg_2_out {
		compatible = "qcom,smp2pgpio_client_rdbg_2_out";
		gpios = <&smp2pgpio_rdbg_2_out 0 0>;
	};

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

	qcom,smp2pgpio_client_rdbg_1_in {
		compatible = "qcom,smp2pgpio_client_rdbg_1_in";
		gpios = <&smp2pgpio_rdbg_1_in 0 0>;
	};

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

	qcom,smp2pgpio_client_rdbg_1_out {
		compatible = "qcom,smp2pgpio_client_rdbg_1_out";
		gpios = <&smp2pgpio_rdbg_1_out 0 0>;
	};

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

	qcom,smp2pgpio_client_rdbg_5_in {
		compatible = "qcom,smp2pgpio_client_rdbg_5_in";
		gpios = <&smp2pgpio_rdbg_5_in 0 0>;
	};

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

	qcom,smp2pgpio_client_rdbg_5_out {
		compatible = "qcom,smp2pgpio_client_rdbg_5_out";
		gpios = <&smp2pgpio_rdbg_5_out 0 0>;
	};
};
