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

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

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

	hog {
		fct_hogs: fct-hogs {
			fsl,pins = <
				MX6SX_PAD_GPIO1_IO09__GPIO1_IO_9	0x000000b0	/* opt3001 interrupt */

				MX6SX_PAD_SD3_DATA0__GPIO7_IO_2		0x004000b0	/* led enable - keypad and info */

				MX6SX_PAD_QSPI1A_DATA2__GPIO4_IO_18	0x000000b0	/* led trigger - ring */
				MX6SX_PAD_SD3_CMD__GPIO7_IO_1		0x004000b0	/* led trigger - keypad */
				MX6SX_PAD_SD3_DATA2__GPIO7_IO_4		0x004000b0	/* led trigger - info */

				MX6SX_PAD_RGMII1_RXC__GPIO5_IO_5	0x000000b0	/* NFC OOB: interrupt from NFC */
				MX6SX_PAD_GPIO1_IO10__GPIO1_IO_10	0x000000b0	/* NFC OOB: firmware download */
				MX6SX_PAD_GPIO1_IO11__GPIO1_IO_11	0x000000b0	/* NFC OOB: enable */

				MX6SX_PAD_QSPI1B_DATA2__GPIO4_IO_26	0x000000b0	/* i2c2 sda */
				MX6SX_PAD_QSPI1B_DATA3__GPIO4_IO_27	0x000000b0	/* i2c2 scl */

				MX6SX_PAD_SD4_DATA4__GPIO6_IO_18	0x000000b0	/* uart 5 rx */
				MX6SX_PAD_SD4_DATA5__GPIO6_IO_19	0x000000b0	/* uart 5 tx */
				MX6SX_PAD_SD4_DATA6__GPIO6_IO_20	0x000000b0	/* uart 5 rts */
				MX6SX_PAD_SD4_DATA7__GPIO6_IO_21	0x000000b0	/* uart 5 cts */

				MX6SX_PAD_SD4_DATA2__GPIO6_IO_16	0x000000b0	/* MCU reset */
				MX6SX_PAD_SD4_CLK__GPIO6_IO_12		0x000000b0	/* MCU to SoC interrupt */
				MX6SX_PAD_SD4_CMD__GPIO6_IO_13		0x000000b0	/* MCU boot */

				MX6SX_PAD_KEY_COL0__GPIO2_IO_10		0x000000b0
				MX6SX_PAD_KEY_COL1__GPIO2_IO_11		0x000000b0
				MX6SX_PAD_KEY_COL2__GPIO2_IO_12		0x000000b0
				MX6SX_PAD_KEY_COL3__GPIO2_IO_13		0x000000b0
				MX6SX_PAD_KEY_ROW0__GPIO2_IO_15		0x000000b0
				MX6SX_PAD_KEY_ROW1__GPIO2_IO_16		0x000000b0
				MX6SX_PAD_KEY_ROW2__GPIO2_IO_17		0x000000b0
				MX6SX_PAD_KEY_ROW3__GPIO2_IO_18		0x000000b0
			>;
		};
	};
};
