/*
 * Copyright (C) 2014 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.
 */

/* For now, just include the Proto dts file and override differences */
#include "flintstone-proto.dts"

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

	gpio-keys {

		/* This is actually the number 5 key now... */
		eight-key {
			label = "Five Key";
			linux,code = <6>; /* KEY_5 */
		};
	};


};

/* pinmux controller */
&iomuxc {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_hog &extra_pinctrl_hog>;

	hog {
		extra_pinctrl_hog: hoggrp2 {
			fsl,pins = <
				MX6SX_PAD_RGMII1_RXC__GPIO5_IO_5	0xc0000000	/* NFC OOB: interrupt from NFC */
				MX6SX_PAD_GPIO1_IO10__GPIO1_IO_10	0xc0000000	/* NFC OOB: firmware download */
				MX6SX_PAD_GPIO1_IO11__GPIO1_IO_11	0xc0000000	/* NFC OOB: enable */
			>;
		};
	};
};

/* nfc I2C */
&i2c2 {
	/* NFC */
	pn548@28 {
		compatible = "nxp,nxp-nci-i2c";
		reg = <0x28>;

		interrupt-parent = <&gpio5>;
		interrupts = <5 GPIO_ACTIVE_HIGH>;

		enable-gpios = <&gpio1 11 GPIO_ACTIVE_HIGH>;
		firmware-gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>;
	};
};

/* Keypad */
&kpp {
	linux,keymap = <0x00000002	/* KEY_1 */
			0x00010003	/* KEY_2 */
			0x00020004	/* KEY_3 */
			0x0003003b	/* KEY_F1 (HOME) */
			0x01000005	/* KEY_4 */
			0x0101003e	/* KEY_F4 (INFO) */
			0x01020007	/* KEY_6 */
			0x0103003d	/* KEY_F3 (AWAY) */
			0x02000008	/* KEY_7 */
			0x02010009	/* KEY_8 */
			0x0202000a	/* KEY_9 */
			0x0203003c	/* KEY_F2 (STAY) */
			0x0300009e	/* KEY_BACK */
			0x0301000b	/* KEY_0 */
			0x03020160>;	/* KEY_OK */
};

