/*
 * Copyright (C) 2015 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 "flintstone-proto2-mlb.dtsi"
#include "flintstone-proto2-kpb.dtsi"

/ {
	model = "NestLabs Flintstone Proto2 Board";
	compatible = "nestlabs,flintstone-proto2", "fsl,imx6sx";

	mcu-gpios {
		reg = <0x0 0>;
		compatible = "nestlabs,gpio-exporter";
		input-names = "mcudatagpio";
		input-gpios = <&gpio6 12 GPIO_ACTIVE_HIGH>;
		output-names = "mcuresetgpio", "mcubootgpio";
		output-gpios = <&gpio6 16 GPIO_ACTIVE_HIGH &gpio6 13 GPIO_ACTIVE_HIGH>;
	};

    aliases {
        serial-sensormcu0 = &uart5;
    };
};

&iomuxc {
	pinctrl-names = "default";
	pinctrl-0 = <&mlb_hogs &kpb_hogs &mcu_hogs>;

	hog {
		mcu_hogs: mcu-hogs {
			fsl,pins = <
				MX6SX_PAD_SD4_DATA2__GPIO6_IO_16	0x400018b0	/* MCU reset */
				MX6SX_PAD_SD4_CLK__GPIO6_IO_12		0x400010b0	/* MCU to SoC interrupt */
				MX6SX_PAD_SD4_CMD__GPIO6_IO_13		0x400010b0	/* MCU boot */
			>;
		};
	};

	uart5 {
		pinctrl_uart5_2: uart5grp-2 {
			fsl,pins = <
				MX6SX_PAD_SD4_DATA4__UART5_RX		0x1b0b1
				MX6SX_PAD_SD4_DATA5__UART5_TX		0x1b0b1
				MX6SX_PAD_SD4_DATA6__UART5_RTS_B	0x1b0b1
				MX6SX_PAD_SD4_DATA7__UART5_CTS_B	0x1b0b1
			>;
		};
	};
};

/* MCU UART */
&uart5 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_uart5_2>;
	fsl,uart-has-rtscts;
	fsl,uart-can-wake;
	status = "okay";
};
