// 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;
		mmc2 = &sdhi3;
	};

	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>;
	};

	wlan_en: regulator-wlan_en {
		compatible = "regulator-fixed";
		regulator-name = "wlan-en-regulator";

		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;

		gpio = <&gpio_exp_74 4 GPIO_ACTIVE_HIGH>;
		startup-delay-us = <70000>;
		enable-active-high;
	};
};

&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 {
	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>;
						};
					};
				};
			};
		};
	};

	/* 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_extlpn {
			gpio-hog;
			gpios = <9 GPIO_ACTIVE_HIGH>;
			output-high;
			line-name = "OTG EXTLPn";
		};

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

		sd-wifi-mux {
			gpio-hog;
			gpios = <5 GPIO_ACTIVE_HIGH>;
			output-low;	/* Connect WL1837 */
			line-name = "SD WiFi mux";
		};

		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>;
	};
};

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

	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>;
	};
};

&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";
	};

	sdhi3_pins: sdhi3 {
		groups = "sdhi3_data4", "sdhi3_ctrl";
		function = "sdhi3";
		power-source = <3300>;
	};

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

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

&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>;
			};
		};
	};
};

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

	status = "okay";
};

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

	vmmc-supply = <&wlan_en>;
	vqmmc-supply = <&wlan_en>;
	bus-width = <4>;
	no-1-8-v;
	non-removable;
	cap-power-off-card;
	keep-power-in-suspend;
	max-frequency = <26000000>;
	status = "okay";

	#address-cells = <1>;
	#size-cells = <0>;
	wlcore: wlcore@2 {
		compatible = "ti,wl1837";
		reg = <2>;
		interrupt-parent = <&gpio1>;
		interrupts = <25 IRQ_TYPE_EDGE_FALLING>;
	};
};

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

&ssi4 {
	shared-pin;
};

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

	status = "okay";
};

&xhci0 {
	status = "okay";
};
