/*
 * Copyright (C) 2016 Nest Labs, Inc.
 *
 * This program 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.
 */

#include "onyx-common.dtsi"

/ {
	model = "NestLabs Onyx Dev Board";
	compatible = "nestlabs,onyx-dev", "fsl,imx6ul";

	aliases {
		serial-S0 = &uart6;
	};

	/* Overlay the magwheel driver instead of the default ADC driver */
	soc {
		aips-bus@02100000 {
			magwheel: adc@02198000 {
				compatible = "nestlabs,vf610-adc-magwheel";
				pinctrl-0 = <&pinctrl_adc1>;
				vref-supply = <&adc_ref>;
				reg = <0x02198000 0x4000>;
				interrupts = <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>;
				clocks = <&clks IMX6UL_CLK_ADC1>;
				nestlabs,adc-channels-used = <2 3>;
				nestlabs,adc-channel-midpoints = <1965 2038>;
				hall-sensor-enable-gpios = <&gpio5 9 GPIO_ACTIVE_HIGH>;
				status = "okay";
				#io-channel-cells = <1>;
			};
		};
	};
};

&hu_button {
	gpios = <&gpio5 3 GPIO_ACTIVE_HIGH>;
};

&pinctrl_hu_button {
	fsl,pins = <
		MX6UL_PAD_SNVS_TAMPER3__GPIO5_IO03      PAD_CONFIG__GPIO        /* BUTTON */
	>;
};

&brcm_wlan {
	interrupts-extended = <&gpio4 17 IRQ_TYPE_LEVEL_HIGH>;
};

&brcm_fmac {
	interrupt-parent = <&gpio4>;
	interrupts = <17 IRQ_TYPE_LEVEL_HIGH>;
};

&pinctrl_brcm_oob {
	fsl,pins = <
		MX6UL_PAD_CSI_MCLK__GPIO4_IO17          PAD_CONFIG__GPIO        /* INT_WIFI_TO_AP*/
	>;
};

&wifi_gpios {
	output-gpios = <&gpio4 18 GPIO_ACTIVE_HIGH>;
};

&pinctrl_wifi_gpios {
	fsl,pins = <
		MX6UL_PAD_CSI_PIXCLK__GPIO4_IO18        PAD_CONFIG__GPIO        /* WIFI_RST_L */
	>;
};

&sensor_mcu_gpios {
	output-names = "reset";
	output-gpios = <&gpio1 18 GPIO_ACTIVE_HIGH>;
	input-names = "ok2boot";
	input-gpios = <&gpio2 5 GPIO_ACTIVE_HIGH>;
};

&pinctrl_sensor_mcu_gpios {
	fsl,pins = <
		MX6UL_PAD_UART1_CTS_B__GPIO1_IO18       PAD_CONFIG__GPIO        /* AP_TO_MCU_RST */
		MX6UL_PAD_ENET1_TX_EN__GPIO2_IO05       PAD_CONFIG__GPIO        /* MCU_TO_AP_OK2BOOT */
	>;
};

&backlight {
	enable-gpio = <&gpio5 8 GPIO_ACTIVE_HIGH>;
};

&pinctrl_backlight {
	fsl,pins = <
		MX6UL_PAD_SNVS_TAMPER8__GPIO5_IO08      PAD_CONFIG__GPIO        /* LCD_BLIGHT_EN */
	>;
};

/* A9 Debug UART */
&uart6 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_uart6>;
	status = "okay";
};

&battery {
	io-channels = <&magwheel 4>; /* GPIO01_IO4 */
	io-channel-names = "vbat";
	divider-r1-ohm = <604>; /* 60.4k */
	divider-r2-ohm = <402>; /* 40.2k */
	delay-us = <50000>;
	vbatt-adc-input-enable-gpios = <&gpio2 4 GPIO_ACTIVE_HIGH>;
};

&adc_ref{
	 regulator-min-microvolt = <1800000>;
	 regulator-max-microvolt = <1800000>;
};

&lcdif{
	display = <&samsung>;
	samsung: display {
		native-mode = <&timing0>;
		bits-per-pixel = <32>;
		buffers = <2>;
		bus-width = <24>;
		display-timings {
			timing0: 320x320{
				clock-frequency = <7180000>;
				hactive = <320>;
				vactive = <320>;
				hback-porch = <16>;
				hfront-porch = <16>;
				vback-porch = <8>;
				vfront-porch = <8>;
				hsync-len = <2>;
				vsync-len = <2>;
				hsync-active = <0>;
				vsync-active = <0>;
				de-active = <0>;
				pixelclk-active = <0>;
			};
		};
	};
};

/*lcd driver spi */
&ecspi2 {
	fsl,spi-num-chipselects = <1>;
	cs-gpios = <&gpio1 29 GPIO_ACTIVE_LOW>;
	s6d05a1: s6d05a1@0 {
		compatible = "samsung,s6d05a1";
		reg = <0>;
		spi-max-frequency = <10000000>;
		reset-gpios = <&gpio3 4 0>;
		x-mirror;
		y-mirror;
	};
};

&iomuxc {
	uart6 {
		pinctrl_uart6: uart6-grp {
			fsl,pins = <
				MX6UL_PAD_ENET2_RX_DATA0__UART6_DCE_TX  PAD_CONFIG__DEFAULT     /* UART_AP_TO_DBG */
				MX6UL_PAD_ENET2_RX_DATA1__UART6_DCE_RX  PAD_CONFIG__DEFAULT     /* UART_DBG_TO_AP */
			>;
		};
	};

	adc1 {
		pinctrl_adc1: adc1grp {
			fsl,pins = <
				MX6UL_PAD_GPIO1_IO02__GPIO1_IO02        PAD_CONFIG__ADC         /* ADC_HEF1_AP */
				MX6UL_PAD_GPIO1_IO03__GPIO1_IO03        PAD_CONFIG__ADC         /* ADC_HEF2_AP */
				MX6UL_PAD_GPIO1_IO04__GPIO1_IO04        PAD_CONFIG__ADC         /* ADC_VBAT_AP */
				MX6UL_PAD_SNVS_TAMPER9__GPIO5_IO09      PAD_CONFIG__GPIO        /* AP_HEF_EN */
			>;
		};
	};
};

/* Debug SD Card */
&usdhc1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_usdhc1>;
	cd-gpios = <&gpio5 7 GPIO_ACTIVE_HIGH>;
	wp-gpios = <&gpio5 5 GPIO_ACTIVE_HIGH>;
	status = "okay";
};

&iomuxc {
	usdhc1 {
		pinctrl_usdhc1: usdhc1-grp {
			fsl,pins = <
				MX6UL_PAD_SD1_CMD__USDHC1_CMD           PAD_CONFIG__DEFAULT     /* SD_CMD */
				MX6UL_PAD_SD1_CLK__USDHC1_CLK           PAD_CONFIG__DEFAULT     /* SD_CLK */
				MX6UL_PAD_SD1_DATA0__USDHC1_DATA0       PAD_CONFIG__DEFAULT     /* SD_DATA0 */
				MX6UL_PAD_SD1_DATA1__USDHC1_DATA1       PAD_CONFIG__DEFAULT     /* SD_DATA1 */
				MX6UL_PAD_SD1_DATA2__USDHC1_DATA2       PAD_CONFIG__DEFAULT     /* SD_DATA2 */
				MX6UL_PAD_SD1_DATA3__USDHC1_DATA3       PAD_CONFIG__DEFAULT     /* SD_DATA3 */
				MX6UL_PAD_SNVS_TAMPER5__GPIO5_IO05      PAD_CONFIG__GPIO        /* SD_CARD_WP_L */
				MX6UL_PAD_SNVS_TAMPER7__GPIO5_IO07      PAD_CONFIG__GPIO        /* SD_CARD_CD_L */
			>;
		};
	};
};
