/*
 * Device Tree Source for the Kingfisher (ULCB extension) board
 *
 * Copyright (C) 2017 Renesas Electronics Corp.
 * Copyright (C) 2017 Cogent Embedded, Inc.
 *
 * This file is licensed under the terms of the GNU General Public License
 * version 2.  This program is licensed "as is" without any warranty of any
 * kind, whether express or implied.
 */

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

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

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

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

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

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