/*
 * 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.
 */

/dts-v1/;

#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/interrupt-controller/irq.h>
#include "imx6ul.dtsi"

#define PAD_CONFIG__DEFAULT     	0x00001008
#define PAD_CONFIG__ADC         	0x00000008
#define PAD_CONFIG__GPIO        	0x40001008
#define PAD_CONFIG__I2C         	0x40001808
#define PAD_CONFIG__GPIO_PU_22K 	0x4000F008
#define PAD_CONFIG__GPIO_PD_100K 	0x40003008

/ {
	memory {
		reg = <0 0>; /* Determined and Populated by Bootloader */
	};

	soc {
		busfreq {
			status = "disabled";
		};
	};

	aliases {
		serial-ble0 = &uart3;
		serial-sensormcu0 = &uart2;
	};

	gpio-keys {
		compatible = "gpio-keys";
		reg = <0 0>;

		hu_button: HU-button {
			pinctrl-names = "default";
			pinctrl-0 = <&pinctrl_hu_button>;
			label = "HU Button";
			linux,code = <KEY_ENTER>;
			gpio-key,wakeup;
		};
	};

	gpio-wakeups {
		compatible = "gpio-keys";
		reg = <0 0>;
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_gpio_wakeup>;

		ble_wakeup: ble-wakeup {
			label = "BLE Wakeup";
			linux,code = <KEY_WAKEUP>;
			gpio-key,wakeup;
		};

		sensor_mcu_wakeup: sensor-mcu-wakeup {
			label = "Sensor MCU Wakeup";
			linux,code = <KEY_WAKEUP>;
			gpio-key,wakeup;
		};

	};

	brcm-oob {
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_brcm_oob>;
	};

	brcm_wlan: brcm-wlan {
		compatible = "brcm,bcmdhd_wlan";
		reg = <0 0>;
	};

	ble-rfkill {
		compatible = "rfkill-gpio";
		reg = <0 0>;
		rfkill-name = "BLE";
		rfkill-type = <2>;
		reset-gpios = <&gpio2 1 GPIO_ACTIVE_HIGH>;
	};

	wifi_gpios: brcm_wifi {
		compatible = "nestlabs,gpio-exporter";
		reg = <0 0>;
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_wifi_gpios>;
		output-names = "reset";
	};

	em35x_gpios: em35x-gpios {
		compatible = "nestlabs,gpio-exporter";
		reg = <0 0>;
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_em35x_gpios>;
		output-names = "reset", "wake";
		output-gpios = <&gpio1 7 GPIO_ACTIVE_HIGH>,
		               <&gpio1 9 GPIO_ACTIVE_HIGH>;
		input-names = "irq";
		input-gpios = <&gpio1 6 GPIO_ACTIVE_HIGH>;
	};

	sensor_mcu_gpios: sensor-mcu-gpios {
		compatible = "nestlabs,gpio-exporter";
		reg = <0 0>;
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_sensor_mcu_gpios>;
	};

	ble_gpios: ble-gpios {
		compatible = "nestlabs,gpio-exporter";
		reg = <0 0>;
	};

	adc_ref: fixedregulator@0 {
		compatible = "regulator-fixed";
		reg = <0 0>;
		regulator-name = "fixed-supply";
		regulator-always-on;
	};

battery: battery@0 {
		 compatible = "adc-div-battery";
		 status = "okay";
	 };
};

/* Zigbee SPI */
&ecspi4 {
	fsl,spi-num-chipselects = <1>;
	cs-gpios = <&gpio2 15 GPIO_ACTIVE_LOW>;
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_ecspi4_1>;
	status = "okay";

	spidev_em35x@0 {
		compatible = "silabs,em35x";
		spi-max-frequency = <20000000>;
		reg = <0>;
	};
};

&gpc {
	fsl,cpu_pupscr_sw2iso = <0x1>;
	fsl,cpu_pupscr_sw = <0x0>;
	fsl,cpu_pdnscr_iso2sw = <0x1>;
	fsl,cpu_pdnscr_iso = <0x1>;
	fsl,ldo-bypass = <0>; /* DCDC, ldo-enable */
};

/* PWM8 for Piezo */
&pwm8 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_pwm8_0>;
	clocks = <&clks IMX6UL_CLK_PWM8>,
	         <&clks IMX6UL_CLK_PWM8>;
	status = "okay";
};

/* I2C2 */
&i2c2 {
	clock-frequency = <100000>;
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_i2c2_1>;
	status = "okay";
	/* LM3530 (LED Driver) @ 0x63 */
	backlight: lm3695@63 {
		compatible= "national,lm3695";
		reg = <0x63>;
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_backlight>;
		max-brightness = <2047>;
		default-brightness = <1800>;
		single-string;
		boost-freq;
		high-voltage;
		ramp-rise-time = <2000>;
		ramp-fall-time = <2000>;
		fb-device = "mxsfb";
	};
};

/*lcd driver spi */
&ecspi2 {
	pinctrl-0 = <&pinctrl_ecspi2_1>;
	pinctrl-names = "default";
	status = "okay";
};

&lcdif {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_lcdif_dat_1 &pinctrl_lcdif_ctrl_1>;
	status = "okay";
};

/* Pinmux Controller */
&iomuxc {
	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&pinctrl_hog>, <&pinctrl_hog_extra>;
	pinctrl-1 = <&pinctrl_sleep_hog>;

	i2c2 {
		pinctrl_i2c2_1: i2c2grp-1 {
			fsl,pins = <
				MX6UL_PAD_GPIO1_IO00__I2C2_SCL          PAD_CONFIG__I2C         /* I2C_AP_PIN_LCD_SCK */
				MX6UL_PAD_GPIO1_IO01__I2C2_SDA          PAD_CONFIG__I2C         /* I2C_AP_PIN_LCD_SDA */
			>;
		};
	};

	pwm8 { // Piezo pwm
		pinctrl_pwm8_0: pwm8grp-0 {
			fsl,pins = <
				MX6UL_PAD_ENET1_RX_ER__PWM8_OUT         PAD_CONFIG__DEFAULT     /* PWM_PIEZO_DRIVE */
			>;
		};
	};


	uart3 { /* serial BLE */
		pinctrl_uart3_1: uart3grp-1 {
			fsl,pins = <
				MX6UL_PAD_UART3_TX_DATA__UART3_DCE_TX   PAD_CONFIG__DEFAULT     /* UART_AP_TO_BLE */
				MX6UL_PAD_UART3_RX_DATA__UART3_DCE_RX   PAD_CONFIG__DEFAULT     /* UART_BLE_TO_AP */
				MX6UL_PAD_UART3_RTS_B__UART3_DCE_RTS    PAD_CONFIG__DEFAULT     /* UART_FLOW_BLE_TO_AP */
				MX6UL_PAD_UART3_CTS_B__UART3_DCE_CTS    PAD_CONFIG__DEFAULT     /* UART_FLOW_AP_TO_BLE */
			>;
		};
	};

	uart2 { //BP_UART
		pinctrl_uart2_1: uart2grp-1 {
			fsl,pins = <
				MX6UL_PAD_UART2_RX_DATA__UART2_DCE_RX   PAD_CONFIG__DEFAULT     /* UART_MCU_TO_AP */
				MX6UL_PAD_UART2_TX_DATA__UART2_DCE_TX   PAD_CONFIG__DEFAULT     /* UART_AP_TO_MCU */
				MX6UL_PAD_UART2_CTS_B__UART2_DCE_CTS    PAD_CONFIG__DEFAULT     /* UART_FLOW_AP_TO_MCU */
				MX6UL_PAD_UART2_RTS_B__UART2_DCE_RTS    PAD_CONFIG__DEFAULT     /* UART_FLOW_MCU_TO_AP */
			>;
		};
	};

	usdhc2 { /* WIFI SDIO */
		pinctrl_usdhc2_1: usdhc2grp {
			fsl,pins = <
				MX6UL_PAD_CSI_VSYNC__USDHC2_CLK         PAD_CONFIG__DEFAULT     /* AP_SDIO_WIFI_CLK */
				MX6UL_PAD_CSI_HSYNC__USDHC2_CMD         PAD_CONFIG__DEFAULT     /* AP_SDIO_WIFI_CMD */
				MX6UL_PAD_CSI_DATA00__USDHC2_DATA0      PAD_CONFIG__DEFAULT     /* AP_SDIO_WIFI_DATA0 */
				MX6UL_PAD_CSI_DATA01__USDHC2_DATA1      PAD_CONFIG__DEFAULT     /* AP_SDIO_WIFI_DATA1 */
				MX6UL_PAD_CSI_DATA02__USDHC2_DATA2      PAD_CONFIG__DEFAULT     /* AP_SDIO_WIFI_DATA2 */
				MX6UL_PAD_CSI_DATA03__USDHC2_DATA3      PAD_CONFIG__DEFAULT     /* AP_SDIO_WIFI_DATA3 */
			>;
		};
	};

	lcdif1 {
		/* Set Hi-Z on all LCD data pins, as there are external pulls */
		pinctrl_lcdif_dat_1: lcdifdatgrp-1 {
			fsl,pins = <
				MX6UL_PAD_LCD_DATA00__LCDIF_DATA00      PAD_CONFIG__DEFAULT     /* LCD_DATA0 */
				MX6UL_PAD_LCD_DATA01__LCDIF_DATA01      PAD_CONFIG__DEFAULT     /* LCD_DATA1 */
				MX6UL_PAD_LCD_DATA02__LCDIF_DATA02      PAD_CONFIG__DEFAULT     /* LCD_DATA2 */
				MX6UL_PAD_LCD_DATA03__LCDIF_DATA03      PAD_CONFIG__DEFAULT     /* LCD_DATA3 */
				MX6UL_PAD_LCD_DATA04__LCDIF_DATA04      PAD_CONFIG__DEFAULT     /* LCD_DATA4 */
				MX6UL_PAD_LCD_DATA05__LCDIF_DATA05      PAD_CONFIG__DEFAULT     /* LCD_DATA5 */
				MX6UL_PAD_LCD_DATA06__LCDIF_DATA06      PAD_CONFIG__DEFAULT     /* LCD_DATA6 */
				MX6UL_PAD_LCD_DATA07__LCDIF_DATA07      PAD_CONFIG__DEFAULT     /* LCD_DATA7 */
				MX6UL_PAD_LCD_DATA08__LCDIF_DATA08      PAD_CONFIG__DEFAULT     /* LCD_DATA8 */
				MX6UL_PAD_LCD_DATA09__LCDIF_DATA09      PAD_CONFIG__DEFAULT     /* LCD_DATA9 */
				MX6UL_PAD_LCD_DATA10__LCDIF_DATA10      PAD_CONFIG__DEFAULT     /* LCD_DATA10 */
				MX6UL_PAD_LCD_DATA11__LCDIF_DATA11      PAD_CONFIG__DEFAULT     /* LCD_DATA11 */
				MX6UL_PAD_LCD_DATA12__LCDIF_DATA12      PAD_CONFIG__DEFAULT     /* LCD_DATA12 */
				MX6UL_PAD_LCD_DATA13__LCDIF_DATA13      PAD_CONFIG__DEFAULT     /* LCD_DATA13 */
				MX6UL_PAD_LCD_DATA14__LCDIF_DATA14      PAD_CONFIG__DEFAULT     /* LCD_DATA14 */
				MX6UL_PAD_LCD_DATA15__LCDIF_DATA15      PAD_CONFIG__DEFAULT     /* LCD_DATA15 */
				MX6UL_PAD_LCD_DATA16__LCDIF_DATA16      PAD_CONFIG__DEFAULT     /* LCD_DATA16 */
				MX6UL_PAD_LCD_DATA17__LCDIF_DATA17      PAD_CONFIG__DEFAULT     /* LCD_DATA17 */
				MX6UL_PAD_LCD_DATA18__LCDIF_DATA18      PAD_CONFIG__DEFAULT     /* LCD_DATA18 */
				MX6UL_PAD_LCD_DATA19__LCDIF_DATA19      PAD_CONFIG__DEFAULT     /* LCD_DATA19 */
				MX6UL_PAD_LCD_DATA20__LCDIF_DATA20      PAD_CONFIG__DEFAULT     /* LCD_DATA20 */
				MX6UL_PAD_LCD_DATA21__LCDIF_DATA21      PAD_CONFIG__DEFAULT     /* LCD_DATA21 */
				MX6UL_PAD_LCD_DATA22__LCDIF_DATA22      PAD_CONFIG__DEFAULT     /* LCD_DATA22 */
				MX6UL_PAD_LCD_DATA23__LCDIF_DATA23      PAD_CONFIG__DEFAULT     /* LCD_DATA23 */
			>;
		};

		/* Set weak pullups on all LCD control pins */
		pinctrl_lcdif_ctrl_1: lcdifctrlgrp-1 {
			fsl,pins = <
				MX6UL_PAD_LCD_CLK__LCDIF_CLK            PAD_CONFIG__DEFAULT     /* LCD_CLK */
				MX6UL_PAD_LCD_ENABLE__LCDIF_ENABLE      PAD_CONFIG__DEFAULT     /* LCD_ENABLE */
				MX6UL_PAD_LCD_VSYNC__LCDIF_VSYNC        PAD_CONFIG__DEFAULT     /* LCD_VSYNC */
				MX6UL_PAD_LCD_HSYNC__LCDIF_HSYNC        PAD_CONFIG__DEFAULT     /* LCD_HSYNC */
				MX6UL_PAD_LCD_RESET__GPIO3_IO04         PAD_CONFIG__GPIO        /* LCD_RESET */
			>;
		};
	};

	HU-button {
		pinctrl_hu_button: hu-button-grp {
			/* Board Specific */
		};
	};

	gpio-wakeup {
		pinctrl_gpio_wakeup: gpio-wakeup-grp {
			/* Board Specific */
		};
	};

	brcm-oob {
		pinctrl_brcm_oob: brcm-wlan-grp {
			/* Board Specific */
		};
	};

	wifi-gpios {
		pinctrl_wifi_gpios: wifi-gpios-grp {
			/* Board Specific */
		};
	};

	sensor-mcu-gpios {
		pinctrl_sensor_mcu_gpios: sensor-mcu-gpios-grp {
			/* Board Specific */
		};
	};

	backlight {
		pinctrl_backlight: backlight-grp {
			/* Board Specific */
		};
	};

	hog {
		pinctrl_hog: hoggrp {
			fsl,pins = <
				MX6UL_PAD_UART4_RX_DATA__GPIO1_IO29     PAD_CONFIG__GPIO        /* SPI2_LCD_CS_L*/
				MX6UL_PAD_ENET2_RX_ER__GPIO2_IO15       PAD_CONFIG__GPIO        /* SPI_6LO_CS */
				MX6UL_PAD_ENET1_RX_DATA1__GPIO2_IO01    PAD_CONFIG__GPIO        /* BLE_RST_L */
				MX6UL_PAD_ENET1_TX_DATA1__GPIO2_IO04    PAD_CONFIG__GPIO        /* SAMPLE_VBAT_AP */
				MX6UL_PAD_ENET1_TX_CLK__GPIO2_IO06      PAD_CONFIG__GPIO        /* PIEZO_EN_L */
				MX6UL_PAD_ENET2_TX_DATA0__GPIO2_IO11    PAD_CONFIG__GPIO_PU_22K /* INT_AP_TO_BLE */
			>;
		};

		pinctrl_hog_extra: hog-extra-grp {
			/* Board Specific */
		};

		pinctrl_sleep_hog: hog-sleep-grp {
			fsl,pins = <
				MX6UL_PAD_ENET2_TX_DATA0__GPIO2_IO11    PAD_CONFIG__GPIO_PD_100K /* INT_AP_TO_BLE */
			>;
		};

	};

	ecspi2 { /*LCD SPI*/
		pinctrl_ecspi2_1: ecspi2grp-1 {
			fsl,pins = <
				MX6UL_PAD_UART5_RX_DATA__ECSPI2_MISO    PAD_CONFIG__DEFAULT     /* SPI_AP_LCD_MISO */
				MX6UL_PAD_UART5_TX_DATA__ECSPI2_MOSI    PAD_CONFIG__DEFAULT     /* SPI_AP_LCD_MOSI */
				MX6UL_PAD_UART4_TX_DATA__ECSPI2_SCLK    PAD_CONFIG__DEFAULT     /* SPI_AP_LCD_CLK */
			>;
		};
	};
	ecspi4 { /*6lowpan SPI*/
		pinctrl_ecspi4_1: ecspi4grp-1 {
			fsl,pins = <
				MX6UL_PAD_ENET2_TX_CLK__ECSPI4_MISO     PAD_CONFIG__DEFAULT     /* SPI_6LO_MISO */
				MX6UL_PAD_ENET2_TX_EN__ECSPI4_MOSI      PAD_CONFIG__DEFAULT     /* SPI_6LO_MOSI */
				MX6UL_PAD_ENET2_TX_DATA1__ECSPI4_SCLK   PAD_CONFIG__DEFAULT     /* SPI_6LO_SCLK */
			>;
		};
	};

	em35x-gpios {
		pinctrl_em35x_gpios: em35x-gpios-grp {
			fsl,pins = <
				MX6UL_PAD_GPIO1_IO07__GPIO1_IO07        PAD_CONFIG__GPIO        /* 6LO_RESET_L */
				MX6UL_PAD_GPIO1_IO06__GPIO1_IO06        PAD_CONFIG__GPIO        /* INT_6LO_TO_AP */
				MX6UL_PAD_GPIO1_IO09__GPIO1_IO09        PAD_CONFIG__GPIO        /* INT_AP_TO_6LO */
			>;
		};
	};
};

/* Bluetooth UART */
&uart3 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_uart3_1>;
	fsl,uart-has-rtscts;
	status = "okay";
};

/* BP UART */
&uart2 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_uart2_1>;
	fsl,uart-has-rtscts;
	status = "okay";
};

/* Debug USB (Device) */
&usbotg1 {
	pinctrl-names = "default";
	dr_mode = "peripheral";
	imx-usb-charger-detection;
	status = "okay";
};

/* WIFI SDIO */
&usdhc2 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_usdhc2_1>;
	non-removable;
	keep-power-in-suspend;
	enable-sdio-wakeup;
	status = "okay";
	brcm_fmac: brcm-fmac {
		reg = <1>;
		compatible = "brcm,bcm4329-fmac";
		interrupt-names = "host-wake";
	};
};

/* GPMI NAND */
&gpmi {
	status = "okay";
	nand-on-flash-bbt; /* Need to reserve NAND_BBT_SCAN_MAXBLOCKS at end of NAND */

	partition@0-a {
		label = "nand0";
		reg = <0x0 0x20000000>;
	};

	partition@0-b {
		label = "u-boot";
		reg = <0x0 0x00400000>;
	};
	partition@00400000 {
		label = "ubipart";
		reg = <0x00400000 0x1F400000>;
	};

	partition@1F800000 {
		label = "oopsdata";
		reg = <0x1F800000 0x780000>;
	};
};

