// SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
/*
 * Device Tree Source for the RZ/G2UL SMARC pincontrol parts
 *
 * Copyright (C) 2022 Renesas Electronics Corp.
 */

#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/pinctrl/rzg2l-pinctrl.h>

&pinctrl {
	pinctrl-0 = <&sound_clk_pins>;
	pinctrl-names = "default";

	can0_pins: can0 {
		pinmux = <RZG2L_PORT_PINMUX(1, 1, 3)>, /* TX */
			 <RZG2L_PORT_PINMUX(1, 2, 3)>; /* RX */
	};

#if (SW_ET0_EN_N)
	can0-stb-hog {
		gpio-hog;
		gpios = <RZG2L_GPIO(2, 2) GPIO_ACTIVE_HIGH>;
		output-low;
		line-name = "can0_stb";
	};
#endif

	can1_pins: can1 {
		pinmux = <RZG2L_PORT_PINMUX(2, 0, 3)>, /* TX */
			 <RZG2L_PORT_PINMUX(2, 1, 3)>; /* RX */
	};

#if (SW_ET0_EN_N)
	can1-stb-hog {
		gpio-hog;
		gpios = <RZG2L_GPIO(2, 3) GPIO_ACTIVE_HIGH>;
		output-low;
		line-name = "can1_stb";
	};
#endif

	i2c0_pins: i2c0 {
		pins = "RIIC0_SDA", "RIIC0_SCL";
		input-enable;
	};

	i2c1_pins: i2c1 {
		pins = "RIIC1_SDA", "RIIC1_SCL";
		input-enable;
	};

	scif0_pins: scif0 {
		pinmux = <RZG2L_PORT_PINMUX(6, 4, 6)>, /* TxD */
			 <RZG2L_PORT_PINMUX(6, 3, 6)>; /* RxD */
	};

	sd1-pwr-en-hog {
		gpio-hog;
		gpios = <RZG2L_GPIO(0, 3) GPIO_ACTIVE_HIGH>;
		output-high;
		line-name = "sd1_pwr_en";
	};

	sdhi1_pins: sd1 {
		sd1_data {
			pins = "SD1_DATA0", "SD1_DATA1", "SD1_DATA2", "SD1_DATA3";
			power-source = <3300>;
		};

		sd1_ctrl {
			pins = "SD1_CLK", "SD1_CMD";
			power-source = <3300>;
		};

		sd1_mux {
			pinmux = <RZG2L_PORT_PINMUX(0, 2, 1)>; /* SD1_CD */
		};
	};

	sdhi1_pins_uhs: sd1_uhs {
		sd1_data_uhs {
			pins = "SD1_DATA0", "SD1_DATA1", "SD1_DATA2", "SD1_DATA3";
			power-source = <1800>;
		};

		sd1_ctrl_uhs {
			pins = "SD1_CLK", "SD1_CMD";
			power-source = <1800>;
		};

		sd1_mux_uhs {
			pinmux = <RZG2L_PORT_PINMUX(0, 2, 1)>; /* SD1_CD */
		};
	};

	sound_clk_pins: sound_clk {
		pins = "AUDIO_CLK1", "AUDIO_CLK2";
		input-enable;
	};

	spi1_pins: spi1 {
		pinmux = <RZG2L_PORT_PINMUX(4, 0, 2)>, /* CK */
			 <RZG2L_PORT_PINMUX(4, 1, 2)>, /* MOSI */
			 <RZG2L_PORT_PINMUX(4, 2, 2)>, /* MISO */
			 <RZG2L_PORT_PINMUX(4, 3, 2)>; /* SSL */
	};

	ssi1_pins: ssi1 {
		pinmux = <RZG2L_PORT_PINMUX(3, 0, 2)>, /* BCK */
			 <RZG2L_PORT_PINMUX(3, 1, 2)>, /* RCK */
			 <RZG2L_PORT_PINMUX(3, 2, 2)>, /* TXD */
			 <RZG2L_PORT_PINMUX(3, 3, 2)>; /* RXD */
	};

	usb0_pins: usb0 {
		pinmux = <RZG2L_PORT_PINMUX(5, 0, 1)>, /* VBUS */
			 <RZG2L_PORT_PINMUX(5, 2, 1)>, /* OVC */
			 <RZG2L_PORT_PINMUX(5, 3, 1)>; /* OTG_ID */
	};

	usb1_pins: usb1 {
		pinmux = <RZG2L_PORT_PINMUX(5, 4, 5)>, /* OVC */
			 <RZG2L_PORT_PINMUX(6, 0, 1)>; /* VBUS */
	};
};
