1/*
2 * Copyright 2013-2017 Lothar Waßmann <LW@KARO-electronics.de>
3 *
4 * This file is dual-licensed: you can use it either under the terms
5 * of the GPL or the X11 license, at your option. Note that this dual
6 * licensing only applies to this file, and not this project as a
7 * whole.
8 *
9 *  a) This file is free software; you can redistribute it and/or
10 *     modify it under the terms of the GNU General Public License
11 *     version 2 as published by the Free Software Foundation.
12 *
13 *     This file is distributed in the hope that it will be useful,
14 *     but WITHOUT ANY WARRANTY; without even the implied warranty of
15 *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 *     GNU General Public License for more details.
17 *
18 * Or, alternatively,
19 *
20 *  b) Permission is hereby granted, free of charge, to any person
21 *     obtaining a copy of this software and associated documentation
22 *     files (the "Software"), to deal in the Software without
23 *     restriction, including without limitation the rights to use,
24 *     copy, modify, merge, publish, distribute, sublicense, and/or
25 *     sell copies of the Software, and to permit persons to whom the
26 *     Software is furnished to do so, subject to the following
27 *     conditions:
28 *
29 *     The above copyright notice and this permission notice shall be
30 *     included in all copies or substantial portions of the Software.
31 *
32 *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
33 *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
34 *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
35 *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
36 *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
37 *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
38 *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
39 *     OTHER DEALINGS IN THE SOFTWARE.
40 */
41
42/dts-v1/;
43#include "imx53-tx53.dtsi"
44#include <dt-bindings/input/input.h>
45#include <dt-bindings/interrupt-controller/irq.h>
46#include <dt-bindings/pwm/pwm.h>
47
48/ {
49	model = "Ka-Ro electronics TX53 module (LCD)";
50	compatible = "karo,tx53", "fsl,imx53";
51
52	aliases {
53		display = &display;
54	};
55
56	display: disp0 {
57		compatible = "fsl,imx-parallel-display";
58		interface-pix-fmt = "rgb24";
59		pinctrl-names = "default";
60		pinctrl-0 = <&pinctrl_rgb24_vga1>;
61		status = "okay";
62
63		port {
64			display0_in: endpoint {
65				remote-endpoint = <&ipu_di0_disp0>;
66			};
67		};
68
69		display-timings {
70			VGA {
71				clock-frequency = <25200000>;
72				hactive = <640>;
73				vactive = <480>;
74				hback-porch = <48>;
75				hsync-len = <96>;
76				hfront-porch = <16>;
77				vback-porch = <31>;
78				vsync-len = <2>;
79				vfront-porch = <12>;
80				hsync-active = <0>;
81				vsync-active = <0>;
82				de-active = <1>;
83				pixelclk-active = <0>;
84			};
85
86			ETV570 {
87				clock-frequency = <25200000>;
88				hactive = <640>;
89				vactive = <480>;
90				hback-porch = <114>;
91				hsync-len = <30>;
92				hfront-porch = <16>;
93				vback-porch = <32>;
94				vsync-len = <3>;
95				vfront-porch = <10>;
96				hsync-active = <0>;
97				vsync-active = <0>;
98				de-active = <1>;
99				pixelclk-active = <0>;
100			};
101
102			ET0350 {
103				clock-frequency = <6413760>;
104				hactive = <320>;
105				vactive = <240>;
106				hback-porch = <34>;
107				hsync-len = <34>;
108				hfront-porch = <20>;
109				vback-porch = <15>;
110				vsync-len = <3>;
111				vfront-porch = <4>;
112				hsync-active = <0>;
113				vsync-active = <0>;
114				de-active = <1>;
115				pixelclk-active = <0>;
116			};
117
118			ET0430 {
119				clock-frequency = <9009000>;
120				hactive = <480>;
121				vactive = <272>;
122				hback-porch = <2>;
123				hsync-len = <41>;
124				hfront-porch = <2>;
125				vback-porch = <2>;
126				vsync-len = <10>;
127				vfront-porch = <2>;
128				hsync-active = <0>;
129				vsync-active = <0>;
130				de-active = <1>;
131				pixelclk-active = <1>;
132			};
133
134			ET0500 {
135				clock-frequency = <33264000>;
136				hactive = <800>;
137				vactive = <480>;
138				hback-porch = <88>;
139				hsync-len = <128>;
140				hfront-porch = <40>;
141				vback-porch = <33>;
142				vsync-len = <2>;
143				vfront-porch = <10>;
144				hsync-active = <0>;
145				vsync-active = <0>;
146				de-active = <1>;
147				pixelclk-active = <0>;
148			};
149
150			ET0700 { /* same as ET0500 */
151				clock-frequency = <33264000>;
152				hactive = <800>;
153				vactive = <480>;
154				hback-porch = <88>;
155				hsync-len = <128>;
156				hfront-porch = <40>;
157				vback-porch = <33>;
158				vsync-len = <2>;
159				vfront-porch = <10>;
160				hsync-active = <0>;
161				vsync-active = <0>;
162				de-active = <1>;
163				pixelclk-active = <0>;
164			};
165
166			ETQ570 {
167				clock-frequency = <6596040>;
168				hactive = <320>;
169				vactive = <240>;
170				hback-porch = <38>;
171				hsync-len = <30>;
172				hfront-porch = <30>;
173				vback-porch = <16>;
174				vsync-len = <3>;
175				vfront-porch = <4>;
176				hsync-active = <0>;
177				vsync-active = <0>;
178				de-active = <1>;
179				pixelclk-active = <0>;
180			};
181		};
182	};
183
184	backlight: backlight {
185		compatible = "pwm-backlight";
186		pwms = <&pwm2 0 500000 PWM_POLARITY_INVERTED>;
187		power-supply = <&reg_3v3>;
188		brightness-levels = <
189			  0  1  2  3  4  5  6  7  8  9
190			 10 11 12 13 14 15 16 17 18 19
191			 20 21 22 23 24 25 26 27 28 29
192			 30 31 32 33 34 35 36 37 38 39
193			 40 41 42 43 44 45 46 47 48 49
194			 50 51 52 53 54 55 56 57 58 59
195			 60 61 62 63 64 65 66 67 68 69
196			 70 71 72 73 74 75 76 77 78 79
197			 80 81 82 83 84 85 86 87 88 89
198			 90 91 92 93 94 95 96 97 98 99
199			100
200		>;
201		default-brightness-level = <50>;
202	};
203
204	reg_lcd_pwr: regulator-lcd-pwr {
205		compatible = "regulator-fixed";
206		regulator-name = "LCD POWER";
207		regulator-min-microvolt = <3300000>;
208		regulator-max-microvolt = <3300000>;
209		gpio = <&gpio2 31 GPIO_ACTIVE_HIGH>;
210		enable-active-high;
211		regulator-boot-on;
212	};
213
214	reg_lcd_reset: regulator-lcd-reset {
215		compatible = "regulator-fixed";
216		regulator-name = "LCD RESET";
217		regulator-min-microvolt = <3300000>;
218		regulator-max-microvolt = <3300000>;
219		gpio = <&gpio3 29 GPIO_ACTIVE_HIGH>;
220		enable-active-high;
221		regulator-boot-on;
222	};
223};
224
225&i2c3 {
226	pinctrl-names = "default";
227	pinctrl-0 = <&pinctrl_i2c3>;
228	status = "okay";
229
230	sgtl5000: codec@a {
231		compatible = "fsl,sgtl5000";
232		reg = <0x0a>;
233		#sound-dai-cells = <0>;
234		VDDA-supply = <&reg_2v5>;
235		VDDIO-supply = <&reg_3v3>;
236		clocks = <&mclk>;
237	};
238
239	polytouch: edt-ft5x06@38 {
240		compatible = "edt,edt-ft5x06";
241		reg = <0x38>;
242		pinctrl-names = "default";
243		pinctrl-0 = <&pinctrl_edt_ft5x06_1>;
244		interrupt-parent = <&gpio6>;
245		interrupts = <15 IRQ_TYPE_EDGE_FALLING>;
246		reset-gpios = <&gpio2 22 GPIO_ACTIVE_LOW>;
247		wake-gpios = <&gpio2 21 GPIO_ACTIVE_HIGH>;
248		wakeup-source;
249	};
250
251	touchscreen: tsc2007@48 {
252		compatible = "ti,tsc2007";
253		reg = <0x48>;
254		pinctrl-names = "default";
255		pinctrl-0 = <&pinctrl_tsc2007>;
256		interrupt-parent = <&gpio3>;
257		interrupts = <26 IRQ_TYPE_EDGE_FALLING>;
258		gpios = <&gpio3 26 GPIO_ACTIVE_LOW>;
259		ti,x-plate-ohms = <660>;
260		wakeup-source;
261	};
262};
263
264&iomuxc {
265	imx53-tx53-x03x {
266		pinctrl_edt_ft5x06_1: edt-ft5x06grp-1 {
267			fsl,pins = <
268				MX53_PAD_NANDF_CS2__GPIO6_15 0x1f0 /* Interrupt */
269				MX53_PAD_EIM_A16__GPIO2_22   0x04 /* Reset */
270				MX53_PAD_EIM_A17__GPIO2_21   0x04 /* Wake */
271			>;
272		};
273
274		pinctrl_kpp: kppgrp {
275			fsl,pins = <
276				MX53_PAD_GPIO_9__KPP_COL_6 0x1f4
277				MX53_PAD_GPIO_4__KPP_COL_7 0x1f4
278				MX53_PAD_KEY_COL2__KPP_COL_2 0x1f4
279				MX53_PAD_KEY_COL3__KPP_COL_3 0x1f4
280				MX53_PAD_GPIO_2__KPP_ROW_6 0x1f4
281				MX53_PAD_GPIO_5__KPP_ROW_7 0x1f4
282				MX53_PAD_KEY_ROW2__KPP_ROW_2 0x1f4
283				MX53_PAD_KEY_ROW3__KPP_ROW_3 0x1f4
284			>;
285		};
286
287		pinctrl_rgb24_vga1: rgb24-vgagrp1 {
288			fsl,pins = <
289				MX53_PAD_DI0_DISP_CLK__IPU_DI0_DISP_CLK		0x5
290				MX53_PAD_DI0_PIN15__IPU_DI0_PIN15		0x5
291				MX53_PAD_DI0_PIN2__IPU_DI0_PIN2			0x5
292				MX53_PAD_DI0_PIN3__IPU_DI0_PIN3			0x5
293				MX53_PAD_DISP0_DAT0__IPU_DISP0_DAT_0		0x5
294				MX53_PAD_DISP0_DAT1__IPU_DISP0_DAT_1		0x5
295				MX53_PAD_DISP0_DAT2__IPU_DISP0_DAT_2		0x5
296				MX53_PAD_DISP0_DAT3__IPU_DISP0_DAT_3		0x5
297				MX53_PAD_DISP0_DAT4__IPU_DISP0_DAT_4		0x5
298				MX53_PAD_DISP0_DAT5__IPU_DISP0_DAT_5		0x5
299				MX53_PAD_DISP0_DAT6__IPU_DISP0_DAT_6		0x5
300				MX53_PAD_DISP0_DAT7__IPU_DISP0_DAT_7		0x5
301				MX53_PAD_DISP0_DAT8__IPU_DISP0_DAT_8		0x5
302				MX53_PAD_DISP0_DAT9__IPU_DISP0_DAT_9		0x5
303				MX53_PAD_DISP0_DAT10__IPU_DISP0_DAT_10		0x5
304				MX53_PAD_DISP0_DAT11__IPU_DISP0_DAT_11		0x5
305				MX53_PAD_DISP0_DAT12__IPU_DISP0_DAT_12		0x5
306				MX53_PAD_DISP0_DAT13__IPU_DISP0_DAT_13		0x5
307				MX53_PAD_DISP0_DAT14__IPU_DISP0_DAT_14		0x5
308				MX53_PAD_DISP0_DAT15__IPU_DISP0_DAT_15		0x5
309				MX53_PAD_DISP0_DAT16__IPU_DISP0_DAT_16		0x5
310				MX53_PAD_DISP0_DAT17__IPU_DISP0_DAT_17		0x5
311				MX53_PAD_DISP0_DAT18__IPU_DISP0_DAT_18		0x5
312				MX53_PAD_DISP0_DAT19__IPU_DISP0_DAT_19		0x5
313				MX53_PAD_DISP0_DAT20__IPU_DISP0_DAT_20		0x5
314				MX53_PAD_DISP0_DAT21__IPU_DISP0_DAT_21		0x5
315				MX53_PAD_DISP0_DAT22__IPU_DISP0_DAT_22		0x5
316				MX53_PAD_DISP0_DAT23__IPU_DISP0_DAT_23		0x5
317			>;
318		};
319
320		pinctrl_tsc2007: tsc2007grp {
321			fsl,pins = <
322				MX53_PAD_EIM_D26__GPIO3_26 0x1f0 /* Interrupt */
323			>;
324		};
325	};
326};
327
328&ipu_di0_disp0 {
329	remote-endpoint = <&display0_in>;
330};
331
332&kpp {
333	pinctrl-names = "default";
334	pinctrl-0 = <&pinctrl_kpp>;
335	/* sample keymap */
336	/* row/col 0,1 are mapped to KPP row/col 6,7 */
337	linux,keymap = <
338		MATRIX_KEY(6, 6, KEY_POWER)
339		MATRIX_KEY(6, 7, KEY_KP0)
340		MATRIX_KEY(6, 2, KEY_KP1)
341		MATRIX_KEY(6, 3, KEY_KP2)
342		MATRIX_KEY(7, 6, KEY_KP3)
343		MATRIX_KEY(7, 7, KEY_KP4)
344		MATRIX_KEY(7, 2, KEY_KP5)
345		MATRIX_KEY(7, 3, KEY_KP6)
346		MATRIX_KEY(2, 6, KEY_KP7)
347		MATRIX_KEY(2, 7, KEY_KP8)
348		MATRIX_KEY(2, 2, KEY_KP9)
349	>;
350	status = "okay";
351};
352