/* * Atmel maXTouch header file * * Copyright (c) 2010 Atmel Corporation * Copyright (C) 2010 Ulf Samuelsson (ulf@atmel.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. * See the file "COPYING" in the main directory of this archive * for more details. * */ #define MXT224_I2C_ADDR1 0x4A #define MXT224_I2C_ADDR2 0x4B #define MXT1386_I2C_ADDR1 0x4C #define MXT1386_I2C_ADDR2 0x4D #define MXT1386_I2C_ADDR3 0x5A #define MXT1386_I2C_ADDR4 0x5B /* * Select this address from above depending on what maXTouch * chip you have and how it's address pins are configured; * see datasheet. */ #define MXT_I2C_ADDRESS MXT224_I2C_ADDR2 #define MXT_BL_ADDRESS 0x25 #define MXT224_FAMILYID 0x80 #define MXT1386_FAMILYID 0xA0 #define MXT224_CAL_VARIANTID 0x01 #define MXT224_UNCAL_VARIANTID 0x00 #define MXT1386_CAL_VARIANTID 0x00 #define MXT_MAX_REPORTED_WIDTH 255 #define MXT_MAX_REPORTED_PRESSURE 255 #define MXT_MAX_TOUCH_SIZE 255 #define MXT_MAX_NUM_TOUCHES 10 /* Fixed addresses inside maXTouch device */ #define MXT_ADDR_INFO_BLOCK 0 #define MXT_ADDR_OBJECT_TABLE 7 #define MXT_ID_BLOCK_SIZE 7 #define MXT_OBJECT_TABLE_ELEMENT_SIZE 6 /* Object types */ #define MXT_DEBUG_DELTAS_T2 2 #define MXT_DEBUG_REFERENCES_T3 3 #define MXT_GEN_MESSAGEPROCESSOR_T5 5 #define MXT_GEN_COMMANDPROCESSOR_T6 6 #define MXT_GEN_POWERCONFIG_T7 7 #define MXT_GEN_ACQUIRECONFIG_T8 8 #define MXT_TOUCH_MULTITOUCHSCREEN_T9 9 #define MXT_TOUCH_SINGLETOUCHSCREEN_T10 10 #define MXT_TOUCH_XSLIDER_T11 11 #define MXT_TOUCH_YSLIDER_T12 12 #define MXT_TOUCH_XWHEEL_T13 13 #define MXT_TOUCH_YWHEEL_T14 14 #define MXT_TOUCH_KEYARRAY_T15 15 #define MXT_SPT_GPIOPWM_T19 19 #define MXT_PROCI_GRIPFACESUPPRESSION_T20 20 #define MXT_PROCG_NOISESUPPRESSION_T22 22 #define MXT_TOUCH_PROXIMITY_T23 23 #define MXT_PROCI_ONETOUCHGESTUREPROCESSOR_T24 24 #define MXT_SPT_SELFTEST_T25 25 #define MXT_DEBUG_CTERANGE_T26 26 #define MXT_PROCI_TWOTOUCHGESTUREPROCESSOR_T27 27 #define MXT_SPT_CTECONFIG_T28 28 #define MXT_TOUCH_KEYSET_T31 31 #define MXT_TOUCH_XSLIDERSET_T32 32 #define MXT_DEBUG_DIAGNOSTIC_T37 37 #define MXT_USER_INFO_T38 38 /* * If a message is read from mXT when there's no new messages available, * the report ID of the message will be 0xFF. */ #define MXT_END_OF_MESSAGES 0xFF /* GEN_COMMANDPROCESSOR_T6 Register offsets from T6 base address */ #define MXT_ADR_T6_RESET 0x00 #define MXT_ADR_T6_BACKUPNV 0x01 #define MXT_ADR_T6_CALIBRATE 0x02 #define MXT_ADR_T6_REPORTALL 0x03 #define MXT_ADR_T6_RESERVED 0x04 #define MXT_ADR_T6_DIAGNOSTIC 0x05 /* T6 Debug Diagnostics Commands */ #define MXT_CMD_T6_PAGE_UP 0x01 #define MXT_CMD_T6_PAGE_DOWN 0x02 #define MXT_CMD_T6_DELTAS_MODE 0x10 #define MXT_CMD_T6_REFERENCES_MODE 0x11 #define MXT_CMD_T6_CTE_MODE 0x31 /* T6 Backup Command */ #define MXT_CMD_T6_BACKUP 0x55 /* SPT_DEBUG_DIAGNOSTIC_T37 Register offsets from T37 base address */ #define MXT_ADR_T37_PAGE 0x01 #define MXT_ADR_T37_DATA 0x02 /************************************************************************ * MESSAGE OBJECTS ADDRESS FIELDS * ************************************************************************/ #define MXT_MSG_REPORTID 0x00 /* MXT_GEN_MESSAGEPROCESSOR_T5 Message address definitions */ #define MXT_MSG_T5_REPORTID 0x00 #define MXT_MSG_T5_MESSAGE 0x01 #define MXT_MSG_T5_CHECKSUM 0x08 /* MXT_GEN_COMMANDPROCESSOR_T6 Message address definitions */ #define MXT_MSG_T6_STATUS 0x01 #define MXT_MSGB_T6_COMSERR 0x04 #define MXT_MSGB_T6_CFGERR 0x08 #define MXT_MSGB_T6_CAL 0x10 #define MXT_MSGB_T6_SIGERR 0x20 #define MXT_MSGB_T6_OFL 0x40 #define MXT_MSGB_T6_RESET 0x80 /* Three bytes */ #define MXT_MSG_T6_CHECKSUM 0x02 /* MXT_GEN_POWERCONFIG_T7 NO Message address definitions */ /* MXT_GEN_ACQUIRECONFIG_T8 Message address definitions */ /* MXT_TOUCH_MULTITOUCHSCREEN_T9 Message address definitions */ #define MXT_MSG_T9_STATUS 0x01 /* Status bit field */ #define MXT_MSGB_T9_SUPPRESS 0x02 #define MXT_MSGB_T9_AMP 0x04 #define MXT_MSGB_T9_VECTOR 0x08 #define MXT_MSGB_T9_MOVE 0x10 #define MXT_MSGB_T9_RELEASE 0x20 #define MXT_MSGB_T9_PRESS 0x40 #define MXT_MSGB_T9_DETECT 0x80 #define MXT_MSG_T9_XPOSMSB 0x02 #define MXT_MSG_T9_YPOSMSB 0x03 #define MXT_MSG_T9_XYPOSLSB 0x04 #define MXT_MSG_T9_TCHAREA 0x05 #define MXT_MSG_T9_TCHAMPLITUDE 0x06 #define MXT_MSG_T9_TCHVECTOR 0x07 /* MXT_SPT_GPIOPWM_T19 Message address definitions */ #define MXT_MSG_T19_STATUS 0x01 /* MXT_PROCI_GRIPFACESUPPRESSION_T20 Message address definitions */ #define MXT_MSG_T20_STATUS 0x01 #define MXT_MSGB_T20_FACE_SUPPRESS 0x01 /* MXT_PROCG_NOISESUPPRESSION_T22 Message address definitions */ #define MXT_MSG_T22_STATUS 0x01 #define MXT_MSGB_T22_FHCHG 0x01 #define MXT_MSGB_T22_GCAFERR 0x04 #define MXT_MSGB_T22_FHERR 0x08 #define MXT_MSG_T22_GCAFDEPTH 0x02 /* MXT_TOUCH_PROXIMITY_T23 Message address definitions */ #define MXT_MSG_T23_STATUS 0x01 #define MXT_MSGB_T23_FALL 0x20 #define MXT_MSGB_T23_RISE 0x40 #define MXT_MSGB_T23_DETECT 0x80 /* 16 bit */ #define MXT_MSG_T23_PROXDELTA 0x02 /* MXT_PROCI_ONETOUCHGESTUREPROCESSOR_T24 Message address definitions */ #define MXT_MSG_T24_STATUS 0x01 #define MXT_MSG_T24_XPOSMSB 0x02 #define MXT_MSG_T24_YPOSMSB 0x03 #define MXT_MSG_T24_XYPOSLSB 0x04 #define MXT_MSG_T24_DIR 0x05 /* 16 bit */ #define MXT_MSG_T24_DIST 0x06 /* MXT_SPT_SELFTEST_T25 Message address definitions */ #define MXT_MSG_T25_STATUS 0x01 /* 5 Bytes */ #define MXT_MSGR_T25_OK 0xFE #define MXT_MSGR_T25_INVALID_TEST 0xFD #define MXT_MSGR_T25_PIN_FAULT 0x11 #define MXT_MSGR_T25_SIGNAL_LIMIT_FAULT 0x17 #define MXT_MSGR_T25_GAIN_ERROR 0x20 #define MXT_MSG_T25_INFO 0x02 /* MXT_PROCI_TWOTOUCHGESTUREPROCESSOR_T27 Message address definitions */ #define MXT_MSG_T27_STATUS 0x01 #define MXT_MSGB_T27_ROTATEDIR 0x10 #define MXT_MSGB_T27_PINCH 0x20 #define MXT_MSGB_T27_ROTATE 0x40 #define MXT_MSGB_T27_STRETCH 0x80 #define MXT_MSG_T27_XPOSMSB 0x02 #define MXT_MSG_T27_YPOSMSB 0x03 #define MXT_MSG_T27_XYPOSLSB 0x04 #define MXT_MSG_T27_ANGLE 0x05 /* 16 bit */ #define MXT_MSG_T27_SEPARATION 0x06 /* MXT_SPT_CTECONFIG_T28 Message address definitions */ #define MXT_MSG_T28_STATUS 0x01 #define MXT_MSGB_T28_CHKERR 0x01 /* One Touch Events */ #define MXT_GESTURE_RESERVED 0x00 #define MXT_GESTURE_PRESS 0x01 #define MXT_GESTURE_RELEASE 0x02 #define MXT_GESTURE_TAP 0x03 #define MXT_GESTURE_DOUBLE_TAP 0x04 #define MXT_GESTURE_FLICK 0x05 #define MXT_GESTURE_DRAG 0x06 #define MXT_GESTURE_SHORT_PRESS 0x07 #define MXT_GESTURE_LONG_PRESS 0x08 #define MXT_GESTURE_REPEAT_PRESS 0x09 #define MXT_GESTURE_TAP_AND_PRESS 0x0a #define MXT_GESTURE_THROW 0x0b /* Two-touch events */ #define MXT_GESTURE_STRETCH (1 << 7) #define MXT_GESTURE_ROTATE (1 << 6) #define MXT_GESTURE_PINCH (1 << 5) #define MXT_GESTURE_ROTATEDIR (1 << 4) /* Bootloader states */ #define WAITING_BOOTLOAD_COMMAND 0xC0 #define WAITING_FRAME_DATA 0x80 #define APP_CRC_FAIL 0x40 #define FRAME_CRC_CHECK 0x02 #define FRAME_CRC_PASS 0x04 #define FRAME_CRC_FAIL 0x03 #define MXT_MAX_FRAME_SIZE 276 /* Debug levels */ #define DEBUG_INFO 1 #define DEBUG_VERBOSE 2 #define DEBUG_MESSAGES 5 #define DEBUG_RAW 8 #define DEBUG_TRACE 10 /* IOCTL commands */ /* TODO: get correct numbers! */ #define MXT_SET_ADDRESS_IOCTL ('x' + 1) /* Sets the internal address pointer */ #define MXT_RESET_IOCTL ('x' + 2) /* Resets the device */ #define MXT_CALIBRATE_IOCTL ('x' + 3) /* Calibrates the device */ /* Backups the current state of registers to NVM */ #define MXT_BACKUP_IOCTL ('x' + 4) /* * Only non-touch messages can be read from the message buffer * (/dev/maXTouch_messages) */ #define MXT_NONTOUCH_MSG_IOCTL ('x' + 5) /* All messages can be read from the message buffer */ #define MXT_ALL_MSG_IOCTL ('x' + 6) /* Message buffer size. This is a ring buffer, and when full, the oldest entry will be overwritten. */ #define MXT_MESSAGE_BUFFER_SIZE 128 /* Routines for memory access within a 16 bit address space */ /* TODO: - won't compile if functions aren't defined*/ /* Bootloader specific function prototypes. */ #if 0 static int mxt_read_byte_bl(struct i2c_client *client, u8 *value); static int mxt_read_block_bl(struct i2c_client *client, u16 length, u8 *value); static int mxt_write_byte_bl(struct i2c_client *client, u8 value); static int mxt_write_block_bl(struct i2c_client *client, u16 length, u8 *value); #endif /** * struct maxtouch_platform_data - includes platform specific informatio * related to Atmel maXTouch touchscreen controller. * * @numtouch: Number of simultaneous touches supported * @init_platform_hw(): Initialization function, which can for example * trigger a hardware reset by toggling a GPIO pin * @exit_platform_hw(): Function to run when the driver is unloaded. * @valid_interrupt(): Function that checks the validity of the interrupt - * function that check the validity of a interrupt (by * reading the changeline interrupt pin and checking that * it really is low for example). * @max_x: Reported X range * @max_y: Reported Y range */ struct maxtouch_platform_data { u8 numtouch; /* Number of touches to report */ int (*init_platform_hw)(struct i2c_client *client); int (*exit_platform_hw)(struct i2c_client *client); int display_res_x; int display_res_y; int min_x; int min_y; int max_x; /* The default reported X range */ int max_y; /* The default reported Y range */ u8 (*valid_interrupt) (void); u8 (*read_chg) (void); bool wakeup; int (*power_on)(bool on); }; void mxt_hw_reset(void);