summaryrefslogtreecommitdiff
path: root/include/linux/input/mms134s.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/input/mms134s.h')
-rw-r--r--include/linux/input/mms134s.h255
1 files changed, 255 insertions, 0 deletions
diff --git a/include/linux/input/mms134s.h b/include/linux/input/mms134s.h
new file mode 100644
index 00000000..c365bbd4
--- /dev/null
+++ b/include/linux/input/mms134s.h
@@ -0,0 +1,255 @@
+#ifndef _LINUX_MMS134S_TOUCH_H_
+#define _LINUX_MMS134S_TOUCH_H_
+
+#define MMS_DEV_NAME "mms134s"
+
+//fw infor
+#define MMS_FW_NAME "mms134s.fw"
+#define MMS_FW_SIZE 20544
+
+
+/* Flag */
+#define TSP_SEC_FACTORY 0
+#define MMS_HAS_TOUCH_KEY 1
+#define FLASH_VERBOSE_DEBUG 0
+
+#define MAX_SECTION_NUM 3
+#define MAX_FINGER_NUM 5
+#define MAX_WIDTH 30
+#define MAX_PRESSURE 255
+#define MAX_LOG_LENGTH 128
+#define FINGER_EVENT_SZ 6
+#define ESD_DETECT_COUNT 10
+
+/*
+ * ISC_XFER_LEN - ISC unit transfer length.
+ * Give number of 2 power n, where n is between 2 and 10
+ * i.e. 4, 8, 16 ,,, 1024
+ */
+#define ISC_XFER_LEN 1024
+#define MMS_FLASH_PAGE_SZ 1024
+#define ISC_BLOCK_NUM (MMS_FLASH_PAGE_SZ / ISC_XFER_LEN)
+
+/* Registers */
+#define MMS_MODE_CONTROL 0x01
+#define MMS_THRESHOLD 0x05
+#define MMS_TX_NUM 0x0B
+#define MMS_RX_NUM 0x0C
+#define MMS_KEY_NUM 0x0D
+#define MMS_EVENT_PKT_SZ 0x0F
+#define MMS_EVENT_PKT 0x10
+#define MMS_UNIVERSAL_CMD 0xA0
+#define MMS_UNIVERSAL_RESULT_SZ 0xAE
+#define MMS_UNIVERSAL_RESULT 0xAF
+#define MMS_CMD_ENTER_ISC 0x5F
+#define MMS_FW_VERSION 0xE1
+#define MMS_POWER_CONTROL 0xB0
+
+/* Universal commands */
+#define MMS_CMD_SET_LOG_MODE 0x20
+#define MMS_UNIV_ENTER_TEST 0x40
+#define MMS_UNIV_CM_DELTA 0x41
+#define MMS_UNIV_CM_ABS 0x43
+#define MMS_UNIV_CM_JITTER 0x45
+#define MMS_UNIV_GET_DELTA_KEY 0x4A
+#define MMS_UNIV_GET_ABS_KEY 0x4B
+#define MMS_UNIV_GET_JITTER_KEY 0x4C
+#define MMS_UNIV_EXIT_TEST 0x4F
+#define MMS_UNIV_INTENSITY 0x70
+#define MMS_UNIV_REFERENCE 0x72
+
+/* Event types */
+#define MMS_TEST_MODE 0X0C
+#define MMS_LOG_EVENT 0x0D
+#define MMS_NOTIFY_EVENT 0x0E
+#define MMS_ERROR_EVENT 0x0F
+#define MMS_INPUT_EVENT 0x10
+#define MMS_TOUCH_KEY_EVENT 0x40
+
+#if TSP_SEC_FACTORY
+#define TSP_CMD_STR_LEN 32
+#define TSP_CMD_RESULT_STR_LEN 512
+#define TSP_CMD_PARAM_NUM 8
+#define TSP_CMD_FULL_VER_LEN 9
+#endif
+
+enum {
+ SYS_TXNUM = 3,
+ SYS_RXNUM,
+ SYS_CLEAR,
+ SYS_ENABLE,
+ SYS_DISABLE,
+ SYS_INTERRUPT,
+ SYS_RESET,
+};
+
+enum {
+ GET_RX_NUM = 1,
+ GET_TX_NUM,
+ GET_EVENT_DATA,
+};
+
+enum {
+ LOG_TYPE_U08 = 2,
+ LOG_TYPE_S08,
+ LOG_TYPE_U16,
+ LOG_TYPE_S16,
+ LOG_TYPE_U32 = 8,
+ LOG_TYPE_S32,
+};
+
+enum {
+ ISC_ADDR = 0xD5,
+ ISC_CMD_READ_STATUS = 0xD9,
+ ISC_CMD_READ = 0x4000,
+ ISC_CMD_EXIT = 0x8200,
+ ISC_CMD_PAGE_ERASE = 0xC000,
+ ISC_CMD_ERASE = 0xC100,
+ ISC_PAGE_ERASE_DONE = 0x10000,
+ ISC_PAGE_ERASE_ENTER = 0x20000,
+};
+
+#if TSP_SEC_FACTORY
+enum {
+ CMD_STATUS_WAITING = 0,
+ CMD_STATUS_RUNNING,
+ CMD_STATUS_OK,
+ CMD_STATUS_FAIL,
+ CMD_STATUS_NOT_APPLICABLE,
+};
+
+enum {
+ FW_FROM_BUILT_IN = 0,
+ FW_FROM_UMS,
+};
+
+struct mms_fac_data {
+ struct device *fac_tsp_dev;
+#if MMS_HAS_TOUCH_KEY
+ struct device *fac_key_dev;
+#endif
+ struct list_head cmd_list_head;
+ u8 cmd_state;
+ char cmd[TSP_CMD_STR_LEN];
+ char cmd_buff[TSP_CMD_STR_LEN];
+ int cmd_param[TSP_CMD_PARAM_NUM];
+ char cmd_result[TSP_CMD_RESULT_STR_LEN];
+ struct mutex cmd_lock;
+ bool cmd_is_running;
+
+ u8 xnode_num;
+ u8 ynode_num;
+#if MMS_HAS_TOUCH_KEY
+ u8 keynode_num;
+#endif
+/*
+ u8 num_xnode;
+ u8 num_ynode;
+ u16 num_nodes;
+ u16 *reference;
+ s16 *delta;
+
+ u32 ref_max_data;
+ u32 ref_min_data;
+ s16 delta_max_data;
+ u16 delta_max_node;*/
+};
+#endif /* TSP_SEC_FACTORY */
+#if 0
+struct mms_platform_data {
+ unsigned int max_x;
+ unsigned int max_y;
+ unsigned long irqflags;
+ int gpio_int;
+ int vdd_regulator_volt;
+ char const *inkernel_fw_name;
+ char const *ums_fw_name;
+};
+#endif
+
+struct mms_info {
+ struct mms_platform_data *pdata;
+ struct i2c_client *client;
+ struct input_dev *input_dev;
+ char phys[32];
+ struct notifier_block nb;
+ int irq;
+ bool enabled;
+ bool *finger_state;
+#if TSP_SEC_FACTORY
+ struct mms_fac_data *fac_data;
+#endif
+};
+
+struct mms_bin_hdr {
+ char tag[8];
+ u16 core_version;
+ u16 section_num;
+ u16 contains_full_binary;
+ u16 reserved0;
+ u32 binary_offset;
+ u32 binary_length;
+ u32 extention_offset;
+ u32 reserved1;
+} __attribute__ ((packed));
+
+struct mms_fw_img {
+ u16 type;
+ u16 version;
+ u16 start_page;
+ u16 end_page;
+ u32 offset;
+ u32 length;
+} __attribute__ ((packed));
+
+struct isc_packet {
+ u8 cmd;
+ u32 addr;
+ u8 data[0];
+} __attribute__ ((packed));
+
+
+#ifndef CONFIG_TOUCHSCREEN_MMS134S
+extern struct tsp_callbacks *charger_callbacks;
+struct tsp_callbacks {
+ void (*inform_charger)(struct tsp_callbacks *tsp_cb, bool mode);
+};
+#endif
+
+struct mms_platform_data {
+ int max_x;
+ int max_y;
+
+ bool invert_x;
+ bool invert_y;
+
+ int gpio_sda;
+ int gpio_scl;
+ int gpio_int;
+ int gpio_resetb;
+#ifndef CONFIG_TOUCHSCREEN_MMS134S
+ int gpio_vdd_en;
+#else
+ int gpio_lcd_type;
+#endif
+ int (*mux_fw_flash)(bool to_gpios);
+ void (*vdd_on)(bool);
+ int (*is_vdd_on)(void);
+ void (*register_cb)(struct tsp_callbacks *);
+ const char *fw_name;
+ char const *inkernel_fw_name;
+ char const *ums_fw_name;
+
+ bool use_touchkey;
+ bool use_surface_touch;
+ const u8 *touchkey_keycode;
+ int check_module_type;
+ void (*tkey_led_vdd_on)(bool);
+ const char *tsp_ic_name;
+};
+#ifndef CONFIG_TOUCHSCREEN_MMS134S
+extern struct class *sec_class;
+extern int touch_is_pressed;
+#endif
+
+#endif /* _LINUX_MMS134S_TOUCH_H_ */