| Bryan Huntsman | 3f2bc4d | 2011-08-16 17:27:22 -0700 | [diff] [blame] | 1 | /* | 
 | 2 |  *  Atmel maXTouch header file | 
 | 3 |  *   | 
 | 4 |  *  Copyright (c) 2010 Atmel Corporation | 
 | 5 |  *  Copyright (C) 2010 Ulf Samuelsson (ulf@atmel.com) | 
 | 6 |  * | 
 | 7 |  *  This program is free software; you can redistribute it and/or modify | 
 | 8 |  *  it under the terms of the GNU General Public License version 2 as | 
 | 9 |  *  published by the Free Software Foundation. | 
 | 10 |  *  See the file "COPYING" in the main directory of this archive | 
 | 11 |  *  for more details. | 
 | 12 |  * | 
 | 13 |  */ | 
 | 14 |  | 
 | 15 | #define	MXT224_I2C_ADDR1				0x4A | 
 | 16 | #define	MXT224_I2C_ADDR2				0x4B | 
 | 17 | #define	MXT1386_I2C_ADDR1				0x4C | 
 | 18 | #define	MXT1386_I2C_ADDR2				0x4D | 
 | 19 | #define	MXT1386_I2C_ADDR3				0x5A | 
 | 20 | #define	MXT1386_I2C_ADDR4				0x5B | 
 | 21 |  | 
 | 22 | /* | 
 | 23 |  * Select this address from above depending on what maXTouch | 
 | 24 |  * chip you have and how it's address pins are configured; | 
 | 25 |  * see datasheet. | 
 | 26 |  */ | 
 | 27 |  | 
 | 28 | #define MXT_I2C_ADDRESS                                 MXT224_I2C_ADDR2 | 
 | 29 |  | 
 | 30 | #define MXT_BL_ADDRESS                                  0x25 | 
 | 31 |  | 
 | 32 | #define	MXT224_FAMILYID				        0x80 | 
 | 33 | #define MXT1386_FAMILYID                                0xA0 | 
 | 34 |  | 
 | 35 | #define	MXT224_CAL_VARIANTID				0x01 | 
 | 36 | #define MXT224_UNCAL_VARIANTID                          0x00 | 
 | 37 | #define MXT1386_CAL_VARIANTID                           0x00 | 
 | 38 |  | 
 | 39 | #define MXT_MAX_REPORTED_WIDTH                          255 | 
 | 40 | #define MXT_MAX_REPORTED_PRESSURE                       255 | 
 | 41 | #define MXT_MAX_TOUCH_SIZE                              255 | 
 | 42 | #define MXT_MAX_NUM_TOUCHES                             10 | 
 | 43 |  | 
 | 44 | /* Fixed addresses inside maXTouch device */ | 
 | 45 | #define	MXT_ADDR_INFO_BLOCK				0 | 
 | 46 | #define	MXT_ADDR_OBJECT_TABLE				7 | 
 | 47 | #define MXT_ID_BLOCK_SIZE                               7 | 
 | 48 | #define	MXT_OBJECT_TABLE_ELEMENT_SIZE			6 | 
 | 49 |  | 
 | 50 | /* Object types */ | 
 | 51 | #define	MXT_DEBUG_DELTAS_T2				2 | 
 | 52 | #define	MXT_DEBUG_REFERENCES_T3				3 | 
 | 53 | #define	MXT_GEN_MESSAGEPROCESSOR_T5			5 | 
 | 54 | #define	MXT_GEN_COMMANDPROCESSOR_T6			6 | 
 | 55 | #define	MXT_GEN_POWERCONFIG_T7				7 | 
 | 56 | #define	MXT_GEN_ACQUIRECONFIG_T8			8 | 
 | 57 | #define	MXT_TOUCH_MULTITOUCHSCREEN_T9			9 | 
 | 58 | #define MXT_TOUCH_SINGLETOUCHSCREEN_T10                 10 | 
 | 59 | #define MXT_TOUCH_XSLIDER_T11                           11 | 
 | 60 | #define MXT_TOUCH_YSLIDER_T12                           12 | 
 | 61 | #define MXT_TOUCH_XWHEEL_T13                            13 | 
 | 62 | #define MXT_TOUCH_YWHEEL_T14                            14 | 
 | 63 | #define	MXT_TOUCH_KEYARRAY_T15				15 | 
 | 64 | #define	MXT_SPT_GPIOPWM_T19				19 | 
 | 65 | #define	MXT_PROCI_GRIPFACESUPPRESSION_T20		20 | 
 | 66 | #define	MXT_PROCG_NOISESUPPRESSION_T22			22 | 
 | 67 | #define	MXT_TOUCH_PROXIMITY_T23				23 | 
 | 68 | #define	MXT_PROCI_ONETOUCHGESTUREPROCESSOR_T24		24 | 
 | 69 | #define	MXT_SPT_SELFTEST_T25				25 | 
 | 70 | #define MXT_DEBUG_CTERANGE_T26				26 | 
 | 71 | #define	MXT_PROCI_TWOTOUCHGESTUREPROCESSOR_T27		27 | 
 | 72 | #define	MXT_SPT_CTECONFIG_T28				28 | 
 | 73 | #define	MXT_TOUCH_KEYSET_T31				31 | 
 | 74 | #define	MXT_TOUCH_XSLIDERSET_T32			32 | 
 | 75 | #define	MXT_DEBUG_DIAGNOSTIC_T37			37 | 
 | 76 | #define	MXT_USER_INFO_T38				38 | 
 | 77 |  | 
 | 78 |  | 
 | 79 | /* | 
 | 80 |  * If a message is read from mXT when there's no new messages available, | 
 | 81 |  * the report ID of the message will be 0xFF. | 
 | 82 |  */ | 
 | 83 | #define	MXT_END_OF_MESSAGES				0xFF | 
 | 84 |  | 
 | 85 |  | 
 | 86 | /* GEN_COMMANDPROCESSOR_T6 Register offsets from T6 base address */ | 
 | 87 | #define	MXT_ADR_T6_RESET				0x00 | 
 | 88 | #define	MXT_ADR_T6_BACKUPNV				0x01 | 
 | 89 | #define	MXT_ADR_T6_CALIBRATE				0x02 | 
 | 90 | #define	MXT_ADR_T6_REPORTALL				0x03 | 
 | 91 | #define	MXT_ADR_T6_RESERVED				0x04 | 
 | 92 | #define	MXT_ADR_T6_DIAGNOSTIC				0x05 | 
 | 93 |  | 
 | 94 | /* T6 Debug Diagnostics Commands */ | 
 | 95 | #define	MXT_CMD_T6_PAGE_UP          0x01 | 
 | 96 | #define	MXT_CMD_T6_PAGE_DOWN        0x02 | 
 | 97 | #define	MXT_CMD_T6_DELTAS_MODE      0x10 | 
 | 98 | #define	MXT_CMD_T6_REFERENCES_MODE  0x11 | 
 | 99 | #define	MXT_CMD_T6_CTE_MODE         0x31 | 
 | 100 |  | 
 | 101 | /* T6 Backup Command */ | 
 | 102 | #define MXT_CMD_T6_BACKUP           0x55 | 
 | 103 |  | 
 | 104 | /* SPT_DEBUG_DIAGNOSTIC_T37 Register offsets from T37 base address */ | 
 | 105 | #define MXT_ADR_T37_PAGE                                0x01 | 
 | 106 | #define	MXT_ADR_T37_DATA				0x02 | 
 | 107 |  | 
 | 108 |  | 
 | 109 |  | 
 | 110 | /************************************************************************ | 
 | 111 |  * MESSAGE OBJECTS ADDRESS FIELDS | 
 | 112 |  * | 
 | 113 |  ************************************************************************/ | 
 | 114 | #define MXT_MSG_REPORTID                                0x00 | 
 | 115 |  | 
 | 116 |  | 
 | 117 | /* MXT_GEN_MESSAGEPROCESSOR_T5 Message address definitions		*/ | 
 | 118 | #define	MXT_MSG_T5_REPORTID				0x00 | 
 | 119 | #define	MXT_MSG_T5_MESSAGE				0x01 | 
 | 120 | #define	MXT_MSG_T5_CHECKSUM				0x08 | 
 | 121 |  | 
 | 122 | /* MXT_GEN_COMMANDPROCESSOR_T6 Message address definitions		*/ | 
 | 123 | #define	MXT_MSG_T6_STATUS				0x01 | 
 | 124 | #define		MXT_MSGB_T6_COMSERR		0x04 | 
 | 125 | #define		MXT_MSGB_T6_CFGERR		0x08 | 
 | 126 | #define		MXT_MSGB_T6_CAL			0x10 | 
 | 127 | #define		MXT_MSGB_T6_SIGERR		0x20 | 
 | 128 | #define		MXT_MSGB_T6_OFL			0x40 | 
 | 129 | #define		MXT_MSGB_T6_RESET		0x80 | 
 | 130 | /* Three bytes */ | 
 | 131 | #define	MXT_MSG_T6_CHECKSUM				0x02 | 
 | 132 |  | 
 | 133 | /* MXT_GEN_POWERCONFIG_T7 NO Message address definitions		*/ | 
 | 134 | /* MXT_GEN_ACQUIRECONFIG_T8 Message address definitions			*/ | 
 | 135 | /* MXT_TOUCH_MULTITOUCHSCREEN_T9 Message address definitions		*/ | 
 | 136 |  | 
 | 137 | #define	MXT_MSG_T9_STATUS				0x01 | 
 | 138 | /* Status bit field */ | 
 | 139 | #define		MXT_MSGB_T9_SUPPRESS		0x02 | 
 | 140 | #define		MXT_MSGB_T9_AMP			0x04 | 
 | 141 | #define		MXT_MSGB_T9_VECTOR		0x08 | 
 | 142 | #define		MXT_MSGB_T9_MOVE		0x10 | 
 | 143 | #define		MXT_MSGB_T9_RELEASE		0x20 | 
 | 144 | #define		MXT_MSGB_T9_PRESS		0x40 | 
 | 145 | #define		MXT_MSGB_T9_DETECT		0x80 | 
 | 146 |  | 
 | 147 | #define	MXT_MSG_T9_XPOSMSB				0x02 | 
 | 148 | #define	MXT_MSG_T9_YPOSMSB				0x03 | 
 | 149 | #define	MXT_MSG_T9_XYPOSLSB				0x04 | 
 | 150 | #define	MXT_MSG_T9_TCHAREA				0x05 | 
 | 151 | #define	MXT_MSG_T9_TCHAMPLITUDE				0x06 | 
 | 152 | #define	MXT_MSG_T9_TCHVECTOR				0x07 | 
 | 153 |  | 
 | 154 |  | 
 | 155 | /* MXT_SPT_GPIOPWM_T19 Message address definitions			*/ | 
 | 156 | #define	MXT_MSG_T19_STATUS				0x01 | 
 | 157 |  | 
 | 158 | /* MXT_PROCI_GRIPFACESUPPRESSION_T20 Message address definitions	*/ | 
 | 159 | #define	MXT_MSG_T20_STATUS				0x01 | 
 | 160 | #define		MXT_MSGB_T20_FACE_SUPPRESS	0x01 | 
 | 161 | /* MXT_PROCG_NOISESUPPRESSION_T22 Message address definitions		*/ | 
 | 162 | #define	MXT_MSG_T22_STATUS				0x01 | 
 | 163 | #define		MXT_MSGB_T22_FHCHG		0x01 | 
 | 164 | #define		MXT_MSGB_T22_GCAFERR		0x04 | 
 | 165 | #define		MXT_MSGB_T22_FHERR		0x08 | 
 | 166 | #define	MXT_MSG_T22_GCAFDEPTH				0x02 | 
 | 167 |  | 
 | 168 | /* MXT_TOUCH_PROXIMITY_T23 Message address definitions			*/ | 
 | 169 | #define	MXT_MSG_T23_STATUS				0x01 | 
 | 170 | #define		MXT_MSGB_T23_FALL		0x20 | 
 | 171 | #define		MXT_MSGB_T23_RISE		0x40 | 
 | 172 | #define		MXT_MSGB_T23_DETECT		0x80 | 
 | 173 | /* 16 bit */ | 
 | 174 | #define	MXT_MSG_T23_PROXDELTA				0x02 | 
 | 175 |  | 
 | 176 | /* MXT_PROCI_ONETOUCHGESTUREPROCESSOR_T24 Message address definitions	*/ | 
 | 177 | #define	MXT_MSG_T24_STATUS				0x01 | 
 | 178 | #define	MXT_MSG_T24_XPOSMSB				0x02 | 
 | 179 | #define	MXT_MSG_T24_YPOSMSB				0x03 | 
 | 180 | #define	MXT_MSG_T24_XYPOSLSB				0x04 | 
 | 181 | #define	MXT_MSG_T24_DIR					0x05 | 
 | 182 | /* 16 bit */ | 
 | 183 | #define	MXT_MSG_T24_DIST				0x06 | 
 | 184 |  | 
 | 185 | /* MXT_SPT_SELFTEST_T25 Message address definitions			*/ | 
 | 186 | #define	MXT_MSG_T25_STATUS				0x01 | 
 | 187 | /* 5 Bytes */ | 
 | 188 | #define		MXT_MSGR_T25_OK			0xFE | 
 | 189 | #define		MXT_MSGR_T25_INVALID_TEST	0xFD | 
 | 190 | #define		MXT_MSGR_T25_PIN_FAULT		0x11 | 
 | 191 | #define		MXT_MSGR_T25_SIGNAL_LIMIT_FAULT	0x17 | 
 | 192 | #define		MXT_MSGR_T25_GAIN_ERROR		0x20 | 
 | 193 | #define	MXT_MSG_T25_INFO				0x02 | 
 | 194 |  | 
 | 195 | /* MXT_PROCI_TWOTOUCHGESTUREPROCESSOR_T27 Message address definitions	*/ | 
 | 196 | #define	MXT_MSG_T27_STATUS			0x01 | 
 | 197 | #define		MXT_MSGB_T27_ROTATEDIR		0x10 | 
 | 198 | #define		MXT_MSGB_T27_PINCH		0x20 | 
 | 199 | #define		MXT_MSGB_T27_ROTATE		0x40 | 
 | 200 | #define		MXT_MSGB_T27_STRETCH		0x80 | 
 | 201 | #define	MXT_MSG_T27_XPOSMSB			0x02 | 
 | 202 | #define	MXT_MSG_T27_YPOSMSB			0x03 | 
 | 203 | #define	MXT_MSG_T27_XYPOSLSB			0x04 | 
 | 204 | #define	MXT_MSG_T27_ANGLE			0x05 | 
 | 205 |  | 
 | 206 | /* 16 bit */ | 
 | 207 | #define	MXT_MSG_T27_SEPARATION				0x06 | 
 | 208 |  | 
 | 209 | /* MXT_SPT_CTECONFIG_T28 Message address definitions			*/ | 
 | 210 | #define	MXT_MSG_T28_STATUS				0x01 | 
 | 211 | #define	MXT_MSGB_T28_CHKERR		0x01 | 
 | 212 |  | 
 | 213 |  | 
 | 214 | /* One Touch Events */ | 
 | 215 | #define	MXT_GESTURE_RESERVED		0x00 | 
 | 216 | #define	MXT_GESTURE_PRESS		0x01 | 
 | 217 | #define	MXT_GESTURE_RELEASE		0x02 | 
 | 218 | #define	MXT_GESTURE_TAP			0x03 | 
 | 219 | #define	MXT_GESTURE_DOUBLE_TAP		0x04 | 
 | 220 | #define	MXT_GESTURE_FLICK		0x05 | 
 | 221 | #define	MXT_GESTURE_DRAG		0x06 | 
 | 222 | #define	MXT_GESTURE_SHORT_PRESS		0x07 | 
 | 223 | #define	MXT_GESTURE_LONG_PRESS		0x08 | 
 | 224 | #define	MXT_GESTURE_REPEAT_PRESS	0x09 | 
 | 225 | #define	MXT_GESTURE_TAP_AND_PRESS	0x0a | 
 | 226 | #define	MXT_GESTURE_THROW		0x0b | 
 | 227 |  | 
 | 228 | /* Two-touch events */ | 
 | 229 | #define MXT_GESTURE_STRETCH             (1 << 7) | 
 | 230 | #define MXT_GESTURE_ROTATE              (1 << 6) | 
 | 231 | #define MXT_GESTURE_PINCH               (1 << 5) | 
 | 232 | #define MXT_GESTURE_ROTATEDIR           (1 << 4) | 
 | 233 |  | 
 | 234 |  | 
 | 235 |  | 
 | 236 | /* Bootloader states */ | 
 | 237 | #define WAITING_BOOTLOAD_COMMAND   0xC0 | 
 | 238 | #define WAITING_FRAME_DATA         0x80 | 
 | 239 | #define APP_CRC_FAIL               0x40 | 
 | 240 | #define FRAME_CRC_CHECK            0x02 | 
 | 241 | #define FRAME_CRC_PASS             0x04 | 
 | 242 | #define FRAME_CRC_FAIL             0x03 | 
 | 243 |  | 
 | 244 | #define MXT_MAX_FRAME_SIZE         276 | 
 | 245 |  | 
 | 246 | /* Debug levels */ | 
 | 247 | #define DEBUG_INFO     1 | 
 | 248 | #define DEBUG_VERBOSE  2 | 
 | 249 | #define DEBUG_MESSAGES 5 | 
 | 250 | #define DEBUG_RAW      8 | 
 | 251 | #define DEBUG_TRACE   10 | 
 | 252 |  | 
 | 253 | /* IOCTL commands */ | 
 | 254 | /* TODO: get correct numbers! */ | 
 | 255 | #define MXT_SET_ADDRESS_IOCTL ('x' + 1)  /* Sets the internal address pointer */ | 
 | 256 | #define MXT_RESET_IOCTL       ('x' + 2)  /* Resets the device */ | 
 | 257 | #define MXT_CALIBRATE_IOCTL   ('x' + 3)  /* Calibrates the device */ | 
 | 258 | /* Backups the current state of registers to NVM */ | 
 | 259 | #define MXT_BACKUP_IOCTL      ('x' + 4)  | 
 | 260 | /* | 
 | 261 |  * Only non-touch messages can be read from the message buffer  | 
 | 262 |  * (/dev/maXTouch_messages) | 
 | 263 |  */ | 
 | 264 | #define MXT_NONTOUCH_MSG_IOCTL ('x' + 5) | 
 | 265 | /* All messages can be read from the message buffer */ | 
 | 266 | #define MXT_ALL_MSG_IOCTL ('x' + 6)   | 
 | 267 |  | 
 | 268 |  | 
 | 269 | /* Message buffer size. This is a ring buffer, and when full, the oldest entry | 
 | 270 |    will be overwritten. */ | 
 | 271 | #define MXT_MESSAGE_BUFFER_SIZE  128 | 
 | 272 |  | 
 | 273 | /* Routines for memory access within a 16 bit address space */ | 
 | 274 |  | 
 | 275 | /* TODO: - won't compile if functions aren't defined*/ | 
 | 276 | /* Bootloader specific function prototypes. */ | 
 | 277 |  | 
 | 278 | #if 0 | 
 | 279 | static int mxt_read_byte_bl(struct i2c_client *client, u8 *value); | 
 | 280 | static int mxt_read_block_bl(struct i2c_client *client, u16 length, u8 *value); | 
 | 281 | static int mxt_write_byte_bl(struct i2c_client *client, u8 value); | 
 | 282 | static int mxt_write_block_bl(struct i2c_client *client, u16 length, u8 *value); | 
 | 283 | #endif | 
 | 284 |  | 
 | 285 | /** | 
| Mohan Pallaka | 4e9a94e | 2011-11-23 16:34:21 +0530 | [diff] [blame] | 286 |  * struct maxtouch_platform_data - includes platform specific informatio | 
| Bryan Huntsman | 3f2bc4d | 2011-08-16 17:27:22 -0700 | [diff] [blame] | 287 |  * related to Atmel maXTouch touchscreen controller. | 
 | 288 |  *  | 
 | 289 |  * @numtouch:           Number of simultaneous touches supported | 
 | 290 |  * @init_platform_hw(): Initialization function, which can for example | 
 | 291 |  *                      trigger a hardware reset by toggling a GPIO pin | 
 | 292 |  * @exit_platform_hw(): Function to run when the driver is unloaded. | 
 | 293 |  * @valid_interrupt():  Function that checks the validity of the interrupt - | 
 | 294 |  *                      function that check the validity of a interrupt (by | 
 | 295 |  *                      reading the changeline interrupt pin and checking that | 
 | 296 |  *                      it really is low for example). | 
 | 297 |  * @max_x:              Reported X range | 
 | 298 |  * @max_y:              Reported Y range | 
 | 299 |  */ | 
 | 300 |   | 
| Mohan Pallaka | 4e9a94e | 2011-11-23 16:34:21 +0530 | [diff] [blame] | 301 | struct maxtouch_platform_data { | 
| Bryan Huntsman | 3f2bc4d | 2011-08-16 17:27:22 -0700 | [diff] [blame] | 302 | 	u8    numtouch;	/* Number of touches to report	*/ | 
 | 303 | 	int   (*init_platform_hw)(struct i2c_client *client); | 
 | 304 | 	int   (*exit_platform_hw)(struct i2c_client *client); | 
 | 305 | 	int   display_res_x; | 
 | 306 | 	int   display_res_y; | 
 | 307 | 	int   min_x; | 
 | 308 | 	int   min_y; | 
 | 309 | 	int   max_x;    /* The default reported X range   */   | 
 | 310 | 	int   max_y;    /* The default reported Y range   */ | 
 | 311 | 	u8    (*valid_interrupt) (void); | 
 | 312 | 	u8    (*read_chg) (void); | 
 | 313 | 	bool wakeup; | 
 | 314 | 	int (*power_on)(bool on); | 
 | 315 | }; | 
 | 316 |  | 
 | 317 | void	mxt_hw_reset(void); |