Browse Source

Add M12 Type devices to edt touch driver
change dts properties for threshold, gain, offset to
threshold_[M06|M09|M12]
gain_[M06|M09|M12]
offset_[M06|M09|M12]
to set chipversion dependent options

Reinhard Russinger 8 years ago
parent
commit
3a3b3295d7

+ 1 - 1
board/GfA/Display001/BUILD

@@ -1 +1 @@
-327
+328

+ 1 - 0
board/GfA/Display001/Display001_7.dts

@@ -248,6 +248,7 @@ i2c@3 {
                         interrupt-parent = <&gpio2>;
                         interrupt-parent = <&gpio2>;
                         interrupts = <1 0>;
                         interrupts = <1 0>;
                         reset-gpios = <&gpio3 21 1>;
                         reset-gpios = <&gpio3 21 1>;
+			threshold_M12 = <19>;
                 };
                 };
         };
         };
 };
 };

+ 350 - 0
board/GfA/Display001/Display001_7_bitbang.dts

@@ -0,0 +1,350 @@
+/*
+ * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * 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.
+ */
+/dts-v1/;
+
+#include "am33xx.dtsi"
+#include "am335x-bone-common.dtsi"
+
+&ldo3_reg {
+	regulator-min-microvolt = <1800000>;
+	regulator-max-microvolt = <1800000>;
+	regulator-always-on;
+};
+
+&mmc1 {
+	vmmc-supply = <&vmmcsd_fixed>;
+};
+
+&mmc2 {
+	vmmc-supply = <&vmmcsd_fixed>;
+	pinctrl-names = "default";
+	pinctrl-0 = <&emmc_pins>;
+	bus-width = <8>;
+	ti,non-removable;
+	status = "okay";
+};
+
+&am33xx_pinmux {
+		lcd_pins_default: lcd_pins_default {
+			pinctrl-single,pins = <
+				0x20 0x01	/* gpmc_ad8.lcd_data16, OUTPUT | MODE1 */
+				0x24 0x01	/* gpmc_ad9.lcd_data17, OUTPUT | MODE1 */
+				0x28 0x01	/* gpmc_ad10.lcd_data18, OUTPUT | MODE1 */
+				0x2c 0x01	/* gpmc_ad11.lcd_data19, OUTPUT | MODE1 */
+				0x30 0x01	/* gpmc_ad12.lcd_data20, OUTPUT | MODE1 */
+				0x34 0x01	/* gpmc_ad13.lcd_data21, OUTPUT | MODE1 */
+				0x38 0x01	/* gpmc_ad14.lcd_data22, OUTPUT | MODE1 */
+				0x3c 0x01	/* gpmc_ad15.lcd_data23, OUTPUT | MODE1 */
+				0xa0 0x00	/* lcd_data0.lcd_data0, OUTPUT | MODE0 */
+				0xa4 0x00	/* lcd_data1.lcd_data1, OUTPUT | MODE0 */
+				0xa8 0x00	/* lcd_data2.lcd_data2, OUTPUT | MODE0 */
+				0xac 0x00	/* lcd_data3.lcd_data3, OUTPUT | MODE0 */
+				0xb0 0x00	/* lcd_data4.lcd_data4, OUTPUT | MODE0 */
+				0xb4 0x00	/* lcd_data5.lcd_data5, OUTPUT | MODE0 */
+				0xb8 0x00	/* lcd_data6.lcd_data6, OUTPUT | MODE0 */
+				0xbc 0x00	/* lcd_data7.lcd_data7, OUTPUT | MODE0 */
+				0xc0 0x00	/* lcd_data8.lcd_data8, OUTPUT | MODE0 */
+				0xc4 0x00	/* lcd_data9.lcd_data9, OUTPUT | MODE0 */
+				0xc8 0x00	/* lcd_data10.lcd_data10, OUTPUT | MODE0 */
+				0xcc 0x00	/* lcd_data11.lcd_data11, OUTPUT | MODE0 */
+				0xd0 0x00	/* lcd_data12.lcd_data12, OUTPUT | MODE0 */
+				0xd4 0x00	/* lcd_data13.lcd_data13, OUTPUT | MODE0 */
+				0xd8 0x00	/* lcd_data14.lcd_data14, OUTPUT | MODE0 */
+				0xdc 0x00	/* lcd_data15.lcd_data15, OUTPUT | MODE0 */
+				0xe0 0x00	/* lcd_vsync.lcd_vsync, OUTPUT | MODE0 */
+				0xe4 0x00	/* lcd_hsync.lcd_hsync, OUTPUT | MODE0 */
+				0xe8 0x00	/* lcd_pclk.lcd_pclk, OUTPUT | MODE0 */
+				0xec 0x00	/* lcd_ac_bias_en.lcd_ac_bias_en, OUTPUT | MODE0 */
+			>;
+		};
+
+		lcd_pins_sleep: lcd_pins_sleep {
+			pinctrl-single,pins = <
+				0x20 (PIN_INPUT_PULLDOWN | MUX_MODE7)	/* gpmc_ad8.lcd_data16 */
+				0x24 (PIN_INPUT_PULLDOWN | MUX_MODE7)	/* gpmc_ad9.lcd_data17 */
+				0x28 (PIN_INPUT_PULLDOWN | MUX_MODE7)	/* gpmc_ad10.lcd_data18 */
+				0x2c (PIN_INPUT_PULLDOWN | MUX_MODE7)	/* gpmc_ad11.lcd_data19 */
+				0x30 (PIN_INPUT_PULLDOWN | MUX_MODE7)	/* gpmc_ad12.lcd_data20 */
+				0x34 (PIN_INPUT_PULLDOWN | MUX_MODE7)	/* gpmc_ad13.lcd_data21 */
+				0x38 (PIN_INPUT_PULLDOWN | MUX_MODE7)	/* gpmc_ad14.lcd_data22 */
+				0x3c (PIN_INPUT_PULLDOWN | MUX_MODE7)	/* gpmc_ad15.lcd_data23 */
+				0xa0 (PULL_DISABLE | MUX_MODE7)		/* lcd_data0.lcd_data0 */
+				0xa4 (PULL_DISABLE | MUX_MODE7)		/* lcd_data1.lcd_data1 */
+				0xa8 (PULL_DISABLE | MUX_MODE7)		/* lcd_data2.lcd_data2 */
+				0xac (PULL_DISABLE | MUX_MODE7)		/* lcd_data3.lcd_data3 */
+				0xb0 (PULL_DISABLE | MUX_MODE7)		/* lcd_data4.lcd_data4 */
+				0xb4 (PULL_DISABLE | MUX_MODE7)		/* lcd_data5.lcd_data5 */
+				0xb8 (PULL_DISABLE | MUX_MODE7)		/* lcd_data6.lcd_data6 */
+				0xbc (PULL_DISABLE | MUX_MODE7)		/* lcd_data7.lcd_data7 */
+				0xc0 (PULL_DISABLE | MUX_MODE7)		/* lcd_data8.lcd_data8 */
+				0xc4 (PULL_DISABLE | MUX_MODE7)		/* lcd_data9.lcd_data9 */
+				0xc8 (PULL_DISABLE | MUX_MODE7)		/* lcd_data10.lcd_data10 */
+				0xcc (PULL_DISABLE | MUX_MODE7)		/* lcd_data11.lcd_data11 */
+				0xd0 (PULL_DISABLE | MUX_MODE7)		/* lcd_data12.lcd_data12 */
+				0xd4 (PULL_DISABLE | MUX_MODE7)		/* lcd_data13.lcd_data13 */
+				0xd8 (PULL_DISABLE | MUX_MODE7)		/* lcd_data14.lcd_data14 */
+				0xdc (PULL_DISABLE | MUX_MODE7)		/* lcd_data15.lcd_data15 */
+				0xe0 (PIN_INPUT_PULLDOWN | MUX_MODE7)	/* lcd_vsync.lcd_vsync, OUTPUT | MODE0 */
+				0xe4 (PIN_INPUT_PULLDOWN | MUX_MODE7)	/* lcd_hsync.lcd_hsync */
+				0xe8 (PIN_INPUT_PULLDOWN | MUX_MODE7)	/* lcd_pclk.lcd_pclk */
+				0xec (PIN_INPUT_PULLDOWN | MUX_MODE7)	/* lcd_ac_bias_en.lcd_ac_bias_en */
+			>;
+		};
+
+
+             /* 	i2c1_pins: pinmux_i2c1_pins { 
+                        pinctrl-single,pins = <
+                                0x158 (PIN_INPUT | MUX_MODE2) */   /* spi0_d1.i2c1_sda */
+                              /*  0x15c (PIN_INPUT | MUX_MODE2) */    /* spi0_cs0.i2c1_scl */
+/*                        >;
+                };
+*/
+              	i2c2_pins: pinmux_i2c2_pins { 
+                        pinctrl-single,pins = <
+                                0x150 (PIN_INPUT_PULLUP | MUX_MODE2)    /* spi0_sclk.i2c2_sda */
+                                0x154 (PIN_INPUT_PULLUP | MUX_MODE2)    /* spi0_d0.i2c2_scl */
+                        >;
+                };
+
+                i2c_gpio_pins: pinmux_i2c_gpio_pins {
+                        pinctrl-single,pins = <
+                                0x150 (PIN_INPUT | MUX_MODE7)    /* spi0_sclk.i2c2_sda */
+                                0x154 (PIN_INPUT | MUX_MODE7)    /* spi0_d0.i2c2_scl */
+                        >;
+                };
+
+               spi1_pins: pinmux_spi1_pins {
+                        pinctrl-single,pins = <
+                                0x190 (PIN_INPUT_PULLUP | MUX_MODE3) /* mcasp0_aclkx.spi1_sclk */
+                                0x194 (PIN_INPUT_PULLUP | MUX_MODE3)  /* mcasp0_fsx.spi1_d0 */
+                                0x198 (PIN_OUTPUT_PULLUP | MUX_MODE3) /* mcasp0_axr0.spi1_d1 */
+                                0x19c (PIN_OUTPUT_PULLUP | MUX_MODE3) /* mcasp0_ahclrk.spi1_cs0 */
+                                0x164 (PIN_OUTPUT_PULLUP | MUX_MODE2) /* ecap0_in.pwm0_out */
+                        >;
+                };
+
+
+		edt_ft5x06_pins: pinmux_edt_ft5x06_pins{
+                        pinctrl-single,pins = <
+                                0x1ac (PIN_OUTPUT | MUX_MODE7)    /* mcasp0_ahclkx.gpio3.21 RESET TOUCH P9_25*/
+                                0x8c  (PIN_INPUT | MUX_MODE7)    /* gpmc_clk_mux0.gpio2.1  INT TOUCH P8_18 */
+                        >;
+
+		};
+
+
+               uart4_pins_default: pinmux_uart4_pins_default {
+                        pinctrl-single,pins = <
+                                0x070 (PIN_INPUT_PULLUP | MUX_MODE6)    /* gpmc_wait0.uart4_rxd */
+                                0x074 (PIN_OUTPUT_PULLDOWN | MUX_MODE6) /* gpmc_wpn.uart4_txd */ 
+				0x078 (PIN_OUTPUT | MUX_MODE7)		/* gpmc_ben1.gpio1.28 */
+                        >;
+                };
+
+
+                uart4_pins_sleep: pinmux_uart4_pins_sleep {
+                        pinctrl-single,pins = <
+                                0x070 (PIN_INPUT_PULLDOWN | MUX_MODE7)
+                                0x074 (PIN_INPUT_PULLDOWN | MUX_MODE7)
+				0x078 (PIN_INPUT_PULLDOWN | MUX_MODE7)
+                        >;
+                };
+
+               uart1_pins_default: pinmux_uart1_pins_default {
+                        pinctrl-single,pins = <
+                                0x180 (PIN_INPUT_PULLUP | MUX_MODE0)    /* uart1_rxd.uart1_rxd */
+                                0x184 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* uart1_txd.uart1_txd */ 
+				0x178 (PIN_INPUT_PULLUP | MUX_MODE0)	/* i2c2_sda.uart1_ctsn */
+                                0x17c (PIN_OUTPUT | MUX_MODE0)  	/* i2c2_scl.uart1_rtsn */
+                        >;
+                };
+
+
+                uart1_pins_sleep: pinmux_uart1_pins_sleep {
+                        pinctrl-single,pins = <
+                                0x180 (PIN_INPUT_PULLDOWN | MUX_MODE0)  /* uart1_rxd.uart1_rxd */
+                                0x184 (PIN_INPUT_PULLDOWN | MUX_MODE0)	/* uart1_txd.uart1_txd */ 
+				0x178 (PIN_INPUT_PULLDOWN | MUX_MODE0)	/* i2c2_sda.uart1_ctsn */
+                                0x17c (PIN_INPUT_PULLDOWN | MUX_MODE0)  /* i2c2_scl.uart1_rtsn */
+                        >;
+                };
+
+		timer7_pins: pinmux_timer7_pins {
+                        pinctrl-single,pins = <
+                               0x094 (PIN_OUTPUT_PULLDOWN | MUX_MODE2)  /* gpmc_oen_ren.timer7 */
+				>;
+				};
+
+		profibus_pins_default: pinmux_profibus_pins_default {
+                        pinctrl-single,pins = < 
+                        0x158 (PIN_INPUT_PULLUP | MUX_MODE4)    /* spi0_d1.uart0_rxd */
+                        0x15c (PIN_OUTPUT_PULLDOWN | MUX_MODE4) /* spi0_cs0.uart0_txd */ 
+			0x1a4 (PIN_OUTPUT | MUX_MODE5)		/* mcasp0_fsr.gpio3.19 */
+                	>;
+                };
+};
+
+&timer7 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&timer7_pins>; 
+	status = "okay";
+};
+
+&i2c0 {
+	hdmi1: hdmi@70 {
+	      compatible = "nxp,tda998x";
+	      reg = <0x70>;
+	};
+};
+
+/*
+&i2c2 {
+    pinctrl-names = "default";
+    pinctrl-0 = <&i2c2_pins>;
+    status = "okay";
+    clock-frequency = <400000>;
+};
+
+
+&i2c2 {
+        polytouch: edt-ft5x06@38 {
+                compatible = "edt,edt-ft5406", "edt,edt-ft5x06";
+                reg = <0x38>;
+                pinctrl-names = "default";
+                pinctrl-0 = <&edt_ft5x06_pins>;
+                interrupt-parent = <&gpio2>;
+                interrupts = <1 0>;
+                reset-gpios = <&gpio3 21 1>;
+        };
+};
+*/
+
+/ {
+i2c@3 {
+        compatible = "i2c-gpio";
+        pinctrl-names = "default";
+        pinctrl-0 = <&i2c_gpio_pins>;
+        status = "okay";
+
+        gpios = <&gpio0 2 0 /* sda */
+                 &gpio0 3 0 /* scl */
+                >;
+        /*i2c-gpio,sda-open-drain;
+        i2c-gpio,scl-open-drain;*/ 
+        i2c-gpio,delay-us = <1>;        /* ~100 kHz */
+        #address-cells = <1>;
+        #size-cells = <0>;
+
+        polytouch: edt-ft5x06@38 {
+                        compatible = "edt,edt-ft5406", "edt,edt-ft5x06";
+                        reg = <0x38>;
+                        pinctrl-names = "default";
+                        pinctrl-0 = <&edt_ft5x06_pins>;
+                        interrupt-parent = <&gpio2>;
+                        interrupts = <1 0>;
+                        reset-gpios = <&gpio3 21 1>;
+                };
+        };
+};
+
+&spi1 {
+	pinctrl-names = "default";
+        pinctrl-0 = <&spi1_pins>;
+
+	clock-frequency = <1000000>;
+        status = "okay";
+	spi1_0{
+		compatible = "spidev";
+                reg = <0>;
+		spi-max-frequency = <10000000>;
+        };
+
+	spi1_1{
+		compatible = "spidev";
+                reg = <1>;
+		spi-max-frequency = <10000000>;
+        };
+};
+
+
+&lcdc {
+	pinctrl-names = "default", "sleep";
+	pinctrl-0 = <&lcd_pins_default>;
+	pinctrl-1 = <&lcd_pins_sleep>;
+	status = "okay";
+	display-timings {
+		800x480 {
+			hactive         = <800>;
+			vactive         = <480>;
+			hback-porch     = <88>;
+			hfront-porch    = <40>;
+			hsync-len       = <128>;
+			vback-porch     = <33>;
+			vfront-porch    = <10>;
+			vsync-len       = <2>;
+			clock-frequency = <33000000>;
+			hsync-active    = <0>;
+			vsync-active    = <0>;
+			de-active	= <1>;
+			pixelclk-active = <0>;
+		};
+	};
+};
+
+/*
+&tscadc {
+        status = "okay";
+        tsc {
+                ti,wires = <4>;
+                ti,x-plate-resistance = <200>;
+                ti,coordinate-readouts = <5>; 
+                ti,wire-config = <0x00 0x11 0x22 0x33>;
+        };
+};
+*/
+
+&uart4 {
+	pinctrl-names = "default", "sleep";
+        pinctrl-0 = <&uart4_pins_default>;
+        pinctrl-1 = <&uart4_pins_sleep>;
+
+        status = "okay";
+
+	rts-gpio = <&gpio1 28 GPIO_ACTIVE_HIGH>;
+	rs485-rts-active-high;
+	rs485-rts-delay = <0 0>;
+	linux,rs485-enabled-at-boot-time;
+	rs485-rx-during-tx;
+};
+
+&uart1 {
+	pinctrl-names = "default", "sleep";
+        pinctrl-0 = <&uart1_pins_default>;
+        pinctrl-1 = <&uart1_pins_sleep>;
+
+        status = "okay";
+};
+
+&pruss {
+	pinctrl-names = "default";
+        pinctrl-0 = <&profibus_pins_default>;
+	status = "okay";
+};
+
+/ {
+        pwm7: dmtimer-pwm@7 {
+                compatible = "ti,omap-dmtimer-pwm";
+                ti,timers = <&timer7>;
+                #pwm-cells = <3>;
+        };
+
+        pwm-beeper {
+                compatible = "pwm-beeper";
+                pwms = <&pwm7>;
+        };
+};

+ 313 - 0
board/GfA/Display001/Display001_7_i2c2.dts

@@ -0,0 +1,313 @@
+/*
+ * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * 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.
+ */
+/dts-v1/;
+
+#include "am33xx.dtsi"
+#include "am335x-bone-common.dtsi"
+
+&ldo3_reg {
+	regulator-min-microvolt = <1800000>;
+	regulator-max-microvolt = <1800000>;
+	regulator-always-on;
+};
+
+&mmc1 {
+	vmmc-supply = <&vmmcsd_fixed>;
+};
+
+&mmc2 {
+	vmmc-supply = <&vmmcsd_fixed>;
+	pinctrl-names = "default";
+	pinctrl-0 = <&emmc_pins>;
+	bus-width = <8>;
+	ti,non-removable;
+	status = "okay";
+};
+
+&am33xx_pinmux {
+		lcd_pins_default: lcd_pins_default {
+			pinctrl-single,pins = <
+				0x20 0x01	/* gpmc_ad8.lcd_data16, OUTPUT | MODE1 */
+				0x24 0x01	/* gpmc_ad9.lcd_data17, OUTPUT | MODE1 */
+				0x28 0x01	/* gpmc_ad10.lcd_data18, OUTPUT | MODE1 */
+				0x2c 0x01	/* gpmc_ad11.lcd_data19, OUTPUT | MODE1 */
+				0x30 0x01	/* gpmc_ad12.lcd_data20, OUTPUT | MODE1 */
+				0x34 0x01	/* gpmc_ad13.lcd_data21, OUTPUT | MODE1 */
+				0x38 0x01	/* gpmc_ad14.lcd_data22, OUTPUT | MODE1 */
+				0x3c 0x01	/* gpmc_ad15.lcd_data23, OUTPUT | MODE1 */
+				0xa0 0x00	/* lcd_data0.lcd_data0, OUTPUT | MODE0 */
+				0xa4 0x00	/* lcd_data1.lcd_data1, OUTPUT | MODE0 */
+				0xa8 0x00	/* lcd_data2.lcd_data2, OUTPUT | MODE0 */
+				0xac 0x00	/* lcd_data3.lcd_data3, OUTPUT | MODE0 */
+				0xb0 0x00	/* lcd_data4.lcd_data4, OUTPUT | MODE0 */
+				0xb4 0x00	/* lcd_data5.lcd_data5, OUTPUT | MODE0 */
+				0xb8 0x00	/* lcd_data6.lcd_data6, OUTPUT | MODE0 */
+				0xbc 0x00	/* lcd_data7.lcd_data7, OUTPUT | MODE0 */
+				0xc0 0x00	/* lcd_data8.lcd_data8, OUTPUT | MODE0 */
+				0xc4 0x00	/* lcd_data9.lcd_data9, OUTPUT | MODE0 */
+				0xc8 0x00	/* lcd_data10.lcd_data10, OUTPUT | MODE0 */
+				0xcc 0x00	/* lcd_data11.lcd_data11, OUTPUT | MODE0 */
+				0xd0 0x00	/* lcd_data12.lcd_data12, OUTPUT | MODE0 */
+				0xd4 0x00	/* lcd_data13.lcd_data13, OUTPUT | MODE0 */
+				0xd8 0x00	/* lcd_data14.lcd_data14, OUTPUT | MODE0 */
+				0xdc 0x00	/* lcd_data15.lcd_data15, OUTPUT | MODE0 */
+				0xe0 0x00	/* lcd_vsync.lcd_vsync, OUTPUT | MODE0 */
+				0xe4 0x00	/* lcd_hsync.lcd_hsync, OUTPUT | MODE0 */
+				0xe8 0x00	/* lcd_pclk.lcd_pclk, OUTPUT | MODE0 */
+				0xec 0x00	/* lcd_ac_bias_en.lcd_ac_bias_en, OUTPUT | MODE0 */
+			>;
+		};
+
+		lcd_pins_sleep: lcd_pins_sleep {
+			pinctrl-single,pins = <
+				0x20 (PIN_INPUT_PULLDOWN | MUX_MODE7)	/* gpmc_ad8.lcd_data16 */
+				0x24 (PIN_INPUT_PULLDOWN | MUX_MODE7)	/* gpmc_ad9.lcd_data17 */
+				0x28 (PIN_INPUT_PULLDOWN | MUX_MODE7)	/* gpmc_ad10.lcd_data18 */
+				0x2c (PIN_INPUT_PULLDOWN | MUX_MODE7)	/* gpmc_ad11.lcd_data19 */
+				0x30 (PIN_INPUT_PULLDOWN | MUX_MODE7)	/* gpmc_ad12.lcd_data20 */
+				0x34 (PIN_INPUT_PULLDOWN | MUX_MODE7)	/* gpmc_ad13.lcd_data21 */
+				0x38 (PIN_INPUT_PULLDOWN | MUX_MODE7)	/* gpmc_ad14.lcd_data22 */
+				0x3c (PIN_INPUT_PULLDOWN | MUX_MODE7)	/* gpmc_ad15.lcd_data23 */
+				0xa0 (PULL_DISABLE | MUX_MODE7)		/* lcd_data0.lcd_data0 */
+				0xa4 (PULL_DISABLE | MUX_MODE7)		/* lcd_data1.lcd_data1 */
+				0xa8 (PULL_DISABLE | MUX_MODE7)		/* lcd_data2.lcd_data2 */
+				0xac (PULL_DISABLE | MUX_MODE7)		/* lcd_data3.lcd_data3 */
+				0xb0 (PULL_DISABLE | MUX_MODE7)		/* lcd_data4.lcd_data4 */
+				0xb4 (PULL_DISABLE | MUX_MODE7)		/* lcd_data5.lcd_data5 */
+				0xb8 (PULL_DISABLE | MUX_MODE7)		/* lcd_data6.lcd_data6 */
+				0xbc (PULL_DISABLE | MUX_MODE7)		/* lcd_data7.lcd_data7 */
+				0xc0 (PULL_DISABLE | MUX_MODE7)		/* lcd_data8.lcd_data8 */
+				0xc4 (PULL_DISABLE | MUX_MODE7)		/* lcd_data9.lcd_data9 */
+				0xc8 (PULL_DISABLE | MUX_MODE7)		/* lcd_data10.lcd_data10 */
+				0xcc (PULL_DISABLE | MUX_MODE7)		/* lcd_data11.lcd_data11 */
+				0xd0 (PULL_DISABLE | MUX_MODE7)		/* lcd_data12.lcd_data12 */
+				0xd4 (PULL_DISABLE | MUX_MODE7)		/* lcd_data13.lcd_data13 */
+				0xd8 (PULL_DISABLE | MUX_MODE7)		/* lcd_data14.lcd_data14 */
+				0xdc (PULL_DISABLE | MUX_MODE7)		/* lcd_data15.lcd_data15 */
+				0xe0 (PIN_INPUT_PULLDOWN | MUX_MODE7)	/* lcd_vsync.lcd_vsync, OUTPUT | MODE0 */
+				0xe4 (PIN_INPUT_PULLDOWN | MUX_MODE7)	/* lcd_hsync.lcd_hsync */
+				0xe8 (PIN_INPUT_PULLDOWN | MUX_MODE7)	/* lcd_pclk.lcd_pclk */
+				0xec (PIN_INPUT_PULLDOWN | MUX_MODE7)	/* lcd_ac_bias_en.lcd_ac_bias_en */
+			>;
+		};
+
+
+             /* 	i2c1_pins: pinmux_i2c1_pins { 
+                        pinctrl-single,pins = <
+                                0x158 (PIN_INPUT | MUX_MODE2) */   /* spi0_d1.i2c1_sda */
+                              /*  0x15c (PIN_INPUT | MUX_MODE2) */    /* spi0_cs0.i2c1_scl */
+/*                        >;
+                };
+*/
+              	i2c2_pins: pinmux_i2c2_pins { 
+                        pinctrl-single,pins = <
+                                0x150 (PIN_INPUT_PULLUP | MUX_MODE2)    /* spi0_sclk.i2c2_sda */
+                                0x154 (PIN_INPUT_PULLUP | MUX_MODE2)    /* spi0_d0.i2c2_scl */
+                        >;
+                };
+
+               spi1_pins: pinmux_spi1_pins {
+                        pinctrl-single,pins = <
+                                0x190 (PIN_INPUT_PULLUP | MUX_MODE3) /* mcasp0_aclkx.spi1_sclk */
+                                0x194 (PIN_INPUT_PULLUP | MUX_MODE3)  /* mcasp0_fsx.spi1_d0 */
+                                0x198 (PIN_OUTPUT_PULLUP | MUX_MODE3) /* mcasp0_axr0.spi1_d1 */
+                                0x19c (PIN_OUTPUT_PULLUP | MUX_MODE3) /* mcasp0_ahclrk.spi1_cs0 */
+                                0x164 (PIN_OUTPUT_PULLUP | MUX_MODE2) /* ecap0_in.pwm0_out */
+                        >;
+                };
+
+
+		edt_ft5x06_pins: pinmux_edt_ft5x06_pins{
+                        pinctrl-single,pins = <
+                                0x1ac (PIN_OUTPUT | MUX_MODE7)    /* mcasp0_ahclkx.gpio3.21 RESET TOUCH P9_25*/
+                                0x8c  (PIN_INPUT | MUX_MODE7)    /* gpmc_clk_mux0.gpio2.1  INT TOUCH P8_18 */
+                        >;
+
+		};
+
+
+               uart4_pins_default: pinmux_uart4_pins_default {
+                        pinctrl-single,pins = <
+                                0x070 (PIN_INPUT_PULLUP | MUX_MODE6)    /* gpmc_wait0.uart4_rxd */
+                                0x074 (PIN_OUTPUT_PULLDOWN | MUX_MODE6) /* gpmc_wpn.uart4_txd */ 
+				0x078 (PIN_OUTPUT | MUX_MODE7)		/* gpmc_ben1.gpio1.28 */
+                        >;
+                };
+
+
+                uart4_pins_sleep: pinmux_uart4_pins_sleep {
+                        pinctrl-single,pins = <
+                                0x070 (PIN_INPUT_PULLDOWN | MUX_MODE7)
+                                0x074 (PIN_INPUT_PULLDOWN | MUX_MODE7)
+				0x078 (PIN_INPUT_PULLDOWN | MUX_MODE7)
+                        >;
+                };
+
+               uart1_pins_default: pinmux_uart1_pins_default {
+                        pinctrl-single,pins = <
+                                0x180 (PIN_INPUT_PULLUP | MUX_MODE0)    /* uart1_rxd.uart1_rxd */
+                                0x184 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* uart1_txd.uart1_txd */ 
+				0x178 (PIN_INPUT_PULLUP | MUX_MODE0)	/* i2c2_sda.uart1_ctsn */
+                                0x17c (PIN_OUTPUT | MUX_MODE0)  	/* i2c2_scl.uart1_rtsn */
+                        >;
+                };
+
+
+                uart1_pins_sleep: pinmux_uart1_pins_sleep {
+                        pinctrl-single,pins = <
+                                0x180 (PIN_INPUT_PULLDOWN | MUX_MODE0)  /* uart1_rxd.uart1_rxd */
+                                0x184 (PIN_INPUT_PULLDOWN | MUX_MODE0)	/* uart1_txd.uart1_txd */ 
+				0x178 (PIN_INPUT_PULLDOWN | MUX_MODE0)	/* i2c2_sda.uart1_ctsn */
+                                0x17c (PIN_INPUT_PULLDOWN | MUX_MODE0)  /* i2c2_scl.uart1_rtsn */
+                        >;
+                };
+
+		timer7_pins: pinmux_timer7_pins {
+                        pinctrl-single,pins = <
+                               0x094 (PIN_OUTPUT_PULLDOWN | MUX_MODE2)  /* gpmc_oen_ren.timer7 */
+				>;
+				};
+
+		profibus_pins_default: pinmux_profibus_pins_default {
+                        pinctrl-single,pins = < 
+                        0x158 (PIN_INPUT_PULLUP | MUX_MODE4)    /* spi0_d1.uart0_rxd */
+                        0x15c (PIN_OUTPUT_PULLDOWN | MUX_MODE4) /* spi0_cs0.uart0_txd */ 
+			0x1a4 (PIN_OUTPUT | MUX_MODE5)		/* mcasp0_fsr.gpio3.19 */
+                	>;
+                };
+};
+
+&timer7 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&timer7_pins>; 
+	status = "okay";
+};
+
+&i2c0 {
+	hdmi1: hdmi@70 {
+	      compatible = "nxp,tda998x";
+	      reg = <0x70>;
+	};
+};
+
+&i2c2 {
+    pinctrl-names = "default";
+    pinctrl-0 = <&i2c2_pins>;
+    status = "okay";
+    clock-frequency = <400000>;
+};
+
+
+&i2c2 {
+        polytouch: edt-ft5x06@38 {
+                compatible = "edt,edt-ft5406", "edt,edt-ft5x06";
+                reg = <0x38>;
+                pinctrl-names = "default";
+                pinctrl-0 = <&edt_ft5x06_pins>;
+                interrupt-parent = <&gpio2>;
+                interrupts = <1 0>;
+                reset-gpios = <&gpio3 21 1>;
+        };
+};
+
+&spi1 {
+	pinctrl-names = "default";
+        pinctrl-0 = <&spi1_pins>;
+
+	clock-frequency = <1000000>;
+        status = "okay";
+	spi1_0{
+		compatible = "spidev";
+                reg = <0>;
+		spi-max-frequency = <10000000>;
+        };
+
+	spi1_1{
+		compatible = "spidev";
+                reg = <1>;
+		spi-max-frequency = <10000000>;
+        };
+};
+
+
+&lcdc {
+	pinctrl-names = "default", "sleep";
+	pinctrl-0 = <&lcd_pins_default>;
+	pinctrl-1 = <&lcd_pins_sleep>;
+	status = "okay";
+	display-timings {
+		800x480 {
+			hactive         = <800>;
+			vactive         = <480>;
+			hback-porch     = <88>;
+			hfront-porch    = <40>;
+			hsync-len       = <128>;
+			vback-porch     = <33>;
+			vfront-porch    = <10>;
+			vsync-len       = <2>;
+			clock-frequency = <33000000>;
+			hsync-active    = <0>;
+			vsync-active    = <0>;
+			de-active	= <1>;
+			pixelclk-active = <0>;
+		};
+	};
+};
+
+/*
+&tscadc {
+        status = "okay";
+        tsc {
+                ti,wires = <4>;
+                ti,x-plate-resistance = <200>;
+                ti,coordinate-readouts = <5>; 
+                ti,wire-config = <0x00 0x11 0x22 0x33>;
+        };
+};
+*/
+
+&uart4 {
+	pinctrl-names = "default", "sleep";
+        pinctrl-0 = <&uart4_pins_default>;
+        pinctrl-1 = <&uart4_pins_sleep>;
+
+        status = "okay";
+
+	rts-gpio = <&gpio1 28 GPIO_ACTIVE_HIGH>;
+	rs485-rts-active-high;
+	rs485-rts-delay = <0 0>;
+	linux,rs485-enabled-at-boot-time;
+	rs485-rx-during-tx;
+};
+
+&uart1 {
+	pinctrl-names = "default", "sleep";
+        pinctrl-0 = <&uart1_pins_default>;
+        pinctrl-1 = <&uart1_pins_sleep>;
+
+        status = "okay";
+};
+
+&pruss {
+	pinctrl-names = "default";
+        pinctrl-0 = <&profibus_pins_default>;
+	status = "okay";
+};
+
+/ {
+        pwm7: dmtimer-pwm@7 {
+                compatible = "ti,omap-dmtimer-pwm";
+                ti,timers = <&timer7>;
+                #pwm-cells = <3>;
+        };
+
+        pwm-beeper {
+                compatible = "pwm-beeper";
+                pwms = <&pwm7>;
+        };
+};

+ 271 - 0
board/GfA/Display001/linux_3.12.30/linux-014-edt-touch-add-M12.patch

@@ -0,0 +1,271 @@
+diff -Naurp a/drivers/input/touchscreen/edt-ft5x06.c b/drivers/input/touchscreen/edt-ft5x06.c
+--- a/drivers/input/touchscreen/edt-ft5x06.c	2017-01-22 23:28:20.288470982 +0100
++++ b/drivers/input/touchscreen/edt-ft5x06.c	2017-01-22 23:28:55.752481073 +0100
+@@ -54,6 +54,13 @@
+ #define M09_REGISTER_NUM_X		0x94
+ #define M09_REGISTER_NUM_Y		0x95
+ 
++#define M12_REGISTER_THRESHOLD		0x80
++#define M12_REGISTER_GAIN		0x92
++#define M12_REGISTER_OFFSET		0x93
++#define M12_REGISTER_NUM_X		0x94
++#define M12_REGISTER_NUM_Y		0x95
++#define M12_REGISTER_REPORT_RATE	0x88
++
+ #define NO_REGISTER			0xff
+ 
+ #define WORK_REGISTER_OPMODE		0x3c
+@@ -73,6 +80,7 @@
+ enum edt_ver {
+ 	M06,
+ 	M09,
++	M12,
+ };
+ 
+ struct edt_reg_addr {
+@@ -181,7 +189,8 @@ static irqreturn_t edt_ft5x06_ts_isr(int
+ 		tplen = 4;  /* data comes in so called frames */
+ 		datalen = 26; /* how much bytes to listen for */
+ 		break;
+-
++		
++	case M12:	
+ 	case M09:
+ 		cmd = 0x02;
+ 		offset = 1;
+@@ -204,8 +213,8 @@ static irqreturn_t edt_ft5x06_ts_isr(int
+ 		goto out;
+ 	}
+ 
+-	/* M09 does not send header or CRC */
+-	if (tsdata->version == M06) {
++	/* M09 M12 does not send header or CRC */
++	if (tsdata->version == M06)  {
+ 		if (rdbuf[0] != 0xaa || rdbuf[1] != 0xaa ||
+ 			rdbuf[2] != datalen) {
+ 			dev_err_ratelimited(dev,
+@@ -265,8 +274,9 @@ static int edt_ft5x06_register_write(str
+ 		wrbuf[1] = tsdata->factory_mode ? addr & 0x7f : addr & 0x3f;
+ 		wrbuf[2] = value;
+ 		wrbuf[3] = wrbuf[0] ^ wrbuf[1] ^ wrbuf[2];
+-		return edt_ft5x06_ts_readwrite(tsdata->client, 4,
+-					wrbuf, 0, NULL);
++		return edt_ft5x06_ts_readwrite(tsdata->client, 4, wrbuf, 0, NULL);
++		
++	case M12:
+ 	case M09:
+ 		wrbuf[0] = addr;
+ 		wrbuf[1] = value;
+@@ -305,6 +315,7 @@ static int edt_ft5x06_register_read(stru
+ 		}
+ 		break;
+ 
++        case M12:
+ 	case M09:
+ 		wrbuf[0] = addr;
+ 		error = edt_ft5x06_ts_readwrite(tsdata->client, 1,
+@@ -327,9 +338,10 @@ struct edt_ft5x06_attribute {
+ 	u8 limit_high;
+ 	u8 addr_m06;
+ 	u8 addr_m09;
++	u8 addr_m12;
+ };
+ 
+-#define EDT_ATTR(_field, _mode, _addr_m06, _addr_m09,			\
++#define EDT_ATTR(_field, _mode, _addr_m06, _addr_m09, _addr_m12,			\
+ 		_limit_low, _limit_high)				\
+ 	struct edt_ft5x06_attribute edt_ft5x06_attr_##_field = {	\
+ 		.dattr = __ATTR(_field, _mode,				\
+@@ -338,6 +350,7 @@ struct edt_ft5x06_attribute {
+ 		.field_offset = offsetof(struct edt_ft5x06_ts_data, _field), \
+ 		.addr_m06 = _addr_m06,					\
+ 		.addr_m09 = _addr_m09,					\
++		.addr_m12 = _addr_m12,					\
+ 		.limit_low = _limit_low,				\
+ 		.limit_high = _limit_high,				\
+ 	}
+@@ -368,6 +381,10 @@ static ssize_t edt_ft5x06_setting_show(s
+ 		addr = attr->addr_m06;
+ 		break;
+ 
++        case M12:
++		addr = attr->addr_m12;
++		break;
++
+ 	case M09:
+ 		addr = attr->addr_m09;
+ 		break;
+@@ -437,6 +454,10 @@ static ssize_t edt_ft5x06_setting_store(
+ 		addr = attr->addr_m06;
+ 		break;
+ 
++        case M12:
++		addr = attr->addr_m12;
++		break;
++
+ 	case M09:
+ 		addr = attr->addr_m09;
+ 		break;
+@@ -463,13 +484,13 @@ out:
+ }
+ 
+ static EDT_ATTR(gain, S_IWUSR | S_IRUGO, WORK_REGISTER_GAIN,
+-		M09_REGISTER_GAIN, 0, 31);
++		M09_REGISTER_GAIN, M12_REGISTER_GAIN, 0, 31);
+ static EDT_ATTR(offset, S_IWUSR | S_IRUGO, WORK_REGISTER_OFFSET,
+-		M09_REGISTER_OFFSET, 0, 31);
++		M09_REGISTER_OFFSET, M12_REGISTER_OFFSET, 0, 31);
+ static EDT_ATTR(threshold, S_IWUSR | S_IRUGO, WORK_REGISTER_THRESHOLD,
+-		M09_REGISTER_THRESHOLD, 20, 80);
++		M09_REGISTER_THRESHOLD, M12_REGISTER_THRESHOLD, 1, 255);
+ static EDT_ATTR(report_rate, S_IWUSR | S_IRUGO, WORK_REGISTER_REPORT_RATE,
+-		NO_REGISTER, 3, 14);
++		NO_REGISTER, M12_REGISTER_REPORT_RATE, 3, 14);
+ 
+ static struct attribute *edt_ft5x06_attrs[] = {
+ 	&edt_ft5x06_attr_gain.dattr.attr,
+@@ -504,7 +525,7 @@ static int edt_ft5x06_factory_mode(struc
+ 	}
+ 
+ 	/* mode register is 0x3c when in the work mode */
+-	if (tsdata->version == M09)
++	if ((tsdata->version == M09) || (tsdata->version == M12)) 
+ 		goto m09_out;
+ 
+ 	error = edt_ft5x06_register_write(tsdata, WORK_REGISTER_OPMODE, 0x03);
+@@ -541,7 +562,7 @@ err_out:
+ 	return error;
+ 
+ m09_out:
+-	dev_err(&client->dev, "No factory mode support for M09\n");
++	dev_err(&client->dev, "No factory mode support for M09 and M12\n");
+ 	return -EINVAL;
+ 
+ }
+@@ -717,17 +738,26 @@ static void
+ edt_ft5x06_ts_prepare_debugfs(struct edt_ft5x06_ts_data *tsdata,
+ 			      const char *debugfs_name)
+ {
++	struct edt_reg_addr *reg_addr = &tsdata->reg_addr;
++
+ 	tsdata->debug_dir = debugfs_create_dir(debugfs_name, NULL);
+ 	if (!tsdata->debug_dir)
+ 		return;
+ 
+ 	debugfs_create_u16("num_x", S_IRUSR, tsdata->debug_dir, &tsdata->num_x);
+ 	debugfs_create_u16("num_y", S_IRUSR, tsdata->debug_dir, &tsdata->num_y);
++	debugfs_create_u16("threshold", S_IRUSR, tsdata->debug_dir, &tsdata->threshold);
++	debugfs_create_u16("gain", S_IRUSR, tsdata->debug_dir, &tsdata->gain);
++	debugfs_create_u16("offset", S_IRUSR, tsdata->debug_dir, &tsdata->offset);
++
+ 
+ 	debugfs_create_file("mode", S_IRUSR | S_IWUSR,
+ 			    tsdata->debug_dir, tsdata, &debugfs_mode_fops);
+ 	debugfs_create_file("raw_data", S_IRUSR,
+ 			    tsdata->debug_dir, tsdata, &debugfs_raw_data_fops);
++			    
++	if (reg_addr->reg_report_rate != NO_REGISTER)
++           debugfs_create_u16("report_rate", S_IRUSR, tsdata->debug_dir, &tsdata->report_rate);
+ }
+ 
+ static void
+@@ -807,14 +837,16 @@ static int edt_ft5x06_ts_identify(struct
+ 	 */
+ 	memset(rdbuf, 0, sizeof(rdbuf));
+ 	error = edt_ft5x06_ts_readwrite(client, 1, "\xbb",
+-					EDT_NAME_LEN - 1, rdbuf);
++					EDT_NAME_LEN - 1,
++					rdbuf);
+ 	if (error)
+ 		return error;
+ 
++        printk(KERN_INFO "EDT-TC:: %s ::-----%s----\n", __func__, rdbuf);
+ 	/* if we find something consistent, stay with that assumption
+ 	 * at least M09 won't send 3 bytes here
+ 	 */
+-	if (!(strnicmp(rdbuf + 1, "EP0", 3))) {
++	if ((strnicmp(rdbuf + 1, "EP0", 3) == 0) && (strnicmp(rdbuf + 6, "M12", 3) != 0)) {
+ 		tsdata->version = M06;
+ 
+ 		/* remove last '$' end marker */
+@@ -828,8 +860,24 @@ static int edt_ft5x06_ts_identify(struct
+ 			*p++ = '\0';
+ 		strlcpy(model_name, rdbuf + 1, EDT_NAME_LEN);
+ 		strlcpy(fw_version, p ? p : "", EDT_NAME_LEN);
++	} else if (!(strnicmp(rdbuf + 6, "M12", 3))) {
++		tsdata->version = M12;
++
++		error = edt_ft5x06_ts_readwrite(client, 1, "\xA6",
++						2, rdbuf);
++		if (error)
++			return error;
++
++		strlcpy(fw_version, rdbuf, 2);
++
++		error = edt_ft5x06_ts_readwrite(client, 1, "\xA8",
++						1, rdbuf);
++		if (error)
++			return error;
++
++		snprintf(model_name, EDT_NAME_LEN, "EP0%i%i0M12",
++			rdbuf[0] >> 4, rdbuf[0] & 0x0F);
+ 	} else {
+-		/* since there are only two versions around (M06, M09) */
+ 		tsdata->version = M09;
+ 
+ 		error = edt_ft5x06_ts_readwrite(client, 1, "\xA6",
+@@ -867,9 +915,25 @@ static void edt_ft5x06_ts_get_dt_default
+ {
+ 	struct edt_reg_addr *reg_addr = &tsdata->reg_addr;
+ 
+-	EDT_GET_PROP(threshold, reg_addr->reg_threshold);
+-	EDT_GET_PROP(gain, reg_addr->reg_gain);
+-	EDT_GET_PROP(offset, reg_addr->reg_offset);
++	switch (tsdata->version) {
++	     case M12:
++	      EDT_GET_PROP(threshold_M12, reg_addr->reg_threshold);
++              EDT_GET_PROP(gain_M12, reg_addr->reg_gain);
++              EDT_GET_PROP(offset_M12, reg_addr->reg_offset);
++              break;
++
++	     case M09:
++	      EDT_GET_PROP(threshold_M09, reg_addr->reg_threshold);
++              EDT_GET_PROP(gain_M09, reg_addr->reg_gain);
++              EDT_GET_PROP(offset_M09, reg_addr->reg_offset);
++              break;
++
++	     case M06:
++	      EDT_GET_PROP(threshold_M06, reg_addr->reg_threshold);
++              EDT_GET_PROP(gain_M06, reg_addr->reg_gain);
++              EDT_GET_PROP(offset_M06, reg_addr->reg_offset);
++              break;
++             }
+ }
+ 
+ static void
+@@ -920,6 +984,15 @@ edt_ft5x06_ts_set_regs(struct edt_ft5x06
+ 		reg_addr->reg_num_y = WORK_REGISTER_NUM_Y;
+ 		break;
+ 
++        case M12:
++		reg_addr->reg_threshold = M12_REGISTER_THRESHOLD;
++		reg_addr->reg_report_rate = M12_REGISTER_REPORT_RATE;
++		reg_addr->reg_gain = M12_REGISTER_GAIN;
++		reg_addr->reg_offset = M12_REGISTER_OFFSET;
++		reg_addr->reg_num_x = M12_REGISTER_NUM_X;
++		reg_addr->reg_num_y = M12_REGISTER_NUM_Y;
++		break;
++
+ 	case M09:
+ 		reg_addr->reg_threshold = M09_REGISTER_THRESHOLD;
+ 		reg_addr->reg_gain = M09_REGISTER_GAIN;
+@@ -964,9 +1037,6 @@ static int edt_ft5x06_ts_probe(struct i2
+ 	int error;
+ 	char fw_version[EDT_NAME_LEN];
+ 
+-
+-	printk(KERN_INFO "EDT-TC:: %s ::-----\n", __func__);
+-
+ 	dev_dbg(&client->dev, "probing for EDT FT5x06 I2C\n");
+ 
+ 	tsdata = devm_kzalloc(&client->dev, sizeof(*tsdata), GFP_KERNEL);