gt1x_tpd_common.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429
  1. /* drivers/input/touchscreen/gt1x_tpd_custom.h
  2. *
  3. * 2010 - 2014 Goodix Technology.
  4. *
  5. * This program is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License as published by
  7. * the Free Software Foundation; either version 2 of the License, or
  8. * (at your option) any later version.
  9. *
  10. * This program is distributed in the hope that it will be a reference
  11. * to you, when you are integrating the GOODiX's CTP IC into your system,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * General Public License for more details.
  15. *
  16. * Version: 1.0
  17. * Revision Record:
  18. * V1.0: first release. 2014/09/28.
  19. */
  20. #ifndef GT1X_TPD_COMMON_H__
  21. #define GT1X_TPD_COMMON_H__
  22. #include <asm/uaccess.h>
  23. #ifdef CONFIG_MTK_BOOT
  24. #include "mt_boot_common.h"
  25. #endif
  26. #include "tpd.h"
  27. #include "upmu_common.h"
  28. #include <linux/hrtimer.h>
  29. #include <linux/string.h>
  30. #include <linux/vmalloc.h>
  31. #include <linux/jiffies.h>
  32. #include <linux/init.h>
  33. #include <linux/module.h>
  34. #include <linux/delay.h>
  35. #include <linux/i2c.h>
  36. #include <linux/input.h>
  37. #include <linux/slab.h>
  38. #include <linux/gpio.h>
  39. #include <linux/sched.h>
  40. #include <linux/kthread.h>
  41. #include <linux/bitops.h>
  42. #include <linux/kernel.h>
  43. #include <linux/delay.h>
  44. #include <linux/byteorder/generic.h>
  45. #include <linux/interrupt.h>
  46. #include <linux/time.h>
  47. #include <linux/input.h>
  48. #include <linux/proc_fs.h>
  49. #include <asm/uaccess.h>
  50. #ifdef CONFIG_MTK_I2C_EXTENSION
  51. #define TPD_SUPPORT_I2C_DMA 1 /* if gt9l, better enable it if hardware platform supported*/
  52. #else
  53. #define TPD_SUPPORT_I2C_DMA 0
  54. #endif
  55. #if defined(CONFIG_MTK_LEGACY)
  56. #define TPD_POWER_SOURCE_CUSTOM MT6328_POWER_LDO_VGP1
  57. #endif
  58. #define GTP_GPIO_AS_INT(pin) tpd_gpio_as_int(pin)
  59. #define GTP_GPIO_OUTPUT(pin, level) tpd_gpio_output(pin, level)
  60. #define IIC_MAX_TRANSFER_SIZE 8
  61. #define IIC_DMA_MAX_TRANSFER_SIZE 250
  62. #define I2C_MASTER_CLOCK 300
  63. #define TPD_MAX_RESET_COUNT 3
  64. #define TPD_HAVE_CALIBRATION
  65. #define TPD_CALIBRATION_MATRIX {962, 0, 0, 0, 1600, 0, 0, 0}
  66. #define KEY_GESTURE KEY_F24 /* customize gesture-key */
  67. extern int tpd_em_log;
  68. #define CFG_GROUP_LEN(p_cfg_grp) (sizeof(p_cfg_grp) / sizeof(p_cfg_grp[0]))
  69. #ifdef CONFIG_GTP_CUSTOM_CFG
  70. #define GTP_INT_TRIGGER 1 /*0:Rising 1:Falling*/
  71. #define GTP_WAKEUP_LEVEL 1
  72. #endif
  73. #ifdef CONFIG_MTK_LCM_PHYSICAL_ROTATION_HW
  74. #define GTP_WARP_X_ON 1
  75. #define GTP_WARP_Y_ON 1
  76. #else
  77. #define GTP_WARP_X_ON 0
  78. #define GTP_WARP_Y_ON 0
  79. #endif
  80. #define GTP_MAX_TOUCH 5
  81. #ifdef CONFIG_GTP_WITH_STYLUS
  82. #define GTP_STYLUS_KEY_TAB {BTN_STYLUS, BTN_STYLUS2}
  83. #endif
  84. /****************************PART3:OTHER define*********************************/
  85. #define GTP_DRIVER_VERSION "V1.0<2014/09/28>"
  86. #define GTP_I2C_NAME "Goodix-TS"
  87. #define GT1X_DEBUG_PROC_FILE "gt1x_debug"
  88. #define GTP_POLL_TIME 10
  89. #define GTP_ADDR_LENGTH 2
  90. #define GTP_CONFIG_MIN_LENGTH 186
  91. #define GTP_CONFIG_MAX_LENGTH 240
  92. #define GTP_MAX_I2C_XFER_LEN 250
  93. #define SWITCH_OFF 0
  94. #define SWITCH_ON 1
  95. #define GTP_REG_MATRIX_DRVNUM 0x8069
  96. #define GTP_REG_MATRIX_SENNUM 0x806A
  97. #define GTP_REG_RQST 0x8044
  98. #define GTP_REG_BAK_REF 0x90EC
  99. #define GTP_REG_MAIN_CLK 0x8020
  100. #define GTP_REG_HAVE_KEY 0x8057
  101. #define GTP_REG_HN_STATE 0x8800
  102. #define GTP_REG_WAKEUP_GESTURE 0x814C
  103. #define GTP_REG_WAKEUP_GESTURE_DETAIL 0xA2A0 /*need change */
  104. #define GTP_BAK_REF_PATH "/data/gt1x_ref.bin"
  105. #define GTP_MAIN_CLK_PATH "/data/gt1x_clk.bin"
  106. /* request type */
  107. #define GTP_RQST_CONFIG 0x01
  108. #define GTP_RQST_BAK_REF 0x02
  109. #define GTP_RQST_RESET 0x03
  110. #define GTP_RQST_MAIN_CLOCK 0x04
  111. #define GTP_RQST_HOTKNOT_CODE 0x20
  112. #define GTP_RQST_RESPONDED 0x00
  113. #define GTP_RQST_IDLE 0xFF
  114. #define HN_DEVICE_PAIRED 0x80
  115. #define HN_MASTER_DEPARTED 0x40
  116. #define HN_SLAVE_DEPARTED 0x20
  117. #define HN_MASTER_SEND 0x10
  118. #define HN_SLAVE_RECEIVED 0x08
  119. /*Register define */
  120. #define GTP_READ_COOR_ADDR 0x814E
  121. #define GTP_REG_CMD 0x8040
  122. #define GTP_REG_SENSOR_ID 0x814A
  123. #define GTP_REG_CONFIG_DATA 0x8050
  124. #define GTP_REG_CONFIG_RESOLUTION 0x8051
  125. #define GTP_REG_CONFIG_TRIGGER 0x8056
  126. #define GTP_REG_CONFIG_CHECKSUM 0x813C
  127. #define GTP_REG_CONFIG_UPDATE 0x813E
  128. #define GTP_REG_VERSION 0x8140
  129. #define GTP_REG_HW_INFO 0x4220
  130. #define GTP_REG_REFRESH_RATE 0x8056
  131. #define GTP_REG_ESD_CHECK 0x8043
  132. #define GTP_REG_FLASH_PASSBY 0x8006
  133. #define GTP_REG_HN_PAIRED 0x81AA
  134. #define GTP_REG_HN_MODE 0x81A8
  135. #define GTP_REG_MODULE_SWITCH3 0x8058
  136. #define set_reg_bit(reg, index, val) ((reg) ^= (!(val) << (index)))
  137. /* cmd define */
  138. #define GTP_CMD_SLEEP 0x05
  139. #define GTP_CMD_CHARGER_ON 0x06
  140. #define GTP_CMD_CHARGER_OFF 0x07
  141. #define GTP_CMD_GESTURE_WAKEUP 0x08
  142. #define GTP_CMD_CLEAR_CFG 0x10
  143. #define GTP_CMD_ESD 0xAA
  144. #define GTP_CMD_HN_TRANSFER 0x22
  145. #define GTP_CMD_HN_EXIT_SLAVE 0x28
  146. /* define offset in the config*/
  147. #define RESOLUTION_LOC (GTP_REG_CONFIG_RESOLUTION - GTP_REG_CONFIG_DATA)
  148. #define TRIGGER_LOC (GTP_REG_CONFIG_TRIGGER - GTP_REG_CONFIG_DATA)
  149. #define MODULE_SWITCH3_LOC (GTP_REG_MODULE_SWITCH3 - GTP_REG_CONFIG_DATA)
  150. #define GTP_I2C_ADDRESS 0xBA
  151. #if GTP_WARP_X_ON
  152. #define GTP_WARP_X(x_max, x) (x_max - 1 - x)
  153. #else
  154. #define GTP_WARP_X(x_max, x) x
  155. #endif
  156. #if GTP_WARP_Y_ON
  157. #define GTP_WARP_Y(y_max, y) (y_max - 1 - y)
  158. #else
  159. #define GTP_WARP_Y(y_max, y) y
  160. #endif
  161. #define IS_NUM_OR_CHAR(x) (((x) > 'A' && (x) < 'Z') || ((x) > '0' && (x) < '9'))
  162. /*Log define*/
  163. #define GTP_INFO(fmt, arg...) pr_warn("<<GTP-INF>>[%s:%d] "fmt"\n", __func__, __LINE__, ##arg)
  164. #define GTP_ERROR(fmt, arg...) pr_err("<<GTP-ERR>>[%s:%d] "fmt"\n", __func__, __LINE__, ##arg)
  165. #define GTP_DEBUG(fmt, arg...) \
  166. do { \
  167. if (tpd_em_log) \
  168. pr_debug("<<GTP-DBG>>[%s:%d]"fmt"\n", __func__, __LINE__, ##arg);\
  169. } while (0)
  170. #ifdef CONFIG_GTP_DEBUG_ARRAY_ON
  171. #define GTP_DEBUG_ARRAY(array, num) \
  172. do { \
  173. s32 i; \
  174. u8 *a = array; \
  175. pr_debug("<<GTP-DBG>>"); \
  176. for (i = 0; i < (num); i++) { \
  177. pr_debug("%02x ", (a)[i]); \
  178. if ((i + 1) % 10 == 0) { \
  179. pr_debug("\n<<GTP-DBG>>");\
  180. } \
  181. } \
  182. pr_debug("\n"); \
  183. } while (0)
  184. #else
  185. #define GTP_DEBUG_ARRAY(array, num) do {} while (0)
  186. #endif
  187. #ifdef CONFIG_GTP_DEBUG_FUNC_ON
  188. #define GTP_DEBUG_FUNC() pr_debug("<<GTP-FUNC>> Func:%s@Line:%d\n", __func__, __LINE__)
  189. #else
  190. #define GTP_DEBUG_FUNC() do {} while (0)
  191. #endif
  192. #define GTP_SWAP(x, y) \
  193. do { \
  194. typeof(x) z = x; \
  195. x = y; \
  196. y = z; \
  197. } while (0)
  198. #pragma pack(1)
  199. struct gt1x_version_info {
  200. u8 product_id[5];
  201. u32 patch_id;
  202. u32 mask_id;
  203. u8 sensor_id;
  204. u8 match_opt;
  205. };
  206. #pragma pack()
  207. typedef enum {
  208. DOZE_DISABLED = 0,
  209. DOZE_ENABLED = 1,
  210. DOZE_WAKEUP = 2,
  211. } DOZE_T;
  212. typedef enum {
  213. CHIP_TYPE_GT1X = 0,
  214. CHIP_TYPE_GT2X = 1,
  215. CHIP_TYPE_NONE = 0xFF
  216. } CHIP_TYPE_T;
  217. #define _ERROR(e) ((0x01 << e) | (0x01 << (sizeof(s32) * 8 - 1)))
  218. #define ERROR _ERROR(1) /*for common use */
  219. /*system relevant*/
  220. #define ERROR_IIC _ERROR(2) /*IIC communication error. */
  221. #define ERROR_MEM _ERROR(3) /*memory error. */
  222. /*system irrelevant*/
  223. #define ERROR_HN_VER _ERROR(10) /*HotKnot version error. */
  224. #define ERROR_CHECK _ERROR(11) /*Compare src and dst error. */
  225. #define ERROR_RETRY _ERROR(12) /*Too many retries. */
  226. #define ERROR_PATH _ERROR(13) /*Mount path error */
  227. #define ERROR_FW _ERROR(14)
  228. #define ERROR_FILE _ERROR(15)
  229. #define ERROR_VALUE _ERROR(16) /*Illegal value of variables */
  230. /* bit operation */
  231. #define SET_BIT(data, flag) ((data) |= (flag))
  232. #define CLR_BIT(data, flag) ((data) &= ~(flag))
  233. #define CHK_BIT(data, flag) ((data) & (flag))
  234. /* touch states */
  235. #define BIT_TOUCH 0x01
  236. #define BIT_TOUCH_KEY 0x02
  237. #define BIT_STYLUS 0x04
  238. #define BIT_STYLUS_KEY 0x08
  239. #define BIT_HOVER 0x10
  240. struct i2c_msg;
  241. extern void tpd_on(void);
  242. extern void tpd_off(void);
  243. /* Export global variables and functions */
  244. /* Export from gt1x_extents.c and gt1x_firmware.h */
  245. #ifdef CONFIG_GTP_HOTKNOT
  246. extern u8 hotknot_enabled;
  247. extern u8 hotknot_transfer_mode;
  248. extern u8 gt1x_patch_jump_fw[];
  249. extern u8 hotknot_auth_fw[];
  250. extern u8 hotknot_transfer_fw[];
  251. #ifdef CONFIG_HOTKNOT_BLOCK_RW
  252. extern s32 hotknot_paired_flag;
  253. extern s32 hotknot_event_handler(u8 *data);
  254. #endif
  255. #endif /*CONFIG_GTP_HOTKNOT */
  256. extern s32 gt1x_init_node(void);
  257. extern bool check_flag;
  258. #ifdef CONFIG_GTP_GESTURE_WAKEUP
  259. extern DOZE_T gesture_doze_status;
  260. extern int gesture_enabled;
  261. extern s32 gesture_event_handler(struct input_dev *dev);
  262. extern s32 gesture_enter_doze(void);
  263. extern void gesture_clear_wakeup_data(void);
  264. #endif
  265. /* Export from gt1x_tpd.c */
  266. extern void gt1x_touch_down(s32 x, s32 y, s32 size, s32 id);
  267. extern void gt1x_touch_up(s32 id);
  268. extern void gt1x_power_switch(s32 state);
  269. extern void gt1x_irq_enable(void);
  270. extern void gt1x_irq_disable(void);
  271. extern int gt1x_debug_proc(u8 *buf, int count);
  272. extern int mt_eint_set_deint(int eint_num, int irq_num);
  273. extern int mt_eint_clr_deint(int eint_num);
  274. struct fw_update_info {
  275. int update_type;
  276. int status;
  277. int progress;
  278. int max_progress;
  279. struct fw_info *firmware;
  280. u32 fw_length;
  281. /* file update */
  282. char *fw_name;
  283. u8 *buffer;
  284. mm_segment_t old_fs;
  285. struct file *fw_file;
  286. /* header update */
  287. u8 *fw_data;
  288. };
  289. /* Export form gt1x_update.c */
  290. extern struct fw_update_info update_info;
  291. extern u8 gt1x_default_FW[];
  292. extern int gt1x_hold_ss51_dsp(void);
  293. extern int gt1x_auto_update_proc(void *data);
  294. extern int gt1x_update_firmware(char *filename);
  295. extern void gt1x_enter_update_mode(void);
  296. extern void gt1x_leave_update_mode(void);
  297. extern int gt1x_hold_ss51_dsp_no_reset(void);
  298. extern int gt1x_load_patch(u8 *patch, u32 patch_size, int offset, int bank_size);
  299. extern int gt1x_startup_patch(void);
  300. extern int gt1x_is_tpd_halt(void);
  301. /* Export from gt1x_tool.c */
  302. #ifdef CONFIG_GTP_CREATE_WR_NODE
  303. extern int gt1x_init_tool_node(void);
  304. extern void gt1x_deinit_tool_node(void);
  305. #endif
  306. /* Export from gt1x_generic.c */
  307. extern struct i2c_client *gt1x_i2c_client;
  308. extern CHIP_TYPE_T gt1x_chip_type;
  309. extern struct gt1x_version_info gt1x_version;
  310. extern s32 gt1x_init_debug_node(void);
  311. extern void gt1x_deinit_debug_node(void);
  312. extern s32 _do_i2c_read(struct i2c_msg *msgs, u16 addr, u8 *buffer, s32 len);
  313. extern s32 _do_i2c_write(struct i2c_msg *msg, u16 addr, u8 *buffer, s32 len);
  314. extern s32 gt1x_i2c_write(u16 addr, u8 *buffer, s32 len);
  315. extern s32 gt1x_i2c_read(u16 addr, u8 *buffer, s32 len);
  316. extern s32 gt1x_i2c_test(void);
  317. extern s32 gt1x_i2c_read_dbl_check(u16 addr, u8 *buffer, s32 len);
  318. extern u8 gt1x_config[];
  319. extern u32 gt1x_cfg_length;
  320. extern u8 gt1x_int_type;
  321. extern u8 gt1x_wakeup_level;
  322. extern u32 gt1x_abs_x_max;
  323. extern u32 gt1x_abs_y_max;
  324. extern u8 gt1x_rawdiff_mode;
  325. extern u8 gt1x_driver_num;
  326. extern u8 gt1x_sensor_num;
  327. extern u8 gt1x_init_failed;
  328. extern s32 gt1x_init(void);
  329. extern void gt1x_deinit(void);
  330. extern s32 gt1x_read_version(struct gt1x_version_info *ver_info);
  331. extern s32 gt1x_enter_sleep(void);
  332. extern s32 gt1x_wakeup_sleep(void);
  333. extern s32 gt1x_init_panel(void);
  334. extern s32 gt1x_get_chip_type(void);
  335. extern s32 gt1x_request_event_handler(void);
  336. extern int gt1x_send_cmd(u8 cmd, u8 data);
  337. extern s32 gt1x_send_cfg(u8 *config, int cfg_len);
  338. extern void gt1x_select_addr(void);
  339. extern s32 gt1x_reset_guitar(void);
  340. extern void gt1x_power_reset(void);
  341. extern int gt1x_parse_config(char *filename, u8 *gt1x_config);
  342. extern s32 gt1x_touch_event_handler(u8 *data, struct input_dev *dev, struct input_dev *pen_dev);
  343. #ifdef CONFIG_GTP_WITH_STYLUS
  344. extern struct input_dev *pen_dev;
  345. extern void gt1x_pen_down(s32 x, s32 y, s32 size, s32 id);
  346. extern void gt1x_pen_up(s32 id);
  347. #endif
  348. #ifdef CONFIG_GTP_PROXIMITY
  349. extern u8 gt1x_proximity_flag;
  350. extern u8 gt1x_proximity_detect;
  351. extern void gt1x_report_ps(u8 state);
  352. extern void gt1x_ps_init(void);
  353. extern int gt1x_prox_event_handler(u8 *data);
  354. #endif
  355. #ifdef CONFIG_GTP_ESD_PROTECT
  356. extern void gt1x_init_esd_protect(void);
  357. extern void gt1x_deinit_esd_protect(void);
  358. extern s32 gt1x_init_ext_watchdog(void);
  359. extern void gt1x_esd_switch(s32 on);
  360. #endif
  361. #ifdef CONFIG_GTP_CHARGER_SWITCH
  362. extern u8 gt1x_config_charger[GTP_CONFIG_MAX_LENGTH];
  363. extern u32 gt1x_get_charger_status(void);
  364. extern void gt1x_charger_switch(s32 on);
  365. extern void gt1x_charger_config(s32 dir_update);
  366. #ifdef MT6573
  367. #define CHR_CON0 (0xF7000000+0x2FA00)
  368. #else
  369. extern bool upmu_is_chr_det(void);
  370. #endif
  371. #endif
  372. extern struct tpd_filter_t tpd_filter;
  373. extern wait_queue_head_t init_waiter;
  374. #endif /* GT1X_TPD_COMMON_H__ */