/*
 * Copyright 2014 Toradex AG
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 */

#include "vf500.dtsi"
#include "vf-colibri.dtsi"

/ {
	model = "Toradex Colibri VF50 COM";
	compatible = "toradex,vf610-colibri_vf50", "fsl,vf500";

	memory {
		reg = <0x80000000 0x8000000>;
	};

	touchscreen: vf50-touchscreen {
		compatible = "toradex,vf50-touchscreen";
		io-channels = <&adc1 0>,<&adc0 0>,
				<&adc0 1>,<&adc1 2>;
		xp-gpios = <&gpio0 13 GPIO_ACTIVE_LOW>;
		xm-gpios = <&gpio2 29 GPIO_ACTIVE_HIGH>;
		yp-gpios = <&gpio0 12 GPIO_ACTIVE_LOW>;
		ym-gpios = <&gpio0 4 GPIO_ACTIVE_HIGH>;
		interrupt-parent = <&gpio0>;
		interrupts = <8 IRQ_TYPE_LEVEL_LOW>;
		pinctrl-names = "idle","default","gpios";
		pinctrl-0 = <&pinctrl_touchctrl_idle>;
		pinctrl-1 = <&pinctrl_touchctrl_default>;
		pinctrl-2 = <&pinctrl_touchctrl_gpios>;
		vf50-ts-min-pressure = <200>;
		status = "disabled";
	};
};

&iomuxc {
	vf610-colibri {
		pinctrl_touchctrl_idle: touchctrl_idle {
			fsl,pins = <
				VF610_PAD_PTA18__GPIO_8		0x006d
				VF610_PAD_PTA19__GPIO_9		0x006c
				>;
		};

		pinctrl_touchctrl_default: touchctrl_default {
			fsl,pins = <
				VF610_PAD_PTA18__ADC0_SE0	0x0040
				VF610_PAD_PTA19__ADC0_SE1	0x0040
				VF610_PAD_PTA16__ADC1_SE0	0x0040
				VF610_PAD_PTB2__ADC1_SE2	0x0040
				>;
		};

		pinctrl_touchctrl_gpios: touchctrl_gpios {
			fsl,pins = <
				VF610_PAD_PTA23__GPIO_13	0x22e9
				VF610_PAD_PTB23__GPIO_93	0x22e9
				VF610_PAD_PTA22__GPIO_12	0x22e9
				VF610_PAD_PTA11__GPIO_4		0x22e9
				>;
		};
	};
};
