// 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-hog {
			gpio-hog;
			gpios = <0 GPIO_ACTIVE_HIGH>; /* P00 */
			output-high;
			line-name = "Audio_Out_OFF";
		};

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

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

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

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

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

		snd-rst-hog {
			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";
};
