/*
 * 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 Form Factor Dev Board";
	compatible = "nestlabs,onyx-ffd", "fsl,imx6ul";

	aliases {
		serial-S0 = &uart1;
	};
};

&hu_button {
	gpios = <&gpio2 8 GPIO_ACTIVE_LOW>;
};

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

&sensor_mcu_wakeup {
	gpios = <&gpio1 19 GPIO_ACTIVE_LOW>;
};

&pinctrl_gpio_wakeup {
	fsl,pins = <
		MX6UL_PAD_UART1_RTS_B__GPIO1_IO19       PAD_CONFIG__GPIO        /* INT_AP_TO_MCU (Repurposed) */
	>;
};

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

&pinctrl_brcm_wlan {
	fsl,pins = <
		MX6UL_PAD_SD1_CLK__GPIO2_IO17           PAD_CONFIG__GPIO        /* INT_WIFI_TO_AP*/
	>;
};

&wifi_gpios {
	output-gpios = <&gpio2 16 GPIO_ACTIVE_HIGH>;
};

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

&sensor_mcu_gpios {
	output-names = "reset";
	output-gpios = <&gpio1 18 GPIO_ACTIVE_LOW>;
	input-names = "detect#";
	input-gpios = <&gpio4 28 GPIO_ACTIVE_LOW>;
};

&pinctrl_sensor_mcu_gpios {
	fsl,pins = <
		MX6UL_PAD_UART1_CTS_B__GPIO1_IO18       PAD_CONFIG__GPIO        /* AP_TO_MCU_RST_L */
		MX6UL_PAD_CSI_DATA07__GPIO4_IO28        PAD_CONFIG__GPIO        /* BP_DETECT_L */
	>;
};

&backlight {
	enable-gpio = <&gpio4 16 GPIO_ACTIVE_HIGH>;
};

&pinctrl_backlight {
	fsl,pins = <
		MX6UL_PAD_NAND_DQS__GPIO4_IO16          PAD_CONFIG__GPIO        /* LCD_BL_EN */
	>;
};

&adc1 {
    pinctrl-names="default";
    pinctrl-0 = <&pinctrl_adc1>;
    #io-channel-cells = <1>;
    num-channels= <5>;
    vref-supply = <&adc_ref>;
    status = "okay";
};

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

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

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

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

&wdog1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_wdog>;
	fsl,wdog_b_poweroff;
};

&iomuxc {
	uart1 {
		pinctrl_uart1: uart1-grp {
			fsl,pins = <
				MX6UL_PAD_UART1_TX_DATA__UART1_DCE_TX   PAD_CONFIG__DEFAULT     /* UART_AP_TO_DBG */
				MX6UL_PAD_UART1_RX_DATA__UART1_DCE_RX   PAD_CONFIG__DEFAULT     /* UART_DBG_TO_AP */
			>;
		};
	};

	adc1 {
		pinctrl_adc1: adc1grp {
			fsl,pins = <
				MX6UL_PAD_GPIO1_IO04__GPIO1_IO04        PAD_CONFIG__GPIO        /* ADC_VBAT_AP */
			>;
		};
	};

	wdog {
		pinctrl_wdog: wdoggrp {
			fsl,pins = <
				MX6UL_PAD_GPIO1_IO08__WDOG1_WDOG_B      PAD_CONFIG__DEFAULT     /* PMIC_RSTIN */
			>;
		};
	};
};
