// SPDX-License-Identifier: GPL-2.0
/*
 * Device Tree Source for the Kingfisher (ULCB extension) board
 *
 * Copyright (C) 2017 Renesas Electronics Corp.
 * Copyright (C) 2017 Cogent Embedded, Inc.
 */

/*
 * SSI-PCM3168A
 *	aplay   -D plughw:0,2 xxx.wav
 *	arecord -D plughw:0,3 xxx.wav
 */

/ {
	aliases {
		serial1 = &hscif0;
		serial2 = &scif1;
	};

	clksndsel: clksndsel {
		#clock-cells = <0>;
		compatible = "gpio-mux-clock";
		clocks = <&cs2000>, <&audio_clk_a>; /* clk8snd, clksnd */
		select-gpios = <&gpio_exp_75 13 GPIO_ACTIVE_HIGH>;
	};

	snd_3p3v: regulator-snd_3p3v {
		compatible = "regulator-fixed";
		regulator-name = "snd-3.3v";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
	};

	snd_vcc5v: regulator-snd_vcc5v {
		compatible = "regulator-fixed";
		regulator-name = "snd-vcc5v";
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
	};
};

&can0 {
	pinctrl-0 = <&can0_pins>;
	pinctrl-names = "default";
	status = "okay";
};

&can1 {
	pinctrl-0 = <&can1_pins>;
	pinctrl-names = "default";
	status = "okay";
};

&ehci0 {
	dr_mode = "otg";
	status = "okay";
};

&hscif0 {
	pinctrl-0 = <&hscif0_pins>;
	pinctrl-names = "default";
	uart-has-rtscts;

	status = "okay";
};

&hsusb {
	dr_mode = "otg";
	status = "okay";
};

&i2c2 {
	/* U11 */
	gpio_exp_74: gpio@74 {
		compatible = "ti,tca9539";
		reg = <0x74>;
		gpio-controller;
		#gpio-cells = <2>;
		interrupt-controller;
		interrupt-parent = <&gpio6>;
		interrupts = <8 IRQ_TYPE_EDGE_FALLING>;

		audio_out_off {
			gpio-hog;
			gpios = <0 GPIO_ACTIVE_HIGH>; /* P00 */
			output-high;
			line-name = "Audio_Out_OFF";
		};

		hub_pwen {
			gpio-hog;
			gpios = <6 GPIO_ACTIVE_HIGH>;
			output-high;
			line-name = "HUB pwen";
		};

		hub_rst {
			gpio-hog;
			gpios = <7 GPIO_ACTIVE_HIGH>;
			output-high;
			line-name = "HUB rst";
		};

		otg_offvbusn {
			gpio-hog;
			gpios = <8 GPIO_ACTIVE_HIGH>;
			output-low;
			line-name = "OTG OFFVBUSn";
		};

		otg_extlpn {
			gpio-hog;
			gpios = <9 GPIO_ACTIVE_HIGH>;
			output-high;
			line-name = "OTG EXTLPn";
		};

		snd_rst {
			gpio-hog;
			gpios = <15 GPIO_ACTIVE_HIGH>; /* P17 */
			output-high;
			line-name = "SND_RST";
		};
	};

	/* U5 */
	gpio_exp_75: gpio@75 {
		compatible = "ti,tca9539";
		reg = <0x75>;
		gpio-controller;
		#gpio-cells = <2>;
		interrupt-controller;
		interrupt-parent = <&gpio6>;
		interrupts = <4 IRQ_TYPE_EDGE_FALLING>;
	};

	i2cswitch2: i2c-switch@71 {
		compatible = "nxp,pca9548";
		#address-cells = <1>;
		#size-cells = <0>;
		reg = <0x71>;
		reset-gpios = <&gpio5 3 GPIO_ACTIVE_LOW>;

		/* Audio_SDA, Audio_SCL */
		i2c@7 {
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <7>;

			pcm3168a: audio-codec@44 {
				#sound-dai-cells = <0>;
				compatible = "ti,pcm3168a";
				reg = <0x44>;
				clocks = <&clksndsel>;
				clock-names = "scki";

				VDD1-supply	= <&snd_3p3v>;
				VDD2-supply	= <&snd_3p3v>;
				VCCAD1-supply	= <&snd_vcc5v>;
				VCCAD2-supply	= <&snd_vcc5v>;
				VCCDA1-supply	= <&snd_vcc5v>;
				VCCDA2-supply	= <&snd_vcc5v>;

				ports {
					#address-cells = <1>;
					#size-cells = <0>;
					mclk-fs = <512>;
					port@0 {
						reg = <0>;
						pcm3168a_endpoint_p: endpoint {
							remote-endpoint = <&rsnd_for_pcm3168a_play>;
							clocks = <&clksndsel>;
						};
					};
					port@1 {
						reg = <1>;
						pcm3168a_endpoint_c: endpoint {
							remote-endpoint = <&rsnd_for_pcm3168a_capture>;
							clocks = <&clksndsel>;
						};
					};
				};
			};
		};
	};
};

&i2c4 {
	gpio_exp_76: gpio@76 {
		compatible = "ti,tca9539";
		reg = <0x76>;
		gpio-controller;
		#gpio-cells = <2>;
		interrupt-controller;
		interrupt-parent = <&gpio7>;
		interrupts = <3 IRQ_TYPE_EDGE_FALLING>;
	};

	gpio_exp_77: gpio@77 {
		compatible = "ti,tca9539";
		reg = <0x77>;
		gpio-controller;
		#gpio-cells = <2>;
		interrupt-controller;
		interrupt-parent = <&gpio5>;
		interrupts = <9 IRQ_TYPE_EDGE_FALLING>;
	};

	i2cswitch4: i2c-switch@71 {
		compatible = "nxp,pca9548";
		#address-cells = <1>;
		#size-cells = <0>;
		reg = <0x71>;
		reset-gpios = <&gpio3 15 GPIO_ACTIVE_LOW>;
	};
};

&ohci0 {
	dr_mode = "otg";
	status = "okay";
};

&pcie_bus_clk {
	clock-frequency = <100000000>;
};

&pciec0 {
	status = "okay";
};

&pciec1 {
	status = "okay";
};

&pfc {
	can0_pins: can0 {
		groups = "can0_data_a";
		function = "can0";
	};

	can1_pins: can1 {
		groups = "can1_data";
		function = "can1";
	};

	hscif0_pins: hscif0 {
		groups = "hscif0_data", "hscif0_ctrl";
		function = "hscif0";
	};

	scif1_pins: scif1 {
		groups = "scif1_data_b", "scif1_ctrl";
		function = "scif1";
	};

	usb0_pins: usb0 {
		groups = "usb0";
		function = "usb0";
	};

	sound_pcm_pins: sound-pcm {
		groups = "ssi349_ctrl", "ssi3_data", "ssi4_data";
		function = "ssi";
	};
};

&scif1 {
	pinctrl-0 = <&scif1_pins>;
	pinctrl-names = "default";
	uart-has-rtscts;

	status = "okay";
};

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

	status = "okay";
};

&xhci0 {
	status = "okay";
};

&sound_card {
	dais = <&rsnd_port0	/* ak4613 */
		&rsnd_port1	/* HDMI0  */
		&rsnd_port2	/* pcm3168a playback */
		&rsnd_port3	/* pcm3168a capture  */
		>;
};

&rcar_sound {
	pinctrl-0 = <&sound_pins
		     &sound_clk_pins
		     &sound_pcm_pins>;

	ports {
		/* rsnd_port0/1 are on salvator-common */
		rsnd_port2: port@2 {
			reg = <2>;
			rsnd_for_pcm3168a_play: endpoint {
				remote-endpoint = <&pcm3168a_endpoint_p>;

				dai-format = "i2s";
				bitclock-master = <&rsnd_for_pcm3168a_play>;
				frame-master = <&rsnd_for_pcm3168a_play>;
				dai-tdm-slot-num = <8>;

				playback = <&ssi3>;
			};
		};
		rsnd_port3: port@3 {
			reg = <3>;
			rsnd_for_pcm3168a_capture: endpoint {
				remote-endpoint = <&pcm3168a_endpoint_c>;

				dai-format = "i2s";
				bitclock-master = <&rsnd_for_pcm3168a_capture>;
				frame-master = <&rsnd_for_pcm3168a_capture>;
				dai-tdm-slot-num = <6>;

				capture  = <&ssi4>;
			};
		};
	};
};

&ssi4 {
	shared-pin;
};
