/*
 * Copyright 2013 Lothar Waßmann <LW@KARO-electronics.de>
 *
 * The code contained herein is licensed under the GNU General Public
 * License. You may obtain a copy of the GNU General Public License
 * Version 2 at the following locations:
 *
 * http://www.opensource.org/licenses/gpl-license.html
 * http://www.gnu.org/copyleft/gpl.html
 */

/dts-v1/;
#include "imx53-tx53.dtsi"
#include <dt-bindings/input/input.h>
#include <dt-bindings/pwm/pwm.h>

/ {
	model = "Ka-Ro electronics TX53 module (LCD)";
	compatible = "karo,tx53", "fsl,imx53";

	aliases {
		display = &display;
	};

	soc {
		display: display@di0 {
			compatible = "fsl,imx-parallel-display";
			interface-pix-fmt = "rgb24";
			pinctrl-names = "default";
			pinctrl-0 = <&pinctrl_rgb24_vga1>;
			status = "okay";

			port {
				display0_in: endpoint {
					remote-endpoint = <&ipu_di0_disp0>;
				};
			};

			display-timings {
				VGA {
					clock-frequency = <25200000>;
					hactive = <640>;
					vactive = <480>;
					hback-porch = <48>;
					hsync-len = <96>;
					hfront-porch = <16>;
					vback-porch = <31>;
					vsync-len = <2>;
					vfront-porch = <12>;
					hsync-active = <0>;
					vsync-active = <0>;
					de-active = <1>;
					pixelclk-active = <0>;
				};

				ETV570 {
					clock-frequency = <25200000>;
					hactive = <640>;
					vactive = <480>;
					hback-porch = <114>;
					hsync-len = <30>;
					hfront-porch = <16>;
					vback-porch = <32>;
					vsync-len = <3>;
					vfront-porch = <10>;
					hsync-active = <0>;
					vsync-active = <0>;
					de-active = <1>;
					pixelclk-active = <0>;
				};

				ET0350 {
					clock-frequency = <6413760>;
					hactive = <320>;
					vactive = <240>;
					hback-porch = <34>;
					hsync-len = <34>;
					hfront-porch = <20>;
					vback-porch = <15>;
					vsync-len = <3>;
					vfront-porch = <4>;
					hsync-active = <0>;
					vsync-active = <0>;
					de-active = <1>;
					pixelclk-active = <0>;
				};

				ET0430 {
					clock-frequency = <9009000>;
					hactive = <480>;
					vactive = <272>;
					hback-porch = <2>;
					hsync-len = <41>;
					hfront-porch = <2>;
					vback-porch = <2>;
					vsync-len = <10>;
					vfront-porch = <2>;
					hsync-active = <0>;
					vsync-active = <0>;
					de-active = <1>;
					pixelclk-active = <1>;
				};

				ET0500 {
					clock-frequency = <33264000>;
					hactive = <800>;
					vactive = <480>;
					hback-porch = <88>;
					hsync-len = <128>;
					hfront-porch = <40>;
					vback-porch = <33>;
					vsync-len = <2>;
					vfront-porch = <10>;
					hsync-active = <0>;
					vsync-active = <0>;
					de-active = <1>;
					pixelclk-active = <0>;
				};

				ET0700 { /* same as ET0500 */
					clock-frequency = <33264000>;
					hactive = <800>;
					vactive = <480>;
					hback-porch = <88>;
					hsync-len = <128>;
					hfront-porch = <40>;
					vback-porch = <33>;
					vsync-len = <2>;
					vfront-porch = <10>;
					hsync-active = <0>;
					vsync-active = <0>;
					de-active = <1>;
					pixelclk-active = <0>;
				};

				ETQ570 {
					clock-frequency = <6596040>;
					hactive = <320>;
					vactive = <240>;
					hback-porch = <38>;
					hsync-len = <30>;
					hfront-porch = <30>;
					vback-porch = <16>;
					vsync-len = <3>;
					vfront-porch = <4>;
					hsync-active = <0>;
					vsync-active = <0>;
					de-active = <1>;
					pixelclk-active = <0>;
				};
			};
		};
	};

	backlight: backlight {
		compatible = "pwm-backlight";
		pwms = <&pwm2 0 500000 PWM_POLARITY_INVERTED>;
		power-supply = <&reg_3v3>;
		brightness-levels = <
			  0  1  2  3  4  5  6  7  8  9
			 10 11 12 13 14 15 16 17 18 19
			 20 21 22 23 24 25 26 27 28 29
			 30 31 32 33 34 35 36 37 38 39
			 40 41 42 43 44 45 46 47 48 49
			 50 51 52 53 54 55 56 57 58 59
			 60 61 62 63 64 65 66 67 68 69
			 70 71 72 73 74 75 76 77 78 79
			 80 81 82 83 84 85 86 87 88 89
			 90 91 92 93 94 95 96 97 98 99
			100
		>;
		default-brightness-level = <50>;
	};

	regulators {
		reg_lcd_pwr: regulator@5 {
			compatible = "regulator-fixed";
			reg = <5>;
			regulator-name = "LCD POWER";
			regulator-min-microvolt = <3300000>;
			regulator-max-microvolt = <3300000>;
			gpio = <&gpio2 31 GPIO_ACTIVE_HIGH>;
			enable-active-high;
			regulator-boot-on;
		};

		reg_lcd_reset: regulator@6 {
			compatible = "regulator-fixed";
			reg = <6>;
			regulator-name = "LCD RESET";
			regulator-min-microvolt = <3300000>;
			regulator-max-microvolt = <3300000>;
			gpio = <&gpio3 29 GPIO_ACTIVE_HIGH>;
			enable-active-high;
			regulator-boot-on;
		};
	};
};

&i2c3 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_i2c3>;
	status = "okay";

	sgtl5000: codec@0a {
		compatible = "fsl,sgtl5000";
		reg = <0x0a>;
		VDDA-supply = <&reg_2v5>;
		VDDIO-supply = <&reg_3v3>;
		clocks = <&mclk>;
	};

	polytouch: edt-ft5x06@38 {
		compatible = "edt,edt-ft5x06";
		reg = <0x38>;
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_edt_ft5x06_1>;
		interrupt-parent = <&gpio6>;
		interrupts = <15 0>;
		reset-gpios = <&gpio2 22 GPIO_ACTIVE_LOW>;
		wake-gpios = <&gpio2 21 GPIO_ACTIVE_HIGH>;
	};

	touchscreen: tsc2007@48 {
		compatible = "ti,tsc2007";
		reg = <0x48>;
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_tsc2007>;
		interrupt-parent = <&gpio3>;
		interrupts = <26 0>;
		gpios = <&gpio3 26 GPIO_ACTIVE_LOW>;
		ti,x-plate-ohms = <660>;
		linux,wakeup;
	};
};

&iomuxc {
	imx53-tx53-x03x {
		pinctrl_edt_ft5x06_1: edt-ft5x06grp-1 {
			fsl,pins = <
				MX53_PAD_NANDF_CS2__GPIO6_15 0x1f0 /* Interrupt */
				MX53_PAD_EIM_A16__GPIO2_22   0x04 /* Reset */
				MX53_PAD_EIM_A17__GPIO2_21   0x04 /* Wake */
			>;
		};

		pinctrl_kpp: kppgrp {
			fsl,pins = <
				MX53_PAD_GPIO_9__KPP_COL_6 0x1f4
				MX53_PAD_GPIO_4__KPP_COL_7 0x1f4
				MX53_PAD_KEY_COL2__KPP_COL_2 0x1f4
				MX53_PAD_KEY_COL3__KPP_COL_3 0x1f4
				MX53_PAD_GPIO_2__KPP_ROW_6 0x1f4
				MX53_PAD_GPIO_5__KPP_ROW_7 0x1f4
				MX53_PAD_KEY_ROW2__KPP_ROW_2 0x1f4
				MX53_PAD_KEY_ROW3__KPP_ROW_3 0x1f4
			>;
		};

		pinctrl_rgb24_vga1: rgb24-vgagrp1 {
			fsl,pins = <
				MX53_PAD_DI0_DISP_CLK__IPU_DI0_DISP_CLK		0x5
				MX53_PAD_DI0_PIN15__IPU_DI0_PIN15		0x5
				MX53_PAD_DI0_PIN2__IPU_DI0_PIN2			0x5
				MX53_PAD_DI0_PIN3__IPU_DI0_PIN3			0x5
				MX53_PAD_DISP0_DAT0__IPU_DISP0_DAT_0		0x5
				MX53_PAD_DISP0_DAT1__IPU_DISP0_DAT_1		0x5
				MX53_PAD_DISP0_DAT2__IPU_DISP0_DAT_2		0x5
				MX53_PAD_DISP0_DAT3__IPU_DISP0_DAT_3		0x5
				MX53_PAD_DISP0_DAT4__IPU_DISP0_DAT_4		0x5
				MX53_PAD_DISP0_DAT5__IPU_DISP0_DAT_5		0x5
				MX53_PAD_DISP0_DAT6__IPU_DISP0_DAT_6		0x5
				MX53_PAD_DISP0_DAT7__IPU_DISP0_DAT_7		0x5
				MX53_PAD_DISP0_DAT8__IPU_DISP0_DAT_8		0x5
				MX53_PAD_DISP0_DAT9__IPU_DISP0_DAT_9		0x5
				MX53_PAD_DISP0_DAT10__IPU_DISP0_DAT_10		0x5
				MX53_PAD_DISP0_DAT11__IPU_DISP0_DAT_11		0x5
				MX53_PAD_DISP0_DAT12__IPU_DISP0_DAT_12		0x5
				MX53_PAD_DISP0_DAT13__IPU_DISP0_DAT_13		0x5
				MX53_PAD_DISP0_DAT14__IPU_DISP0_DAT_14		0x5
				MX53_PAD_DISP0_DAT15__IPU_DISP0_DAT_15		0x5
				MX53_PAD_DISP0_DAT16__IPU_DISP0_DAT_16		0x5
				MX53_PAD_DISP0_DAT17__IPU_DISP0_DAT_17		0x5
				MX53_PAD_DISP0_DAT18__IPU_DISP0_DAT_18		0x5
				MX53_PAD_DISP0_DAT19__IPU_DISP0_DAT_19		0x5
				MX53_PAD_DISP0_DAT20__IPU_DISP0_DAT_20		0x5
				MX53_PAD_DISP0_DAT21__IPU_DISP0_DAT_21		0x5
				MX53_PAD_DISP0_DAT22__IPU_DISP0_DAT_22		0x5
				MX53_PAD_DISP0_DAT23__IPU_DISP0_DAT_23		0x5
			>;
		};

		pinctrl_tsc2007: tsc2007grp {
			fsl,pins = <
				MX53_PAD_EIM_D26__GPIO3_26 0x1f0 /* Interrupt */
			>;
		};
	};
};

&ipu_di0_disp0 {
	remote-endpoint = <&display0_in>;
};

&kpp {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_kpp>;
	/* sample keymap */
	/* row/col 0,1 are mapped to KPP row/col 6,7 */
	linux,keymap = <
		MATRIX_KEY(6, 6, KEY_POWER)
		MATRIX_KEY(6, 7, KEY_KP0)
		MATRIX_KEY(6, 2, KEY_KP1)
		MATRIX_KEY(6, 3, KEY_KP2)
		MATRIX_KEY(7, 6, KEY_KP3)
		MATRIX_KEY(7, 7, KEY_KP4)
		MATRIX_KEY(7, 2, KEY_KP5)
		MATRIX_KEY(7, 3, KEY_KP6)
		MATRIX_KEY(2, 6, KEY_KP7)
		MATRIX_KEY(2, 7, KEY_KP8)
		MATRIX_KEY(2, 2, KEY_KP9)
	>;
	status = "okay";
};
