input: atmel_224e: Add Atmel 224e touchscreen support

HTC kernel version: villeu-jb-crc-3.4.10-ae8b65e

Change-Id: I4ba4e21c13c150deb7ad2546b559877c741a99f1
diff --git a/include/linux/atmel_qt602240.h b/include/linux/atmel_qt602240.h
new file mode 100644
index 0000000..8f7abff
--- /dev/null
+++ b/include/linux/atmel_qt602240.h
@@ -0,0 +1,508 @@
+#ifndef _LINUX_ATMEL_H
+#define _LINUX_ATMEL_H
+
+#include <linux/bitops.h>
+
+#define ATMEL_QT602240_NAME "atmel_qt602240"
+#define ATMEL_MXT224E_NAME "atmel_mxt224e"
+
+#define INFO_BLK_FID                            0
+#define INFO_BLK_VID                            1
+#define INFO_BLK_VER                            2
+#define INFO_BLK_BUILD                          3
+#define INFO_BLK_XSIZE                          4
+#define INFO_BLK_YSIZE                          5
+#define INFO_BLK_OBJS                           6
+
+#define OBJ_TABLE_TYPE                          0
+#define OBJ_TABLE_LSB                           1
+#define OBJ_TABLE_MSB                           2
+#define OBJ_TABLE_SIZE                          3
+#define OBJ_TABLE_INSTANCES                     4
+#define OBJ_TABLE_RIDS                          5
+
+#define RESERVED_T0                               0u
+#define RESERVED_T1                               1u
+#define DEBUG_DELTAS_T2                           2u
+#define DEBUG_REFERENCES_T3                       3u
+#define DEBUG_SIGNALS_T4                          4u
+#define GEN_MESSAGEPROCESSOR_T5                   5u
+#define GEN_COMMANDPROCESSOR_T6                   6u
+#define GEN_POWERCONFIG_T7                        7u
+#define GEN_ACQUISITIONCONFIG_T8                  8u
+#define TOUCH_MULTITOUCHSCREEN_T9                 9u
+#define TOUCH_SINGLETOUCHSCREEN_T10               10u
+#define TOUCH_XSLIDER_T11                         11u
+#define TOUCH_YSLIDER_T12                         12u
+#define TOUCH_XWHEEL_T13                          13u
+#define TOUCH_YWHEEL_T14                          14u
+#define TOUCH_KEYARRAY_T15                        15u
+#define PROCG_SIGNALFILTER_T16                    16u
+#define PROCI_LINEARIZATIONTABLE_T17              17u
+#define SPT_COMCONFIG_T18                         18u
+#define SPT_GPIOPWM_T19                           19u
+#define PROCI_GRIPFACESUPPRESSION_T20             20u
+#define RESERVED_T21                              21u
+#define PROCG_NOISESUPPRESSION_T22                22u
+#define TOUCH_PROXIMITY_T23                       23u
+#define PROCI_ONETOUCHGESTUREPROCESSOR_T24        24u
+#define SPT_SELFTEST_T25                          25u
+#define DEBUG_CTERANGE_T26                        26u
+#define PROCI_TWOTOUCHGESTUREPROCESSOR_T27        27u
+#define SPT_CTECONFIG_T28                         28u
+#define SPT_GPI_T29                               29u
+#define SPT_GATE_T30                              30u
+#define TOUCH_KEYSET_T31                          31u
+#define TOUCH_XSLIDERSET_T32                      32u
+#define SPT_PROTOTYPE_T35                         35u 
+#define DIAGNOSTIC_T37                            37u
+#define PROCI_GRIPSUPPRESSION_T40                 40u 
+#define PROCI_TOUCHSUPPRESSION_T42                42u 
+#define SPT_MESSAGECOUNT_T44                      44u 
+#define SPT_CTECONFIG_T46                         46u 
+#define PROCI_STYLUS_T47                          47u 
+#define PROCG_NOISESUPPRESSION_T48                48u 
+#define PROCI_ADAPTIVETHRESHOLD_T55               55u 
+#define EXTRA_NOISE_SUPPRESSION_T58		  58u 
+
+#define T37_PAGE_SIZE                           128
+
+#define T37_TCH_FLAG_SIZE                       80
+#define T37_TCH_FLAG_IDX                        0
+#define T37_ATCH_FLAG_IDX                       40
+
+#define T37_MODE                                0
+#define T37_PAGE                                1
+#define T37_DATA                                2 
+
+#define T37_PAGE_NUM0                           0
+#define T37_PAGE_NUM1                           1
+#define T37_PAGE_NUM2                           2
+#define T37_PAGE_NUM3                           3
+
+#define MSG_RID                                 0
+
+#define T6_CFG_RESET                            0
+#define T6_CFG_BACKUPNV                         1
+#define T6_CFG_CALIBRATE                        2
+#define T6_CFG_REPORTALL                        3
+#define T6_CFG_DIAG                             5
+
+#define T6_CFG_DIAG_CMD_PAGEUP                  0x01
+#define T6_CFG_DIAG_CMD_PAGEDOWN                0x02
+#define T6_CFG_DIAG_CMD_DELTAS                  0x10
+#define T6_CFG_DIAG_CMD_REF                     0x11
+#define T6_CFG_DIAG_CMD_CTE                     0x31
+#define T6_CFG_DIAG_CMD_TCH                     0xF3
+
+#define T6_MSG_STATUS                           1
+#define T6_MSG_CHECKSUM                         2 
+
+#define T6_MSG_STATUS_COMSERR                   BIT(2)
+#define T6_MSG_STATUS_CFGERR                    BIT(3)
+#define T6_MSG_STATUS_CAL                       BIT(4)
+#define T6_MSG_STATUS_SIGERR                    BIT(5)
+#define T6_MSG_STATUS_OFL                       BIT(6)
+#define T6_MSG_STATUS_RESET                     BIT(7)
+
+#define T7_CFG_IDLEACQINT                       0
+#define T7_CFG_ACTVACQINT                       1
+#define T7_CFG_ACTV2IDLETO                      2
+
+#define T8_CFG_CHRGTIME                         0
+#define T8_CFG_TCHDRIFT                         2
+#define T8_CFG_DRIFTST                          3
+#define T8_CFG_TCHAUTOCAL                       4
+#define T8_CFG_SYNC                             5
+#define T8_CFG_ATCHCALST                        6
+#define T8_CFG_ATCHCALSTHR                      7
+#define T8_CFG_ATCHFRCCALTHR                    8 
+#define T8_CFG_ATCHFRCCALRATIO                  9 
+
+#define T9_CFG_CTRL                             0
+#define T9_CFG_XORIGIN                          1
+#define T9_CFG_YORIGIN                          2
+#define T9_CFG_XSIZE                            3
+#define T9_CFG_YSIZE                            4
+#define T9_CFG_AKSCFG                           5
+#define T9_CFG_BLEN                             6
+#define T9_CFG_TCHTHR                           7
+#define T9_CFG_TCHDI                            8
+#define T9_CFG_ORIENT                           9
+#define T9_CFG_MRGTIMEOUT                       10
+#define T9_CFG_MOVHYSTI                         11
+#define T9_CFG_MOVHYSTN                         12
+#define T9_CFG_MOVFILTER                        13
+#define T9_CFG_NUMTOUCH                         14
+#define T9_CFG_MRGHYST                          15
+#define T9_CFG_MRGTHR                           16
+#define T9_CFG_AMPHYST                          17
+#define T9_CFG_XRANGE                           18 
+#define T9_CFG_YRANGE                           20 
+#define T9_CFG_XLOCLIP                          22
+#define T9_CFG_XHICLIP                          23
+#define T9_CFG_YLOCLIP                          24
+#define T9_CFG_YHICLIP                          25
+#define T9_CFG_XEDGECTRL                        26
+#define T9_CFG_XEDGEDIST                        27
+#define T9_CFG_YEDGECTRL                        28
+#define T9_CFG_YEDGEDIST                        29
+#define T9_CFG_JUMPLIMIT                        30
+#define T9_CFG_TCHHYST                          31 
+#define T9_CFG_XPITCH				32 
+#define T9_CFG_YPITCH				33
+#define T9_CFG_NEXTTCHDI			34
+
+#define T9_MSG_STATUS                           1
+#define T9_MSG_XPOSMSB                          2
+#define T9_MSG_YPOSMSB                          3
+#define T9_MSG_XYPOSLSB                         4
+#define T9_MSG_TCHAREA                          5
+#define T9_MSG_TCHAMPLITUDE                     6
+#define T9_MSG_TCHVECTOR                        7
+
+#define T9_MSG_STATUS_UNGRIP                    BIT(0) 
+#define T9_MSG_STATUS_SUPPRESS                  BIT(1)
+#define T9_MSG_STATUS_AMP                       BIT(2)
+#define T9_MSG_STATUS_VECTOR                    BIT(3)
+#define T9_MSG_STATUS_MOVE                      BIT(4)
+#define T9_MSG_STATUS_RELEASE                   BIT(5)
+#define T9_MSG_STATUS_PRESS                     BIT(6)
+#define T9_MSG_STATUS_DETECT                    BIT(7)
+
+#define T20_CFG_CTRL                            0
+#define T20_CFG_XLOGRIP                         1
+#define T20_CFG_XHIGRIP                         2
+#define T20_CFG_YLOGRIP                         3
+#define T20_CFG_YHIGRIP                         4
+#define T20_CFG_MAXTCHS                         5
+#define T20_CFG_SZTHR1                          7
+#define T20_CFG_SZTHR2                          8
+#define T20_CFG_SHPTHR1                         9
+#define T20_CFG_SHPTHR2                         10
+#define T20_CFG_SHPEXTTO                        11
+
+#define T20_MSG_STATUS                          1
+
+#define T20_MSG_STATUS_FACESUP                  BIT(0)
+
+#define T22_CFG_CTRL                            0
+#define T22_CFG_GCAFUL                          3 
+#define T22_CFG_GCAFLL                          5 
+#define T22_CFG_ACTVGCAFVALID                   7
+#define T22_CFG_NOISETHR                        8
+#define T22_CFG_FREQHOPSCALE                    10
+#define T22_CFG_FREQ                            11 
+#define T22_CFG_IDLEGCAFVAILD                   16
+
+#define T22_MSG_STATUS                          1
+#define T22_MSG_GCAFDEPTH                       2
+#define T22_MSG_FREQINDEX                       3
+
+#define T22_MSG_STATUS_FHCHG                    BIT(0)
+#define T22_MSG_STATUS_GCAFERR                  BIT(2)
+#define T22_MSG_STATUS_FHERR                    BIT(3)
+#define T22_MSG_STATUS_GCAFCHG                  BIT(4)
+
+#define T19_CFG_CTRL                            0
+#define T19_CFG_REPORTMASK                      1
+#define T19_CFG_DIR                             2
+#define T19_CFG_INTPULLUP                       3
+#define T19_CFG_OUT                             4
+#define T19_CFG_WAKE                            5
+#define T19_CFG_PWM                             6
+#define T19_CFG_PERIOD                          7
+#define T19_CFG_DUTY0                           8
+#define T19_CFG_DUTY1                           9
+#define T19_CFG_DUTY2                           10
+#define T19_CFG_DUTY3                           11
+#define T19_CFG_TRIGGER0                        12
+#define T19_CFG_TRIGGER1                        13
+#define T19_CFG_TRIGGER2                        14
+#define T19_CFG_TRIGGER3                        15
+
+#define T19_CFG_CTRL_ENABLE                     BIT(0)
+#define T19_CFG_CTRL_RPTEN                      BIT(1)
+#define T19_CFG_CTRL_FORCERPT                   BIT(2)
+
+#define T19_MSG_STATUS                          1
+
+#define T25_CFG_CTRL                            0
+#define T25_CFG_CMD                             1
+
+#define T25_MSG_STATUS                          1
+#define T25_MSG_INFO                            2 
+
+#define T28_CFG_CTRL                            0
+#define T28_CFG_CMD                             1
+#define T28_CFG_MODE                            2
+#define T28_CFG_IDLEGCAFDEPTH                   3
+#define T28_CFG_ACTVGCAFDEPTH                   4
+#define T28_CFG_VOLTAGE                         5
+
+#define T28_CFG_MODE0_X                         16
+#define T28_CFG_MODE0_Y                         14
+
+#define T28_MSG_STATUS                          1
+
+#define T40_CFG_CTRL                            0
+#define T40_CFG_XLOGRIP                         1
+#define T40_CFG_XHIGRIP                         2
+#define T40_CFG_YLOGRIP                         3
+#define T40_CFG_YHIGRIP                         4
+
+#define T42_CFG_CTRL                            0
+#define T42_CFG_APPRTHR                         1
+#define T42_CFG_MAXAPPRAREA                     2
+#define T42_CFG_MAXTCHAREA                      3
+#define T42_CFG_SUPSTRENGTH                     4
+#define T42_CFG_SUPEXTTO                        5
+#define T42_CFG_MAXNUMTCHS                      6
+#define T42_CFG_SHAPESTRENGTH                   7
+
+#define T42_MSG_STATUS                          1
+
+#define T47_CFG_CTRL                            0
+#define T47_CFG_CONTMIN                         1
+#define T47_CFG_CONTMAX                         2
+#define T47_CFG_STABILITY                       3
+#define T47_CFG_MAXTCHAREA                      4
+#define T47_CFG_AMPLTHR                         5
+#define T47_CFG_STYSHAPE                        6
+#define T47_CFG_HOVERSUP                        7
+#define T47_CFG_CONFTHR                         8
+#define T47_CFG_SYNCSPERX                       9
+
+#define T48_CFG_CTRL                            0
+#define T48_CFG_CFG                             1
+#define T48_CFG_CALCFG                          2
+#define T48_CFG_BASEFREQ                        3
+#define T48_CFG_FREQ                            4 
+#define T48_CFG_MFFREQ                          8 
+#define T48_CFG_NLGAIN                          10
+#define T48_CFG_NLTHR                           11
+#define T48_CFG_GCLIMIT                         12
+#define T48_CFG_GCACTVINVLDADCS                 13
+#define T48_CFG_GCIDLEINVLDADCS                 14
+#define T48_CFG_GCINVALIDTHR                    15 
+#define T48_CFG_GCMAXADCSPERX                   17
+#define T48_CFG_GCLIMITMIN                      18
+#define T48_CFG_GCLIMITMAX                      19
+#define T48_CFG_GCCOUNTMINTGT                   20 
+#define T48_CFG_MFINVLDDIFFTHR                  22
+#define T48_CFG_MFINCADCSPXTHR                  23 
+#define T48_CFG_MFERRORTHR                      25 
+#define T48_CFG_SELFREQMAX                      27
+#define T48_CFG_NOCALCFG                        28 
+#define T48_CFG_T9SETTINGS                      34
+
+#define T48_MSG_STATUS                          1
+#define T48_MSG_ADCSPERX                        2
+#define T48_MSG_FREQ                            3
+#define T48_MSG_STATE                           4
+#define T48_MSG_NOISE_LV                        5
+#define T48_MSG_NLTHR				6
+
+#define T48_MSG_STATUS_FREQCHG                  BIT(0)
+#define T48_MSG_STATUS_APXCHG                   BIT(1)
+#define T48_MSG_STATUS_ALGOERR                  BIT(2)
+#define T48_MSG_STATUS_STATCHG                  BIT(4)
+#define T48_MSG_STATUS_NLVLCGH			BIT(5)
+
+#define T48_MSG_STATE_OFF                       0
+#define T48_MSG_STATE_SEARCH                    1
+#define T48_MSG_STATE_GC                        2
+#define T48_MSG_STATE_GC_ERR                    3
+#define T48_MSG_STATE_MF                        4
+#define T48_MSG_STATE_MF_ERR                    5
+#define T48_MSG_STATE_NORMAL                    6
+
+#define T46_CFG_CTRL                            0
+#define T46_CFG_MODE                            1
+#define T46_CFG_IDLESYNCSPERX                   2
+#define T46_CFG_ACTVSYNCSPERX                   3
+#define T46_CFG_ADCSPERSYNC                     4
+#define T46_CFG_PULSESPERADC                    5
+#define T46_CFG_XSLEW                           6
+#define T46_CFG_SYNCDELAY                       7 
+
+#define T46_CFG_MODE0_X                         16
+#define T46_CFG_MODE0_Y                         14
+
+#define T46_MSG_STATUS                          1
+
+#define T35_CFG_MAXTCHTHR			0
+#define T35_CFG_MAXNLTHR			1
+#define T35_CFG_MAXDI				2
+#define T35_CFG_MAXFILTER			3
+#define T35_CFG_THRCHTHR			4
+
+#define T58_CFG_INCTCHTHR			0
+#define T58_CFG_MAXNLTHR			1
+#define T58_CFG_MAXDI				2
+#define T58_CFG_MAXFILTER			3
+#define T58_CFG_THRCHTHR			4
+
+#define CB_TCHTHR                               0
+#define CB_NOISETHR                             1
+#define CB_IDLEGCAFDEPTH                        2
+#define CB_ACTVGCAFDEPTH                        3
+#define CB_NLTHR				1 
+#define CB_IDLESYNCSPERX                        2 
+#define CB_ACTVSYNCSPERX                        3 
+#define CB_SELFREQMAX				4 
+#define CB_BASEFREQ				5
+#define CB_TCHDI				6 
+#define CB_NEXTTCHDI				7 
+#define CB_INCTCHTHR				8 
+#define CB_MAXNLTHR				9
+#define CB_MINTCHDI				10
+#define CB_MINMOVFILTER				11
+#define CB_TCHTHRCHGTHR				12
+
+#define WLC_IDLEACQINT                          0
+#define WLC_ACTVACQINT                          1
+#define WLC_ACTV2IDLETO                         2
+#define WLC_TCHTHR                              3
+#define WLC_NOISETHR                            4
+#define WLC_IDLEGCAFDEPTH                       5
+#define WLC_ACTVGCAFDEPTH                       6
+
+#define NC_TCHTHR                               0
+#define NC_TCHDI                                1
+#define NC_NOISETHR                             2
+
+#define FL_XLOGRIPMIN                           0
+#define FL_XLOGRIPMAX                           1
+#define FL_XHIGRIPMIN                           2
+#define FL_XHIGRIPMAX                           3
+
+#define TW_SHIFT				1
+
+#define SYN_AND_REPORT_TYPE_A           0
+#define SYN_AND_REPORT_TYPE_B           1
+
+struct info_id_t {
+	uint8_t family_id;
+	uint8_t variant_id;
+	uint8_t version;
+	uint8_t build;
+	uint8_t matrix_x_size;
+	uint8_t matrix_y_size;
+	uint8_t num_declared_objects;
+};
+
+struct object_t {
+	uint8_t object_type;
+	uint16_t i2c_address;
+	uint8_t size;
+	uint8_t instances;
+	uint8_t num_report_ids;
+	uint8_t report_ids;
+};
+
+struct atmel_virtual_key {
+	int keycode;
+	int range_min;
+	int range_max;
+};
+
+struct atmel_finger_data {
+	int x;
+	int y;
+	int w;
+	int z;
+};
+
+struct atmel_cfg {
+	uint8_t objid;
+	uint8_t byte;
+	uint8_t value;
+	uint8_t orival;
+};
+
+struct atmel_mferr {
+	uint8_t cnt;
+	struct atmel_cfg *cfg;
+};
+
+struct atmel_i2c_platform_data {
+	uint16_t version;
+	uint16_t source;
+	uint16_t build;
+	uint16_t abs_x_min;
+	uint16_t abs_x_max;
+	uint16_t abs_y_min;
+	uint16_t abs_y_max;
+	uint8_t abs_pressure_min;
+	uint8_t abs_pressure_max;
+	uint8_t abs_width_min;
+	uint8_t abs_width_max;
+	int gpio_irq;
+	int gpio_rst;
+	int (*power)(int on);
+	uint8_t unlock_attr;
+	uint8_t report_type;
+	int8_t config_T6[6];
+	int8_t config_T7[3];
+	int8_t config_T8[10];
+	int8_t config_T9[35];
+	int8_t config_T15[11];
+	int8_t config_T18[2];
+	int8_t config_T19[16];
+	int8_t config_T20[12];
+	int8_t config_T22[17];
+	int8_t config_T23[15];
+	int8_t config_T24[19];
+	int8_t config_T25[14];
+	int8_t config_T27[7];
+	int8_t config_T28[6];
+	int8_t config_T35[11];
+	int8_t config_T40[5];
+	int8_t config_T42[8];
+	int8_t config_T46[9];
+	int8_t config_T47[10];
+	int8_t config_T48[54];
+	int8_t config_T55[4];
+	int8_t config_T58[11];
+	uint8_t object_crc[3];
+	int8_t cable_config_T7[3];
+	int8_t cable_config_T8[10];
+	int8_t cable_config_T9[35];
+	int8_t cable_config_T22[17];
+	int8_t cable_config_T28[6];
+	int8_t wlc_config[7];
+	uint8_t wlc_freq[5];
+	int8_t noise_config[3];
+	uint8_t call_tchthr[2];
+	uint8_t locking_config[1];
+	uint16_t filter_level[4];
+	uint8_t GCAF_level[5];
+	struct atmel_mferr mferr_config;
+	struct atmel_mferr cfm_calb;
+	struct atmel_mferr cable_config;
+	uint8_t noiseLine_config[8];
+	uint8_t workaround;
+#if defined(CONFIG_TOUCH_KEY_FILTER)
+	uint16_t flt_th;
+#endif
+};
+
+struct atmel_config_data {
+	int8_t config[6];
+	int8_t *config_T7;
+	int8_t *config_T8;
+	int8_t *config_T9;
+	int8_t *config_T22;
+	int8_t *config_T28;
+	int8_t *config_T35;
+	int8_t *config_T40;
+	int8_t *config_T42;
+	int8_t *config_T46;
+	int8_t *config_T48;
+	int8_t *config_T55;
+	int8_t *config_T58;
+};
+
+#endif
+