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

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