/*
 * Copyright (C) 2015 Rabeeh Khoury <rabeeh@solid-run.com>
 *
 * This file is dual-licensed: you can use it either under the terms
 * of the GPL or the X11 license, at your option. Note that this dual
 * licensing only applies to this file, and not this project as a
 * whole.
 *
 *  a) This file is free software; you can redistribute it and/or
 *     modify it under the terms of the GNU General Public License
 *     version 2 as published by the Free Software Foundation.
 *
 *     This file is distributed in the hope that it will be useful,
 *     but WITHOUT ANY WARRANTY; without even the implied warranty of
 *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *     GNU General Public License for more details.
 *
 * Or, alternatively,
 *
 *  b) Permission is hereby granted, free of charge, to any person
 *     obtaining a copy of this software and associated documentation
 *     files (the "Software"), to deal in the Software without
 *     restriction, including without limitation the rights to use,
 *     copy, modify, merge, publish, distribute, sublicense, and/or
 *     sell copies of the Software, and to permit persons to whom the
 *     Software is furnished to do so, subject to the following
 *     conditions:
 *
 *     The above copyright notice and this permission notice shall be
 *     included in all copies or substantial portions of the Software.
 *
 *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 *     OTHER DEALINGS IN THE SOFTWARE.
 */
#include <dt-bindings/sound/fsl-imx-audmux.h>

/ {
	/* Will be filled by the bootloader */
	memory@10000000 {
		device_type = "memory";
		reg = <0x10000000 0>;
	};

	chosen {
		stdout-path = &uart1;
	};

	ir_recv: ir-receiver {
		compatible = "gpio-ir-receiver";
		gpios = <&gpio7 9 GPIO_ACTIVE_LOW>;
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_hummingboard2_gpio7_9>;
		linux,rc-map-name = "rc-rc6-mce";
	};

	v_3v2: regulator-v-3v2 {
		compatible = "regulator-fixed";
		regulator-always-on;
		regulator-max-microvolt = <3300000>;
		regulator-min-microvolt = <3300000>;
		regulator-name = "v_3v2";
	};

	v_5v0: regulator-v-5v0 {
		compatible = "regulator-fixed";
		regulator-always-on;
		regulator-max-microvolt = <5000000>;
		regulator-min-microvolt = <5000000>;
		regulator-name = "v_5v0";
	};

	vcc_1p8: regulator-vcc-1p8 {
		compatible = "regulator-fixed";
		regulator-always-on;
		regulator-max-microvolt = <1800000>;
		regulator-min-microvolt = <1800000>;
		regulator-name = "vcc_1p8";
		vin-supply = <&v_3v2>;
	};

	v_sd: regulator-v-sd {
		compatible = "regulator-fixed";
		gpio = <&gpio4 30 GPIO_ACTIVE_HIGH>;
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_hummingboard2_vmmc>;
		regulator-boot-on;
		regulator-max-microvolt = <3300000>;
		regulator-min-microvolt = <3300000>;
		regulator-name = "v_sd";
		startup-delay-us = <1000>;
		vin-supply = <&v_3v2>;
	};

	v_usb1: regulator-v-usb1 {
		compatible = "regulator-fixed";
		enable-active-high;
		gpio = <&gpio3 22 GPIO_ACTIVE_HIGH>;
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_hummingboard2_usbotg_vbus>;
		regulator-always-on;
		regulator-max-microvolt = <5000000>;
		regulator-min-microvolt = <5000000>;
		regulator-name = "v_usb1";
		vin-supply = <&v_5v0>;
	};

	v_usb2: regulator-v-usb2 {
		/* USB hub port 1 */
		compatible = "regulator-fixed";
		enable-active-high;
		gpio = <&gpio1 0 GPIO_ACTIVE_HIGH>;
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_hummingboard2_usbh1_vbus>;
		regulator-always-on;
		regulator-max-microvolt = <5000000>;
		regulator-min-microvolt = <5000000>;
		regulator-name = "v_usb2";
		vin-supply = <&v_5v0>;
	};

	v_usb3: regulator-v-usb3 {
		/* USB hub port 3 */
		compatible = "regulator-fixed";
		enable-active-high;
		gpio = <&gpio2 13 GPIO_ACTIVE_HIGH>;
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_hummingboard2_usbh2_vbus>;
		regulator-always-on;
		regulator-max-microvolt = <5000000>;
		regulator-min-microvolt = <5000000>;
		regulator-name = "v_usb3";
		vin-supply = <&v_5v0>;
	};

	v_usb4: regulator-v-usb4 {
		/* USB hub port 4 */
		compatible = "regulator-fixed";
		enable-active-high;
		gpio = <&gpio7 10 GPIO_ACTIVE_HIGH>;
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_hummingboard2_usbh3_vbus>;
		regulator-always-on;
		regulator-max-microvolt = <5000000>;
		regulator-min-microvolt = <5000000>;
		regulator-name = "v_usb4";
		vin-supply = <&v_5v0>;
	};

	audio: sound-sgtl5000 {
		compatible = "simple-audio-card";
		simple-audio-card,name = "On-board Codec";
		simple-audio-card,format = "i2s";
		simple-audio-card,bitclock-master = <&sound_codec>;
		simple-audio-card,frame-master = <&sound_codec>;
		simple-audio-card,widgets =
			"Microphone", "Mic Jack",
			"Headphone", "Headphone Jack";
		simple-audio-card,routing =
			"MIC_IN", "Mic Jack",
			"Mic Jack", "Mic Bias",
			"Headphone Jack", "HP_OUT";

		sound_cpu: simple-audio-card,cpu {
			sound-dai = <&ssi1>;
		};

		sound_codec: simple-audio-card,codec {
			sound-dai = <&sgtl5000>;
		};
	};
};

&audmux {
	status = "okay";

	ssi1 {
		fsl,audmux-port = <0>;
		fsl,port-config = <
			(IMX_AUDMUX_V2_PTCR_SYN |
			 IMX_AUDMUX_V2_PTCR_TFSEL(4) |
			 IMX_AUDMUX_V2_PTCR_TCSEL(4) |
			 IMX_AUDMUX_V2_PTCR_TFSDIR |
			 IMX_AUDMUX_V2_PTCR_TCLKDIR)
			 IMX_AUDMUX_V2_PDCR_RXDSEL(4)
		>;
	};

	pins5 {
		fsl,audmux-port = <4>;
		fsl,port-config = <
			IMX_AUDMUX_V2_PTCR_SYN
			IMX_AUDMUX_V2_PDCR_RXDSEL(0)
		>;
	};
};

&ecspi2 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_hummingboard2_ecspi2>;
	cs-gpios = <&gpio2 26 GPIO_ACTIVE_LOW>;
	status = "okay";
};

&hdmi {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_hummingboard2_hdmi>;
	ddc-i2c-bus = <&i2c2>;
	status = "okay";
};

&i2c1 {
	clock-frequency = <100000>;
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_hummingboard2_i2c1>;
	status = "okay";

	pcf8523: rtc@68 {
		compatible = "nxp,pcf8523";
		reg = <0x68>;
	};

	sgtl5000: codec@a {
		clocks = <&clks IMX6QDL_CLK_CKO>;
		compatible = "fsl,sgtl5000";
		#sound-dai-cells = <0>;
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_hummingboard2_sgtl5000>;
		reg = <0x0a>;
		VDDA-supply = <&v_3v2>;
		VDDD-supply = <&vcc_1p8>;
		VDDIO-supply = <&v_3v2>;
	};
};

&i2c2 {
	clock-frequency = <100000>;
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_hummingboard2_i2c2>;
	status = "okay";
};

&i2c3 {
	clock-frequency = <100000>;
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_hummingboard2_i2c3>;
	status = "okay";
};

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

	hummingboard2 {
		pinctrl_hog: hoggrp {
		fsl,pins = <
				/*
				 * 36 pin headers GPIO description. The pins
				 * numbering as following -
				 *
				 * 	3.2v	5v	74	75
				 *	73	72	71	70
				 *	69	68	67	66
				 *
				 *	77	78	79	76
				 *	65	64	61	60
				 *	53	52	51	50
				 *	49	48	166	132
				 *	95	94	90	91
				 *	GND	54	24	204
				 *
				 * The GPIO numbers can be extracted using
				 * signal name from below.
				 * Example -
				 * MX6QDL_PAD_EIM_DA10__GPIO3_IO10 is
				 * GPIO(3,10) which is (3-1)*32+10 = gpio 74
				 *
				 * i.e. The mapping of GPIO(X,Y) to Linux gpio
				 * number is : gpio number = (X-1) * 32 + Y
				 */
				/* DI1_PIN15 */
				MX6QDL_PAD_EIM_DA10__GPIO3_IO10 0x400130b1
				/* DI1_PIN02 */
				MX6QDL_PAD_EIM_DA11__GPIO3_IO11 0x400130b1
				/* DISP1_DATA00 */
				MX6QDL_PAD_EIM_DA9__GPIO3_IO09 0x400130b1
				/* DISP1_DATA01 */
				MX6QDL_PAD_EIM_DA8__GPIO3_IO08 0x400130b1
				/* DISP1_DATA02 */
				MX6QDL_PAD_EIM_DA7__GPIO3_IO07 0x400130b1
				/* DISP1_DATA03 */
				MX6QDL_PAD_EIM_DA6__GPIO3_IO06 0x400130b1
				/* DISP1_DATA04 */
				MX6QDL_PAD_EIM_DA5__GPIO3_IO05 0x400130b1
				/* DISP1_DATA05 */
				MX6QDL_PAD_EIM_DA4__GPIO3_IO04 0x400130b1
				/* DISP1_DATA06 */
				MX6QDL_PAD_EIM_DA3__GPIO3_IO03 0x400130b1
				/* DISP1_DATA07 */
				MX6QDL_PAD_EIM_DA2__GPIO3_IO02 0x400130b1
				/* DI1_D0_CS */
				MX6QDL_PAD_EIM_DA13__GPIO3_IO13 0x400130b1
				/* DI1_D1_CS */
				MX6QDL_PAD_EIM_DA14__GPIO3_IO14 0x400130b1
				/* DI1_PIN01 */
				MX6QDL_PAD_EIM_DA15__GPIO3_IO15 0x400130b1
				/* DI1_PIN03 */
				MX6QDL_PAD_EIM_DA12__GPIO3_IO12 0x400130b1
				/* DISP1_DATA08 */
				MX6QDL_PAD_EIM_DA1__GPIO3_IO01 0x400130b1
				/* DISP1_DATA09 */
				MX6QDL_PAD_EIM_DA0__GPIO3_IO00 0x400130b1
				/* DISP1_DATA10 */
				MX6QDL_PAD_EIM_EB1__GPIO2_IO29 0x400130b1
				/* DISP1_DATA11 */
				MX6QDL_PAD_EIM_EB0__GPIO2_IO28 0x400130b1
				/* DISP1_DATA12 */
				MX6QDL_PAD_EIM_A17__GPIO2_IO21 0x400130b1
				/* DISP1_DATA13 */
				MX6QDL_PAD_EIM_A18__GPIO2_IO20 0x400130b1
				/* DISP1_DATA14 */
				MX6QDL_PAD_EIM_A19__GPIO2_IO19 0x400130b1
				/* DISP1_DATA15 */
				MX6QDL_PAD_EIM_A20__GPIO2_IO18 0x400130b1
				/* DISP1_DATA16 */
				MX6QDL_PAD_EIM_A21__GPIO2_IO17 0x400130b1
				/* DISP1_DATA17 */
				MX6QDL_PAD_EIM_A22__GPIO2_IO16 0x400130b1
				/* DISP1_DATA18 */
				MX6QDL_PAD_EIM_A23__GPIO6_IO06 0x400130b1
				/* DISP1_DATA19 */
				MX6QDL_PAD_EIM_A24__GPIO5_IO04 0x400130b1
				/* DISP1_DATA20 */
				MX6QDL_PAD_EIM_D31__GPIO3_IO31 0x400130b1
				/* DISP1_DATA21 */
				MX6QDL_PAD_EIM_D30__GPIO3_IO30 0x400130b1
				/* DISP1_DATA22 */
				MX6QDL_PAD_EIM_D26__GPIO3_IO26 0x400130b1
				/* DISP1_DATA23 */
				MX6QDL_PAD_EIM_D27__GPIO3_IO27 0x400130b1
				/* DI1_DISP_CLK */
				MX6QDL_PAD_EIM_A16__GPIO2_IO22 0x400130b1
				/* SPDIF_IN */
				MX6QDL_PAD_ENET_RX_ER__GPIO1_IO24 0x400130b1
				/* SPDIF_OUT */
				MX6QDL_PAD_GPIO_17__GPIO7_IO12 0x400130b1

				/* MikroBUS GPIO pin number 10 */
				MX6QDL_PAD_EIM_LBA__GPIO2_IO27 0x400130b1
			>;
		};

		pinctrl_hummingboard2_ecspi2: hummingboard2-ecspi2grp {
			fsl,pins = <
				MX6QDL_PAD_EIM_OE__ECSPI2_MISO	0x100b1
				MX6QDL_PAD_EIM_CS1__ECSPI2_MOSI	0x100b1
				MX6QDL_PAD_EIM_CS0__ECSPI2_SCLK	0x100b1
				MX6QDL_PAD_EIM_RW__GPIO2_IO26	0x000b1 /* CS */
			>;
		};

		pinctrl_hummingboard2_gpio7_9: hummingboard2-gpio7_9 {
			fsl,pins = <
				MX6QDL_PAD_SD4_CMD__GPIO7_IO09 0x80000000
			>;
		};

		pinctrl_hummingboard2_hdmi: hummingboard2-hdmi {
			fsl,pins = <
				MX6QDL_PAD_KEY_ROW2__HDMI_TX_CEC_LINE 0x1f8b0
			>;
		};

		pinctrl_hummingboard2_i2c1: hummingboard2-i2c1 {
			fsl,pins = <
				MX6QDL_PAD_EIM_D21__I2C1_SCL 0x4001b8b1
				MX6QDL_PAD_EIM_D28__I2C1_SDA 0x4001b8b1
			>;
		};

		pinctrl_hummingboard2_i2c2: hummingboard2-i2c2 {
			fsl,pins = <
				MX6QDL_PAD_KEY_COL3__I2C2_SCL 0x4001b8b1
				MX6QDL_PAD_KEY_ROW3__I2C2_SDA 0x4001b8b1
			>;
		};

		pinctrl_hummingboard2_i2c3: hummingboard2-i2c3 {
			fsl,pins = <
				MX6QDL_PAD_EIM_D17__I2C3_SCL 0x4001b8b1
				MX6QDL_PAD_EIM_D18__I2C3_SDA 0x4001b8b1
			>;
		};

		pinctrl_hummingboard2_mipi: hummingboard2_mipi {
			fsl,pins = <
				MX6QDL_PAD_SD4_DAT2__GPIO2_IO10 0x4001b8b1
				MX6QDL_PAD_KEY_COL4__GPIO4_IO14 0x4001b8b1
				MX6QDL_PAD_NANDF_CS2__CCM_CLKO2 0x130b0
			>;
		};

		pinctrl_hummingboard2_pcie_reset: hummingboard2-pcie-reset {
			fsl,pins = <
				MX6QDL_PAD_SD4_DAT3__GPIO2_IO11 0x1b0b1
			>;
		};

		pinctrl_hummingboard2_pwm1: pwm1grp {
			fsl,pins = <
				MX6QDL_PAD_DISP0_DAT8__PWM1_OUT 0x1b0b1
			>;
		};

		pinctrl_hummingboard2_pwm3: pwm3grp {
			fsl,pins = <
				MX6QDL_PAD_SD4_DAT1__PWM3_OUT 0x1b0b1
			>;
		};

		pinctrl_hummingboard2_sgtl5000: hummingboard2-sgtl5000 {
			fsl,pins = <
				MX6QDL_PAD_DISP0_DAT19__AUD5_RXD 0x130b0
				MX6QDL_PAD_KEY_COL0__AUD5_TXC 0x130b0
				MX6QDL_PAD_KEY_ROW0__AUD5_TXD 0x110b0
				MX6QDL_PAD_KEY_COL1__AUD5_TXFS 0x130b0
				MX6QDL_PAD_GPIO_5__CCM_CLKO1 0x130b0
			>;
		};

		pinctrl_hummingboard2_usbh1_vbus: hummingboard2-usbh1-vbus {
			fsl,pins = <MX6QDL_PAD_GPIO_0__GPIO1_IO00 0x1b0b0>;
		};

		pinctrl_hummingboard2_usbh2_vbus: hummingboard2-usbh2-vbus {
			fsl,pins = <MX6QDL_PAD_SD4_DAT5__GPIO2_IO13 0x1b0b0>;
		};

		pinctrl_hummingboard2_usbh3_vbus: hummingboard2-usbh3-vbus {
			fsl,pins = <MX6QDL_PAD_SD4_CLK__GPIO7_IO10 0x1b0b0>;
		};

		pinctrl_hummingboard2_usbotg_id: hummingboard2-usbotg-id {
			/*
			 * We want it pulled down for a fixed host connection.
			 */
			fsl,pins = <MX6QDL_PAD_GPIO_1__USB_OTG_ID 0x13059>;
		};

		pinctrl_hummingboard2_usbotg_vbus: hummingboard2-usbotg-vbus {
			fsl,pins = <MX6QDL_PAD_EIM_D22__GPIO3_IO22 0x1b0b0>;
		};

		pinctrl_hummingboard2_usdhc2_aux: hummingboard2-usdhc2-aux {
			fsl,pins = <
				MX6QDL_PAD_GPIO_4__GPIO1_IO04    0x1f071
				MX6QDL_PAD_KEY_ROW1__SD2_VSELECT 0x1b071
			>;
		};

		pinctrl_hummingboard2_usdhc2: hummingboard2-usdhc2 {
			fsl,pins = <
				MX6QDL_PAD_SD2_CMD__SD2_CMD    0x17059
				MX6QDL_PAD_SD2_CLK__SD2_CLK    0x10059
				MX6QDL_PAD_SD2_DAT0__SD2_DATA0 0x17059
				MX6QDL_PAD_SD2_DAT1__SD2_DATA1 0x17059
				MX6QDL_PAD_SD2_DAT2__SD2_DATA2 0x17059
				MX6QDL_PAD_SD2_DAT3__SD2_DATA3 0x13059
			>;
		};

		pinctrl_hummingboard2_usdhc2_100mhz: hummingboard2-usdhc2-100mhz {
			fsl,pins = <
				MX6QDL_PAD_SD2_CMD__SD2_CMD    0x170b9
				MX6QDL_PAD_SD2_CLK__SD2_CLK    0x100b9
				MX6QDL_PAD_SD2_DAT0__SD2_DATA0 0x170b9
				MX6QDL_PAD_SD2_DAT1__SD2_DATA1 0x170b9
				MX6QDL_PAD_SD2_DAT2__SD2_DATA2 0x170b9
				MX6QDL_PAD_SD2_DAT3__SD2_DATA3 0x130b9
			>;
		};

		pinctrl_hummingboard2_usdhc2_200mhz: hummingboard2-usdhc2-200mhz {
			fsl,pins = <
				MX6QDL_PAD_SD2_CMD__SD2_CMD    0x170f9
				MX6QDL_PAD_SD2_CLK__SD2_CLK    0x100f9
				MX6QDL_PAD_SD2_DAT0__SD2_DATA0 0x170f9
				MX6QDL_PAD_SD2_DAT1__SD2_DATA1 0x170f9
				MX6QDL_PAD_SD2_DAT2__SD2_DATA2 0x170f9
				MX6QDL_PAD_SD2_DAT3__SD2_DATA3 0x130f9
			>;
		};

		pinctrl_hummingboard2_vmmc: hummingboard2-vmmc {
			fsl,pins = <
				MX6QDL_PAD_DISP0_DAT9__GPIO4_IO30 0x1b0b0
			>;
		};

		pinctrl_hummingboard2_uart3: hummingboard2-uart3 {
			fsl,pins = <
				MX6QDL_PAD_EIM_D25__UART3_TX_DATA	0x1b0b1
				MX6QDL_PAD_EIM_D24__UART3_RX_DATA	0x40013000
			>;
		};
	};
};

&pcie {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_hummingboard2_pcie_reset>;
	reset-gpio = <&gpio2 11 GPIO_ACTIVE_LOW>;
	status = "okay";
};

&pwm1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_hummingboard2_pwm1>;
	status = "okay";
};

&pwm3 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_hummingboard2_pwm3>;
	status = "okay";
};

&ssi1 {
	status = "okay";
};

&usbh1 {
	disable-over-current;
	status = "okay";
};

&usbotg {
	disable-over-current;
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_hummingboard2_usbotg_id>;
	vbus-supply = <&v_usb1>;
	status = "okay";
};

&usdhc2 {
	pinctrl-names = "default", "state_100mhz", "state_200mhz";
	pinctrl-0 = <
		&pinctrl_hummingboard2_usdhc2_aux
		&pinctrl_hummingboard2_usdhc2
	>;
	pinctrl-1 = <
		&pinctrl_hummingboard2_usdhc2_aux
		&pinctrl_hummingboard2_usdhc2_100mhz
	>;
	pinctrl-2 = <
		&pinctrl_hummingboard2_usdhc2_aux
		&pinctrl_hummingboard2_usdhc2_200mhz
	>;
	vmmc-supply = <&v_sd>;
	cd-gpios = <&gpio1 4 GPIO_ACTIVE_LOW>;
	status = "okay";
};

&uart3 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_hummingboard2_uart3>;
	status = "okay";
};

&vcc_3v3 {
	vin-supply = <&v_3v2>;
};
