gt9xx_driver.c 59 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443
  1. #include "tpd.h"
  2. #define GUP_FW_INFO
  3. #include "tpd_custom_gt9xx.h"
  4. #include "mt_boot_common.h"
  5. #include "upmu_common.h"
  6. #include <linux/of_irq.h>
  7. #include <linux/interrupt.h>
  8. #ifdef TPD_PROXIMITY
  9. #include <linux/hwmsensor.h>
  10. #include <linux/hwmsen_dev.h>
  11. #include <linux/sensors_io.h>
  12. #endif
  13. #if GTP_SUPPORT_I2C_DMA
  14. #include <linux/dma-mapping.h>
  15. #endif
  16. #include <linux/device.h>
  17. int touch_irq;
  18. static int tpd_flag;
  19. int tpd_halt = 0;
  20. static int tpd_eint_mode = 1;
  21. static int tpd_polling_time = 50;
  22. static DECLARE_WAIT_QUEUE_HEAD(waiter);
  23. static DEFINE_MUTEX(i2c_access);
  24. #if GTP_HAVE_TOUCH_KEY
  25. const u16 touch_key_array[] = TPD_KEYS;
  26. /* #define GTP_MAX_KEY_NUM ( sizeof( touch_key_array )/sizeof( touch_key_array[0] ) ) */
  27. struct touch_virtual_key_map_t {
  28. int point_x;
  29. int point_y;
  30. };
  31. static struct touch_virtual_key_map_t touch_key_point_maping_array[] = GTP_KEY_MAP_ARRAY;
  32. #endif
  33. #if (defined(TPD_WARP_START) && defined(TPD_WARP_END))
  34. static int tpd_wb_start_local[TPD_WARP_CNT] = TPD_WARP_START;
  35. static int tpd_wb_end_local[TPD_WARP_CNT] = TPD_WARP_END;
  36. #endif
  37. #if (defined(TPD_HAVE_CALIBRATION) && !defined(TPD_CUSTOM_CALIBRATION))
  38. /* static int tpd_calmat_local[8] = TPD_CALIBRATION_MATRIX; */
  39. /* static int tpd_def_calmat_local[8] = TPD_CALIBRATION_MATRIX; */
  40. static int tpd_def_calmat_local_normal[8] = TPD_CALIBRATION_MATRIX_ROTATION_NORMAL;
  41. static int tpd_def_calmat_local_factory[8] = TPD_CALIBRATION_MATRIX_ROTATION_FACTORY;
  42. #endif
  43. #if GTP_SUPPORT_I2C_DMA
  44. static u8 *gpDMABuf_va;
  45. static u32 gpDMABuf_pa;
  46. #endif
  47. static irqreturn_t tpd_eint_interrupt_handler(void);
  48. static int touch_event_handler(void *unused);
  49. static int tpd_i2c_probe(struct i2c_client *client, const struct i2c_device_id *id);
  50. static int tpd_i2c_detect(struct i2c_client *client, struct i2c_board_info *info);
  51. static int tpd_i2c_remove(struct i2c_client *client);
  52. static void tpd_on(void);
  53. static void tpd_off(void);
  54. #ifdef GTP_CHARGER_DETECT
  55. #define TPD_CHARGER_CHECK_CIRCLE 50
  56. static struct delayed_work gtp_charger_check_work;
  57. static struct workqueue_struct *gtp_charger_check_workqueue;
  58. static void gtp_charger_check_func(struct work_struct *);
  59. static u8 gtp_charger_mode;
  60. #endif
  61. #if (GTP_ESD_PROTECT || GTP_COMPATIBLE_MODE)
  62. static void force_reset_guitar(void);
  63. #endif
  64. #if GTP_ESD_PROTECT
  65. #define TPD_ESD_CHECK_CIRCLE 2000
  66. static struct delayed_work gtp_esd_check_work;
  67. static struct workqueue_struct *gtp_esd_check_workqueue;
  68. static void gtp_esd_check_func(struct work_struct *);
  69. #endif
  70. #ifdef TPD_PROXIMITY
  71. #define TPD_PROXIMITY_VALID_REG 0x814E
  72. #define TPD_PROXIMITY_ENABLE_REG 0x8042
  73. static u8 tpd_proximity_flag;
  74. static u8 tpd_proximity_detect = 1; /* 0-->close ; 1--> far away */
  75. #endif
  76. #ifndef GTP_REG_REFRESH_RATE
  77. #define GTP_REG_REFRESH_RATE 0x8056
  78. #endif
  79. struct i2c_client *i2c_client_point = NULL;
  80. static const struct i2c_device_id tpd_i2c_id[] = { {"gt9xx", 0}, {} };
  81. static unsigned short force[] = { 0, 0xBA, I2C_CLIENT_END, I2C_CLIENT_END };
  82. static const unsigned short *const forces[] = { force, NULL };
  83. /* static struct i2c_client_address_data addr_data = { .forces = forces,}; */
  84. /* static struct i2c_board_info i2c_tpd __initdata = { I2C_BOARD_INFO("gt9xx", (0xBA >> 1)) }; */
  85. static const struct of_device_id tpd_of_match[] = {
  86. {.compatible = "mediatek,cap_touch"},
  87. {},
  88. };
  89. static struct i2c_driver tpd_i2c_driver = {
  90. .probe = tpd_i2c_probe,
  91. .remove = tpd_i2c_remove,
  92. .detect = tpd_i2c_detect,
  93. .driver.name = "gt9xx",
  94. .driver = {
  95. .name = "gt9xx",
  96. .of_match_table = tpd_of_match,
  97. },
  98. .id_table = tpd_i2c_id,
  99. .address_list = (const unsigned short *)forces,
  100. };
  101. static u8 config[GTP_CONFIG_MAX_LENGTH + GTP_ADDR_LENGTH]
  102. = { GTP_REG_CONFIG_DATA >> 8, GTP_REG_CONFIG_DATA & 0xff };
  103. #ifdef GTP_CHARGER_DETECT
  104. static u8 config_charger[GTP_CONFIG_MAX_LENGTH + GTP_ADDR_LENGTH]
  105. = { GTP_REG_CONFIG_DATA >> 8, GTP_REG_CONFIG_DATA & 0xff };
  106. #endif
  107. #pragma pack(1)
  108. struct st_tpd_info {
  109. u16 pid; /* product id // */
  110. u16 vid; /* version id // */
  111. };
  112. #pragma pack()
  113. struct st_tpd_info tpd_info;
  114. u8 int_type = 0;
  115. u32 abs_x_max = 0;
  116. u32 abs_y_max = 0;
  117. u8 gtp_rawdiff_mode = 0;
  118. u8 cfg_len = 0;
  119. #if GTP_COMPATIBLE_MODE
  120. u8 driver_num = 0;
  121. u8 sensor_num = 0;
  122. u8 gtp_ref_retries = 0;
  123. u8 gtp_clk_retries = 0;
  124. enum CHIP_TYPE_T gtp_chip_type = CHIP_TYPE_GT9;
  125. u8 gtp_clk_buf[6];
  126. u8 rqst_processing = 0;
  127. u8 is_950 = 0;
  128. u8 esd_resetting = 0;
  129. static u8 gtp_bak_ref_proc(struct i2c_client *client, u8 mode);
  130. static u8 gtp_main_clk_proc(struct i2c_client *client);
  131. static void gtp_recovery_reset(struct i2c_client *client);
  132. #endif
  133. static struct proc_dir_entry *gt91xx_config_proc;
  134. /*******************************************************
  135. Function:
  136. Write refresh rate
  137. Input:
  138. rate: refresh rate N (Duration=5+N ms, N=0~15)
  139. Output:
  140. Executive outcomes.0---succeed.
  141. *******************************************************/
  142. static u8 gtp_set_refresh_rate(u8 rate)
  143. {
  144. u8 buf[3] = { GTP_REG_REFRESH_RATE >> 8, GTP_REG_REFRESH_RATE & 0xff, rate };
  145. if (rate > 0xf) {
  146. GTP_ERROR("Refresh rate is over range (%d)", rate);
  147. return FAIL;
  148. }
  149. GTP_INFO("Refresh rate change to %d", rate);
  150. return gtp_i2c_write(i2c_client_point, buf, sizeof(buf));
  151. }
  152. /*******************************************************
  153. Function:
  154. Get refresh rate
  155. Output:
  156. Refresh rate or error code
  157. *******************************************************/
  158. static u8 gtp_get_refresh_rate(void)
  159. {
  160. int ret;
  161. u8 buf[3] = { GTP_REG_REFRESH_RATE >> 8, GTP_REG_REFRESH_RATE & 0xff };
  162. ret = gtp_i2c_read(i2c_client_point, buf, sizeof(buf));
  163. if (ret < 0)
  164. return ret;
  165. GTP_INFO("Refresh rate is %d", buf[GTP_ADDR_LENGTH]);
  166. return buf[GTP_ADDR_LENGTH];
  167. }
  168. /* ============================================================= */
  169. static ssize_t show_refresh_rate(struct device *dev, struct device_attribute *attr, char *buf)
  170. {
  171. int ret = gtp_get_refresh_rate();
  172. if (ret < 0)
  173. return 0;
  174. else
  175. return sprintf(buf, "%d\n", ret);
  176. }
  177. static ssize_t store_refresh_rate(struct device *dev,
  178. struct device_attribute *attr, const char *buf, size_t size)
  179. {
  180. unsigned long rate = 0;
  181. if (kstrtoul(buf, 16, &rate))
  182. return 0;
  183. gtp_set_refresh_rate(rate);
  184. return size;
  185. }
  186. static DEVICE_ATTR(tpd_refresh_rate, 0664, show_refresh_rate, store_refresh_rate);
  187. static struct device_attribute *gt9xx_attrs[] = {
  188. &dev_attr_tpd_refresh_rate,
  189. };
  190. /* ============================================================= */
  191. static int tpd_i2c_detect(struct i2c_client *client, struct i2c_board_info *info)
  192. {
  193. strcpy(info->type, "mtk-tpd");
  194. return 0;
  195. }
  196. #ifdef TPD_PROXIMITY
  197. static s32 tpd_get_ps_value(void)
  198. {
  199. return tpd_proximity_detect;
  200. }
  201. static s32 tpd_enable_ps(s32 enable)
  202. {
  203. u8 state;
  204. s32 ret = -1;
  205. if (enable) {
  206. state = 1;
  207. tpd_proximity_flag = 1;
  208. GTP_INFO("TPD proximity function to be on.");
  209. } else {
  210. state = 0;
  211. tpd_proximity_flag = 0;
  212. GTP_INFO("TPD proximity function to be off.");
  213. }
  214. ret = i2c_write_bytes(i2c_client_point, TPD_PROXIMITY_ENABLE_REG, &state, 1);
  215. if (ret < 0) {
  216. GTP_ERROR("TPD %s proximity cmd failed.", state ? "enable" : "disable");
  217. return ret;
  218. }
  219. GTP_INFO("TPD proximity function %s success.", state ? "enable" : "disable");
  220. return 0;
  221. }
  222. s32 tpd_ps_operate(void *self, u32 command, void *buff_in, s32 size_in,
  223. void *buff_out, s32 size_out, s32 *actualout)
  224. {
  225. s32 err = 0;
  226. s32 value;
  227. hwm_sensor_data *sensor_data;
  228. switch (command) {
  229. case SENSOR_DELAY:
  230. if ((buff_in == NULL) || (size_in < sizeof(int))) {
  231. GTP_ERROR("Set delay parameter error!");
  232. err = -EINVAL;
  233. }
  234. /* Do nothing */
  235. break;
  236. case SENSOR_ENABLE:
  237. if ((buff_in == NULL) || (size_in < sizeof(int))) {
  238. GTP_ERROR("Enable sensor parameter error!");
  239. err = -EINVAL;
  240. } else {
  241. value = *(int *)buff_in;
  242. err = tpd_enable_ps(value);
  243. }
  244. break;
  245. case SENSOR_GET_DATA:
  246. if ((buff_out == NULL) || (size_out < sizeof(hwm_sensor_data))) {
  247. GTP_ERROR("Get sensor data parameter error!");
  248. err = -EINVAL;
  249. } else {
  250. sensor_data = (hwm_sensor_data *) buff_out;
  251. sensor_data->values[0] = tpd_get_ps_value();
  252. sensor_data->value_divide = 1;
  253. sensor_data->status = SENSOR_STATUS_ACCURACY_MEDIUM;
  254. }
  255. break;
  256. default:
  257. GTP_ERROR("proxmy sensor operate function no this parameter %d!", command);
  258. err = -1;
  259. break;
  260. }
  261. return err;
  262. }
  263. #endif
  264. static ssize_t gt91xx_config_read_proc(struct file *file, char *buffer, size_t count, loff_t *ppos)
  265. {
  266. char *ptr = NULL;
  267. char *page = NULL;
  268. char temp_data[GTP_CONFIG_MAX_LENGTH + 2] = { 0 };
  269. int i;
  270. int size;
  271. page = kmalloc(PAGE_SIZE, GFP_KERNEL);
  272. if (!page) {
  273. kfree(page);
  274. return -ENOMEM;
  275. }
  276. ptr = page;
  277. ptr += sprintf(ptr, "==== GT9XX config init value====\n");
  278. for (i = 0; i < GTP_CONFIG_MAX_LENGTH; i++) {
  279. ptr += sprintf(ptr, "0x%02X ", config[i + 2]);
  280. if (i % 8 == 7)
  281. ptr += sprintf(ptr, "\n");
  282. }
  283. ptr += sprintf(ptr, "\n");
  284. ptr += sprintf(ptr, "==== GT9XX config real value====\n");
  285. i2c_read_bytes(i2c_client_point, GTP_REG_CONFIG_DATA, temp_data, GTP_CONFIG_MAX_LENGTH);
  286. for (i = 0; i < GTP_CONFIG_MAX_LENGTH; i++) {
  287. ptr += sprintf(ptr, "0x%02X ", temp_data[i]);
  288. if (i % 8 == 7)
  289. ptr += sprintf(ptr, "\n");
  290. }
  291. /* Touch PID & VID */
  292. ptr += sprintf(ptr, "\n");
  293. ptr += sprintf(ptr, "==== GT9XX Version ID ====\n");
  294. i2c_read_bytes(i2c_client_point, GTP_REG_VERSION, temp_data, 6);
  295. ptr +=
  296. sprintf(ptr, "Chip PID: %c%c%c VID: 0x%02X%02X\n", temp_data[0],
  297. temp_data[1], temp_data[2], temp_data[5], temp_data[4]);
  298. ptr += sprintf(ptr, "Driver VID: 0x%02X%02X\n", gtp_default_FW[12], gtp_default_FW[13]);
  299. i2c_read_bytes(i2c_client_point, 0x41E4, temp_data, 1);
  300. ptr += sprintf(ptr, "Boot status 0x%X\n", temp_data[0]);
  301. /* Touch Status and Clock Gate */
  302. ptr += sprintf(ptr, "\n");
  303. ptr += sprintf(ptr, "==== Touch Status and Clock Gate ====\n");
  304. ptr += sprintf(ptr, "status: 1: on, 0 :off\n");
  305. ptr += sprintf(ptr, "status:%d\n", (tpd_halt + 1) & 0x1);
  306. size = ptr - page;
  307. kfree(page);
  308. return size;
  309. }
  310. static ssize_t gt91xx_config_write_proc(struct file *file, const char *buffer, size_t count,
  311. loff_t *ppos)
  312. {
  313. s32 ret = 0;
  314. char temp[25] = { 0 }; /* for store special format cmd */
  315. char mode_str[15] = { 0 };
  316. unsigned int mode;
  317. u8 buf[1];
  318. GTP_DEBUG("write count %ld", (unsigned long int)count);
  319. if (count > GTP_CONFIG_MAX_LENGTH) {
  320. GTP_ERROR("size not match [%d:%ld]", GTP_CONFIG_MAX_LENGTH, (unsigned long int)count);
  321. return -EFAULT;
  322. }
  323. /**********************************************/
  324. /* for store special format cmd */
  325. if (copy_from_user(temp, buffer, sizeof(temp))) {
  326. GTP_ERROR("copy from user fail 2");
  327. return -EFAULT;
  328. }
  329. ret = sscanf(temp, "%s %d", (char *)&mode_str, &mode);
  330. /***********POLLING/EINT MODE switch****************/
  331. if (strcmp(mode_str, "polling") == 0) {
  332. if (mode >= 10 && mode <= 200) {
  333. GTP_INFO("Switch to polling mode, polling time is %d", mode);
  334. tpd_eint_mode = 0;
  335. tpd_polling_time = mode;
  336. tpd_flag = 1;
  337. wake_up_interruptible(&waiter);
  338. } else {
  339. GTP_INFO("Wrong polling time, please set between 10~200ms");
  340. }
  341. return count;
  342. }
  343. if (strcmp(mode_str, "eint") == 0) {
  344. GTP_INFO("Switch to eint mode");
  345. tpd_eint_mode = 1;
  346. return count;
  347. }
  348. /**********************************************/
  349. if (strcmp(mode_str, "switch") == 0) {
  350. if (mode == 0) /* turn off */
  351. tpd_off();
  352. else if (mode == 1) /* turn on */
  353. tpd_on();
  354. else
  355. GTP_ERROR("error mode :%d", mode);
  356. return count;
  357. }
  358. /* force clear config */
  359. if (strcmp(mode_str, "clear_config") == 0) {
  360. GTP_INFO("Force clear config");
  361. buf[0] = 0x10;
  362. ret = i2c_write_bytes(i2c_client_point, GTP_REG_SLEEP, buf, 1);
  363. return count;
  364. }
  365. if (copy_from_user(&config[2], buffer, count)) {
  366. GTP_ERROR("copy from user fail");
  367. return -EFAULT;
  368. }
  369. /***********clk operate reseved****************/
  370. /**********************************************/
  371. ret = gtp_send_cfg(i2c_client_point);
  372. abs_x_max = (config[RESOLUTION_LOC + 1] << 8) + config[RESOLUTION_LOC];
  373. abs_y_max = (config[RESOLUTION_LOC + 3] << 8) + config[RESOLUTION_LOC + 2];
  374. int_type = (config[TRIGGER_LOC]) & 0x03;
  375. if (ret < 0)
  376. GTP_ERROR("send config failed.");
  377. return count;
  378. }
  379. #if GTP_SUPPORT_I2C_DMA
  380. s32 i2c_dma_read(struct i2c_client *client, u16 addr, u8 *rxbuf, s32 len)
  381. {
  382. int ret;
  383. s32 retry = 0;
  384. u8 buffer[2];
  385. struct i2c_msg msg[2] = {
  386. {
  387. .addr = (client->addr & I2C_MASK_FLAG),
  388. .flags = 0,
  389. .buf = buffer,
  390. .len = 2,
  391. .timing = I2C_MASTER_CLOCK},
  392. {
  393. .addr = (client->addr & I2C_MASK_FLAG),
  394. .ext_flag = (client->ext_flag | I2C_ENEXT_FLAG | I2C_DMA_FLAG),
  395. .flags = I2C_M_RD,
  396. .buf = gpDMABuf_pa,
  397. .len = len,
  398. .timing = I2C_MASTER_CLOCK},
  399. };
  400. buffer[0] = (addr >> 8) & 0xFF;
  401. buffer[1] = addr & 0xFF;
  402. if (rxbuf == NULL)
  403. return -1;
  404. /* GTP_DEBUG("dma i2c read: 0x%04X, %d bytes(s)", addr, len); */
  405. for (retry = 0; retry < 20; ++retry) {
  406. ret = i2c_transfer(client->adapter, &msg[0], 2);
  407. if (ret < 0)
  408. continue;
  409. memcpy(rxbuf, gpDMABuf_va, len);
  410. return 0;
  411. }
  412. GTP_ERROR("Dma I2C Read Error: 0x%04X, %d byte(s), err-code: %d", addr, len, ret);
  413. return ret;
  414. }
  415. s32 i2c_dma_write(struct i2c_client *client, u16 addr, u8 *txbuf, s32 len)
  416. {
  417. int ret;
  418. s32 retry = 0;
  419. u8 *wr_buf = gpDMABuf_va;
  420. struct i2c_msg msg = {
  421. .addr = (client->addr & I2C_MASK_FLAG),
  422. .ext_flag = (client->ext_flag | I2C_ENEXT_FLAG | I2C_DMA_FLAG),
  423. .flags = 0,
  424. .buf = gpDMABuf_pa,
  425. .len = 2 + len,
  426. .timing = I2C_MASTER_CLOCK
  427. };
  428. wr_buf[0] = (u8) ((addr >> 8) & 0xFF);
  429. wr_buf[1] = (u8) (addr & 0xFF);
  430. if (txbuf == NULL)
  431. return -1;
  432. /* GTP_DEBUG("dma i2c write: 0x%04X, %d bytes(s)", addr, len); */
  433. memcpy(wr_buf + 2, txbuf, len);
  434. for (retry = 0; retry < 20; ++retry) {
  435. ret = i2c_transfer(client->adapter, &msg, 1);
  436. if (ret < 0)
  437. continue;
  438. return 0;
  439. }
  440. GTP_ERROR("Dma I2C Write Error: 0x%04X, %d byte(s), err-code: %d", addr, len, ret);
  441. return ret;
  442. }
  443. s32 i2c_read_bytes_dma(struct i2c_client *client, u16 addr, u8 *rxbuf, s32 len)
  444. {
  445. s32 left = len;
  446. s32 read_len = 0;
  447. u8 *rd_buf = rxbuf;
  448. s32 ret = 0;
  449. /* GTP_DEBUG("Read bytes dma: 0x%04X, %d byte(s)", addr, len); */
  450. while (left > 0) {
  451. if (left > GTP_DMA_MAX_TRANSACTION_LENGTH)
  452. read_len = GTP_DMA_MAX_TRANSACTION_LENGTH;
  453. else
  454. read_len = left;
  455. ret = i2c_dma_read(client, addr, rd_buf, read_len);
  456. if (ret < 0) {
  457. GTP_ERROR("dma read failed");
  458. return -1;
  459. }
  460. left -= read_len;
  461. addr += read_len;
  462. rd_buf += read_len;
  463. }
  464. return 0;
  465. }
  466. s32 i2c_write_bytes_dma(struct i2c_client *client, u16 addr, u8 *txbuf, s32 len)
  467. {
  468. s32 ret = 0;
  469. s32 write_len = 0;
  470. s32 left = len;
  471. u8 *wr_buf = txbuf;
  472. /* GTP_DEBUG("Write bytes dma: 0x%04X, %d byte(s)", addr, len); */
  473. while (left > 0) {
  474. if (left > GTP_DMA_MAX_I2C_TRANSFER_SIZE)
  475. write_len = GTP_DMA_MAX_I2C_TRANSFER_SIZE;
  476. else
  477. write_len = left;
  478. ret = i2c_dma_write(client, addr, wr_buf, write_len);
  479. if (ret < 0) {
  480. GTP_ERROR("dma i2c write failed!");
  481. return -1;
  482. }
  483. left -= write_len;
  484. addr += write_len;
  485. wr_buf += write_len;
  486. }
  487. return 0;
  488. }
  489. #endif /* GTP_SUPPORT_I2C_DMA */
  490. int i2c_read_bytes(struct i2c_client *client, u16 addr, u8 *rxbuf, int len)
  491. {
  492. #if GTP_SUPPORT_I2C_DMA
  493. return i2c_read_bytes_dma(client, addr, rxbuf, len);
  494. #else
  495. u8 buffer[GTP_ADDR_LENGTH];
  496. u16 left = len;
  497. u16 offset = 0;
  498. struct i2c_msg msg[2] = {
  499. {
  500. .addr = ((client->addr & I2C_MASK_FLAG) | (I2C_ENEXT_FLAG)),
  501. /* .addr = (client->addr &I2C_MASK_FLAG), */
  502. /* .ext_flag = I2C_ENEXT_FLAG, */
  503. /* .addr = ((client->addr &I2C_MASK_FLAG) | (I2C_PUSHPULL_FLAG)), */
  504. .flags = 0,
  505. .buf = buffer,
  506. .len = GTP_ADDR_LENGTH,
  507. .timing = I2C_MASTER_CLOCK},
  508. {
  509. .addr = ((client->addr & I2C_MASK_FLAG) | (I2C_ENEXT_FLAG)),
  510. /* .addr = (client->addr &I2C_MASK_FLAG), */
  511. /* .ext_flag = I2C_ENEXT_FLAG, */
  512. /* .addr = ((client->addr &I2C_MASK_FLAG) | (I2C_PUSHPULL_FLAG)), */
  513. .flags = I2C_M_RD,
  514. .timing = I2C_MASTER_CLOCK},
  515. };
  516. if (rxbuf == NULL)
  517. return -1;
  518. GTP_DEBUG("i2c_read_bytes to device %02X address %04X len %d", client->addr, addr, len);
  519. while (left > 0) {
  520. buffer[0] = ((addr + offset) >> 8) & 0xFF;
  521. buffer[1] = (addr + offset) & 0xFF;
  522. msg[1].buf = &rxbuf[offset];
  523. if (left > MAX_TRANSACTION_LENGTH) {
  524. msg[1].len = MAX_TRANSACTION_LENGTH;
  525. left -= MAX_TRANSACTION_LENGTH;
  526. offset += MAX_TRANSACTION_LENGTH;
  527. } else {
  528. msg[1].len = left;
  529. left = 0;
  530. }
  531. if (i2c_transfer(client->adapter, &msg[0], 2) != 2) {
  532. GTP_ERROR("I2C read 0x%X length=%d failed", addr + offset, len);
  533. return -1;
  534. }
  535. }
  536. return 0;
  537. #endif
  538. }
  539. s32 gtp_i2c_read(struct i2c_client *client, u8 *buf, s32 len)
  540. {
  541. s32 ret = -1;
  542. u16 addr = (buf[0] << 8) + buf[1];
  543. ret = i2c_read_bytes(client, addr, &buf[2], len - 2);
  544. if (!ret)
  545. return 2;
  546. #if GTP_COMPATIBLE_MODE
  547. if (CHIP_TYPE_GT9F == gtp_chip_type) {
  548. if (1 == esd_resetting)
  549. GTP_INFO("Esd resetting..., no recovery reset");
  550. else
  551. gtp_recovery_reset(client);
  552. }
  553. #endif
  554. gtp_reset_guitar(client, 20);
  555. return ret;
  556. }
  557. int i2c_write_bytes(struct i2c_client *client, u16 addr, u8 *txbuf, int len)
  558. {
  559. #if GTP_SUPPORT_I2C_DMA
  560. return i2c_write_bytes_dma(client, addr, txbuf, len);
  561. #else
  562. u8 buffer[MAX_TRANSACTION_LENGTH];
  563. u16 left = len;
  564. u16 offset = 0;
  565. struct i2c_msg msg = {
  566. .addr = ((client->addr & I2C_MASK_FLAG) | (I2C_ENEXT_FLAG)),
  567. /* .addr = (client->addr &I2C_MASK_FLAG), */
  568. /* .ext_flag = I2C_ENEXT_FLAG, */
  569. /* .addr = ((client->addr &I2C_MASK_FLAG) | (I2C_PUSHPULL_FLAG)), */
  570. .flags = 0,
  571. .buf = buffer,
  572. .timing = I2C_MASTER_CLOCK,
  573. };
  574. if (txbuf == NULL)
  575. return -1;
  576. GTP_DEBUG("i2c_write_bytes to device %02X address %04X len %d", client->addr, addr, len);
  577. while (left > 0) {
  578. buffer[0] = ((addr + offset) >> 8) & 0xFF;
  579. buffer[1] = (addr + offset) & 0xFF;
  580. if (left > MAX_I2C_TRANSFER_SIZE) {
  581. memcpy(&buffer[GTP_ADDR_LENGTH], &txbuf[offset], MAX_I2C_TRANSFER_SIZE);
  582. msg.len = MAX_TRANSACTION_LENGTH;
  583. left -= MAX_I2C_TRANSFER_SIZE;
  584. offset += MAX_I2C_TRANSFER_SIZE;
  585. } else {
  586. memcpy(&buffer[GTP_ADDR_LENGTH], &txbuf[offset], left);
  587. msg.len = left + GTP_ADDR_LENGTH;
  588. left = 0;
  589. }
  590. /* GTP_DEBUG("byte left %d offset %d", left, offset); */
  591. if (i2c_transfer(client->adapter, &msg, 1) != 1) {
  592. GTP_ERROR("I2C write 0x%X%X length=%d failed", buffer[0], buffer[1], len);
  593. return -1;
  594. }
  595. }
  596. return 0;
  597. #endif
  598. }
  599. s32 gtp_i2c_write(struct i2c_client *client, u8 *buf, s32 len)
  600. {
  601. s32 ret = -1;
  602. u16 addr = (buf[0] << 8) + buf[1];
  603. ret = i2c_write_bytes(client, addr, &buf[2], len - 2);
  604. if (!ret)
  605. return 1;
  606. #if GTP_COMPATIBLE_MODE
  607. if (CHIP_TYPE_GT9F == gtp_chip_type) {
  608. if (1 == esd_resetting)
  609. GTP_INFO("Esd resetting..., no recovery reset");
  610. else
  611. gtp_recovery_reset(client);
  612. }
  613. #endif
  614. gtp_reset_guitar(client, 20);
  615. return ret;
  616. }
  617. s32 gtp_i2c_read_dbl_check(struct i2c_client *client, u16 addr, u8 *rxbuf, int len)
  618. {
  619. u8 buf[16] = { 0 };
  620. u8 confirm_buf[16] = { 0 };
  621. u8 retry = 0;
  622. while (retry++ < 3) {
  623. memset(buf, 0xAA, 16);
  624. buf[0] = (u8) (addr >> 8);
  625. buf[1] = (u8) (addr & 0xFF);
  626. gtp_i2c_read(client, buf, len + 2);
  627. memset(confirm_buf, 0xAB, 16);
  628. confirm_buf[0] = (u8) (addr >> 8);
  629. confirm_buf[1] = (u8) (addr & 0xFF);
  630. gtp_i2c_read(client, confirm_buf, len + 2);
  631. if (!memcmp(buf, confirm_buf, len + 2)) {
  632. memcpy(rxbuf, confirm_buf + 2, len);
  633. return SUCCESS;
  634. }
  635. }
  636. GTP_ERROR("i2c read 0x%04X, %d bytes, double check failed!", addr, len);
  637. return FAIL;
  638. }
  639. /*******************************************************
  640. Function:
  641. Send config Function.
  642. Input:
  643. client: i2c client.
  644. Output:
  645. Executive outcomes.0--success,non-0--fail.
  646. *******************************************************/
  647. s32 gtp_send_cfg(struct i2c_client *client)
  648. {
  649. s32 ret = 0;
  650. #if GTP_DRIVER_SEND_CFG
  651. s32 retry = 0;
  652. for (retry = 0; retry < 5; retry++) {
  653. #ifdef GTP_CHARGER_DETECT
  654. if (gtp_charger_mode == 1) {
  655. GTP_DEBUG("Write charger config");
  656. ret =
  657. gtp_i2c_write(client, config_charger,
  658. GTP_CONFIG_MAX_LENGTH + GTP_ADDR_LENGTH);
  659. } else {
  660. GTP_DEBUG("Write normal config");
  661. ret =
  662. gtp_i2c_write(client, config, GTP_CONFIG_MAX_LENGTH + GTP_ADDR_LENGTH);
  663. }
  664. #else
  665. ret = gtp_i2c_write(client, config, GTP_CONFIG_MAX_LENGTH + GTP_ADDR_LENGTH);
  666. #endif
  667. if (ret > 0)
  668. break;
  669. }
  670. #endif
  671. return ret;
  672. }
  673. /*******************************************************
  674. Function:
  675. Read goodix touchscreen version function.
  676. Input:
  677. client: i2c client struct.
  678. version:address to store version info
  679. Output:
  680. Executive outcomes.0---succeed.
  681. *******************************************************/
  682. s32 gtp_read_version(struct i2c_client *client, u16 *version)
  683. {
  684. s32 ret = -1;
  685. s32 i;
  686. u8 buf[8] = { GTP_REG_VERSION >> 8, GTP_REG_VERSION & 0xff };
  687. GTP_DEBUG_FUNC();
  688. ret = gtp_i2c_read(client, buf, sizeof(buf));
  689. if (ret < 0)
  690. GTP_ERROR("GTP read version failed");
  691. return ret;
  692. if (version)
  693. *version = (buf[7] << 8) | buf[6];
  694. tpd_info.vid = *version;
  695. tpd_info.pid = 0x00;
  696. /* for gt9xx series */
  697. for (i = 0; i < 3; i++) {
  698. if (buf[i + 2] < 0x30)
  699. break;
  700. tpd_info.pid |= ((buf[i + 2] - 0x30) << ((2 - i) * 4));
  701. }
  702. GTP_INFO("IC VERSION:%c%c%c_%02x%02x", buf[2], buf[3], buf[4], buf[7], buf[6]);
  703. return ret;
  704. }
  705. /*******************************************************
  706. Function:
  707. GTP initialize function.
  708. Input:
  709. client: i2c client private struct.
  710. Output:
  711. Executive outcomes.0---succeed.
  712. *******************************************************/
  713. static s32 gtp_init_panel(struct i2c_client *client)
  714. {
  715. s32 ret = 0;
  716. #if GTP_DRIVER_SEND_CFG
  717. s32 i;
  718. u8 check_sum = 0;
  719. u8 rd_cfg_buf[16];
  720. u8 cfg_info_group1[] = CTP_CFG_GROUP1;
  721. u8 cfg_info_group2[] = CTP_CFG_GROUP2;
  722. u8 cfg_info_group3[] = CTP_CFG_GROUP3;
  723. u8 *send_cfg_buf[3] = { cfg_info_group1, cfg_info_group2, cfg_info_group3 };
  724. #ifdef GTP_CHARGER_DETECT
  725. u8 cfg_info_group1_charger[] = CTP_CFG_GROUP1_CHARGER;
  726. u8 cfg_info_group2_charger[] = CTP_CFG_GROUP2_CHARGER;
  727. u8 cfg_info_group3_charger[] = CTP_CFG_GROUP3_CHARGER;
  728. u8 *send_cfg_buf_charger[3] = { cfg_info_group1_charger, cfg_info_group2_charger,
  729. cfg_info_group3_charger
  730. };
  731. #endif
  732. u8 cfg_info_len[3] = { sizeof(cfg_info_group1) / sizeof(cfg_info_group1[0]),
  733. sizeof(cfg_info_group2) / sizeof(cfg_info_group2[0]),
  734. sizeof(cfg_info_group3) / sizeof(cfg_info_group3[0])
  735. };
  736. for (i = 0; i < 3; i++) {
  737. if (cfg_info_len[i] > cfg_len)
  738. cfg_len = cfg_info_len[i];
  739. }
  740. GTP_DEBUG("len1=%d,len2=%d,len3=%d,get_len=%d", cfg_info_len[0],
  741. cfg_info_len[1], cfg_info_len[2], cfg_len);
  742. if ((!cfg_info_len[1]) && (!cfg_info_len[2])) {
  743. rd_cfg_buf[GTP_ADDR_LENGTH] = 0;
  744. } else {
  745. rd_cfg_buf[0] = GTP_REG_SENSOR_ID >> 8;
  746. rd_cfg_buf[1] = GTP_REG_SENSOR_ID & 0xff;
  747. ret = gtp_i2c_read(client, rd_cfg_buf, 3);
  748. if (ret < 0) {
  749. GTP_ERROR("Read SENSOR ID failed,default use group1 config!");
  750. rd_cfg_buf[GTP_ADDR_LENGTH] = 0;
  751. goto out;
  752. }
  753. rd_cfg_buf[GTP_ADDR_LENGTH] &= 0x03;
  754. }
  755. GTP_INFO("SENSOR ID:%d", rd_cfg_buf[GTP_ADDR_LENGTH]);
  756. memset(&config[GTP_ADDR_LENGTH], 0, GTP_CONFIG_MAX_LENGTH);
  757. memcpy(&config[GTP_ADDR_LENGTH], send_cfg_buf[rd_cfg_buf[GTP_ADDR_LENGTH]], cfg_len);
  758. #ifdef GTP_CHARGER_DETECT
  759. memset(&config_charger[GTP_ADDR_LENGTH], 0, GTP_CONFIG_MAX_LENGTH);
  760. memcpy(&config_charger[GTP_ADDR_LENGTH],
  761. send_cfg_buf_charger[rd_cfg_buf[GTP_ADDR_LENGTH]], cfg_len);
  762. #endif
  763. #if GTP_CUSTOM_CFG
  764. config[RESOLUTION_LOC] = (u8) tpd_dts_data.tpd_resolution[0];
  765. config[RESOLUTION_LOC + 1] = (u8) (tpd_dts_data.tpd_resolution[0] >> 8);
  766. config[RESOLUTION_LOC + 2] = (u8) tpd_dts_data.tpd_resolution[1];
  767. config[RESOLUTION_LOC + 3] = (u8) (tpd_dts_data.tpd_resolution[1] >> 8);
  768. if (GTP_INT_TRIGGER == 0)
  769. config[TRIGGER_LOC] &= 0xfe;
  770. else if (GTP_INT_TRIGGER == 1)
  771. config[TRIGGER_LOC] |= 0x01;
  772. #endif /* endif GTP_CUSTOM_CFG */
  773. check_sum = 0;
  774. for (i = GTP_ADDR_LENGTH; i < cfg_len; i++)
  775. check_sum += config[i];
  776. config[cfg_len] = (~check_sum) + 1;
  777. #ifdef GTP_CHARGER_DETECT
  778. check_sum = 0;
  779. for (i = GTP_ADDR_LENGTH; i < cfg_len; i++)
  780. check_sum += config_charger[i];
  781. config_charger[cfg_len] = (~check_sum) + 1;
  782. #endif
  783. #else /* else DRIVER NEED NOT SEND CONFIG */
  784. if (cfg_len == 0)
  785. cfg_len = GTP_CONFIG_MAX_LENGTH;
  786. ret = gtp_i2c_read(client, config, cfg_len + GTP_ADDR_LENGTH);
  787. if (ret < 0) {
  788. GTP_ERROR("GTP read resolution & max_touch_num failed, use default value!");
  789. abs_x_max = tpd_dts_data.tpd_resolution[0];
  790. abs_y_max = tpd_dts_data.tpd_resolution[1];
  791. int_type = GTP_INT_TRIGGER;
  792. goto out;
  793. }
  794. #endif /* endif GTP_DRIVER_SEND_CFG */
  795. abs_x_max = (config[RESOLUTION_LOC + 1] << 8) + config[RESOLUTION_LOC];
  796. abs_y_max = (config[RESOLUTION_LOC + 3] << 8) + config[RESOLUTION_LOC + 2];
  797. int_type = (config[TRIGGER_LOC]) & 0x03;
  798. if ((!abs_x_max) || (!abs_y_max)) {
  799. GTP_ERROR("GTP resolution & max_touch_num invalid, use default value!");
  800. abs_x_max = tpd_dts_data.tpd_resolution[0];
  801. abs_y_max = tpd_dts_data.tpd_resolution[1];
  802. }
  803. #if GTP_COMPATIBLE_MODE
  804. if (CHIP_TYPE_GT9F == gtp_chip_type) {
  805. u8 have_key = 0;
  806. if (is_950) {
  807. driver_num = config[GTP_REG_MATRIX_DRVNUM - GTP_REG_CONFIG_DATA + 2];
  808. sensor_num = config[GTP_REG_MATRIX_SENNUM - GTP_REG_CONFIG_DATA + 2];
  809. } else {
  810. driver_num =
  811. (config[CFG_LOC_DRVA_NUM] & 0x1F) + (config[CFG_LOC_DRVB_NUM] & 0x1F);
  812. sensor_num =
  813. (config[CFG_LOC_SENS_NUM] & 0x0F) +
  814. ((config[CFG_LOC_SENS_NUM] >> 4) & 0x0F);
  815. }
  816. have_key = config[GTP_REG_HAVE_KEY - GTP_REG_CONFIG_DATA + 2] & 0x01; /* have key or not */
  817. if (1 == have_key)
  818. driver_num--;
  819. GTP_DEBUG
  820. ("Driver * Sensor: %d * %d(Key: %d), X_MAX = %d, Y_MAX = %d, TRIGGER = 0x%02x",
  821. driver_num, sensor_num, have_key, abs_x_max, abs_y_max, int_type);
  822. } else
  823. #endif
  824. {
  825. ret = gtp_send_cfg(client);
  826. if (ret < 0) {
  827. GTP_ERROR("Send config error.");
  828. goto out;
  829. }
  830. GTP_DEBUG("X_MAX = %d,Y_MAX = %d,TRIGGER = 0x%02x", abs_x_max, abs_y_max, int_type);
  831. }
  832. msleep(20);
  833. out:
  834. return ret;
  835. }
  836. static s8 gtp_i2c_test(struct i2c_client *client)
  837. {
  838. u8 retry = 0;
  839. s8 ret = -1;
  840. u32 hw_info = 0;
  841. GTP_DEBUG_FUNC();
  842. while (retry++ < 5) {
  843. ret = i2c_read_bytes(client, GTP_REG_HW_INFO, (u8 *)&hw_info, sizeof(hw_info));
  844. if ((!ret) && (hw_info == 0x00900600))
  845. return ret;
  846. GTP_ERROR("GTP_REG_HW_INFO : %08X", hw_info);
  847. GTP_ERROR("GTP i2c test failed time %d.", retry);
  848. msleep(20);
  849. }
  850. return -1;
  851. }
  852. /*******************************************************
  853. Function:
  854. Set INT pin as input for FW sync.
  855. Note:
  856. If the INT is high, It means there is pull up resistor attached on the INT pin.
  857. Pull low the INT pin manaully for FW sync.
  858. *******************************************************/
  859. void gtp_int_sync(u32 ms)
  860. {
  861. GTP_DEBUG("There is pull up resisitor attached on the INT pin~!");
  862. tpd_gpio_output(GTP_INT_PORT, 0);
  863. msleep(ms);
  864. tpd_gpio_as_int(GTP_INT_PORT);
  865. }
  866. void gtp_reset_guitar(struct i2c_client *client, s32 ms)
  867. {
  868. GTP_INFO("GTP RESET!");
  869. tpd_gpio_output(GTP_RST_PORT, 0);
  870. msleep(ms);
  871. tpd_gpio_output(GTP_INT_PORT, client->addr == 0x14);
  872. msleep(20);
  873. tpd_gpio_output(GTP_RST_PORT, 1);
  874. msleep(20);
  875. #if GTP_COMPATIBLE_MODE
  876. if (CHIP_TYPE_GT9F == gtp_chip_type)
  877. return;
  878. #endif
  879. gtp_int_sync(50);
  880. }
  881. static int tpd_power_on(struct i2c_client *client)
  882. {
  883. int ret = 0;
  884. int reset_count = 0;
  885. reset_proc:
  886. tpd_gpio_output(GTP_INT_PORT, 0);
  887. tpd_gpio_output(GTP_RST_PORT, 0);
  888. msleep(20);
  889. /* power on, need confirm with SA */
  890. #ifdef TPD_POWER_SOURCE_CUSTOM
  891. ret = regulator_set_voltage(tpd->reg, 3300000, 3300000); /* set 2.8v */
  892. if (ret)
  893. GTP_DEBUG("regulator_set_voltage() failed!\n");
  894. ret = regulator_enable(tpd->reg); /* enable regulator */
  895. if (ret)
  896. GTP_DEBUG("regulator_enable() failed!\n");
  897. #else
  898. hwPowerOn(MT65XX_POWER_LDO_VGP2, VOL_3300, "TP");
  899. #endif
  900. #ifdef TPD_POWER_SOURCE_1800
  901. hwPowerOn(TPD_POWER_SOURCE_1800, VOL_1800, "TP");
  902. #endif
  903. gtp_reset_guitar(client, 20);
  904. #if GTP_COMPATIBLE_MODE
  905. gtp_get_chip_type(client);
  906. if (CHIP_TYPE_GT9F == gtp_chip_type) {
  907. ret = gup_fw_download_proc(NULL, GTP_FL_FW_BURN);
  908. if (FAIL == ret) {
  909. GTP_ERROR("[tpd_power_on]Download fw failed.");
  910. if (reset_count++ < TPD_MAX_RESET_COUNT)
  911. goto reset_proc;
  912. else
  913. return ret;
  914. }
  915. ret = gtp_fw_startup(client);
  916. if (FAIL == ret) {
  917. GTP_ERROR("[tpd_power_on]Startup fw failed.");
  918. if (reset_count++ < TPD_MAX_RESET_COUNT)
  919. goto reset_proc;
  920. else
  921. return ret;
  922. }
  923. } else
  924. #endif
  925. {
  926. ret = gtp_i2c_test(client);
  927. if (ret < 0) {
  928. GTP_ERROR("I2C communication ERROR!");
  929. if (reset_count < TPD_MAX_RESET_COUNT) {
  930. reset_count++;
  931. goto reset_proc;
  932. } else {
  933. goto out;
  934. }
  935. }
  936. }
  937. #if GTP_FW_DOWNLOAD
  938. ret = gup_init_fw_proc(client);
  939. if (ret < 0)
  940. GTP_ERROR("Create fw download thread error.");
  941. #endif
  942. out:
  943. return ret;
  944. }
  945. /* **************** For GT9XXF Start ********************/
  946. #if GTP_COMPATIBLE_MODE
  947. void gtp_get_chip_type(struct i2c_client *client)
  948. {
  949. u8 opr_buf[10] = { 0x00 };
  950. s32 ret = 0;
  951. msleep(20);
  952. ret = gtp_i2c_read_dbl_check(client, GTP_REG_CHIP_TYPE, opr_buf, 10);
  953. if (FAIL == ret) {
  954. GTP_ERROR("Failed to get chip-type, set chip type default: GOODIX_GT9");
  955. gtp_chip_type = CHIP_TYPE_GT9;
  956. return;
  957. }
  958. if (!memcmp(opr_buf, "GOODIX_GT9", 10))
  959. gtp_chip_type = CHIP_TYPE_GT9;
  960. else
  961. gtp_chip_type = CHIP_TYPE_GT9F;
  962. GTP_INFO("Chip Type: %s", (gtp_chip_type == CHIP_TYPE_GT9) ? "GOODIX_GT9" : "GOODIX_GT9F");
  963. }
  964. static u8 gtp_bak_ref_proc(struct i2c_client *client, u8 mode)
  965. {
  966. s32 i = 0;
  967. s32 j = 0;
  968. s32 ret = 0;
  969. struct file *flp = NULL;
  970. u8 *refp = NULL;
  971. u32 ref_len = 0;
  972. u32 ref_seg_len = 0;
  973. s32 ref_grps = 0;
  974. s32 ref_chksum = 0;
  975. u16 tmp = 0;
  976. GTP_DEBUG("[gtp_bak_ref_proc]Driver:%d,Sensor:%d.", driver_num, sensor_num);
  977. /* check file-system mounted */
  978. GTP_DEBUG("[gtp_bak_ref_proc]Waiting for FS %d", gtp_ref_retries);
  979. if (gup_check_fs_mounted("/data") == FAIL) {
  980. GTP_DEBUG("[gtp_bak_ref_proc]/data not mounted");
  981. if (gtp_ref_retries++ < GTP_CHK_FS_MNT_MAX)
  982. return FAIL;
  983. } else {
  984. GTP_DEBUG("[gtp_bak_ref_proc]/data mounted !!!!");
  985. }
  986. if (is_950) {
  987. ref_seg_len = (driver_num * (sensor_num - 1) + 2) * 2;
  988. ref_grps = 6;
  989. ref_len = ref_seg_len * 6; /* for GT950, backup-reference for six segments */
  990. } else {
  991. ref_len = driver_num * (sensor_num - 2) * 2 + 4;
  992. ref_seg_len = ref_len;
  993. ref_grps = 1;
  994. }
  995. refp = kzalloc(ref_len, GFP_KERNEL);
  996. if (refp == NULL) {
  997. GTP_ERROR("[gtp_bak_ref_proc]Alloc memory for ref failed.use default ref");
  998. return FAIL;
  999. }
  1000. memset(refp, 0, ref_len);
  1001. if (gtp_ref_retries >= GTP_CHK_FS_MNT_MAX) {
  1002. for (j = 0; j < ref_grps; ++j)
  1003. refp[ref_seg_len + j * ref_seg_len - 1] = 0x01;
  1004. ret = i2c_write_bytes(client, 0x99D0, refp, ref_len);
  1005. if (-1 == ret) {
  1006. GTP_ERROR("[gtp_bak_ref_proc]Write ref i2c error.");
  1007. ret = FAIL;
  1008. }
  1009. GTP_ERROR("[gtp_bak_ref_proc]Bak file or path is not exist,send default ref.");
  1010. ret = SUCCESS;
  1011. goto exit_ref_proc;
  1012. }
  1013. /* get ref file data */
  1014. flp = filp_open(GTP_BAK_REF_PATH, O_RDWR | O_CREAT, 0660);
  1015. if (IS_ERR(flp)) {
  1016. GTP_ERROR("[gtp_bak_ref_proc]Ref File not found!Creat ref file.");
  1017. /* flp->f_op->llseek(flp, 0, SEEK_SET); */
  1018. /* flp->f_op->write(flp, (char *)refp, ref_len, &flp->f_pos); */
  1019. gtp_ref_retries++;
  1020. ret = FAIL;
  1021. goto exit_ref_proc;
  1022. } else if (GTP_BAK_REF_SEND == mode) {
  1023. flp->f_op->llseek(flp, 0, SEEK_SET);
  1024. ret = flp->f_op->read(flp, (char *)refp, ref_len, &flp->f_pos);
  1025. if (ret < 0) {
  1026. GTP_ERROR("[gtp_bak_ref_proc]Read ref file failed.");
  1027. memset(refp, 0, ref_len);
  1028. }
  1029. }
  1030. if (GTP_BAK_REF_STORE == mode) {
  1031. ret = i2c_read_bytes(client, 0x99D0, refp, ref_len);
  1032. if (-1 == ret) {
  1033. GTP_ERROR("[gtp_bak_ref_proc]Read ref i2c error.");
  1034. ret = FAIL;
  1035. goto exit_ref_proc;
  1036. }
  1037. flp->f_op->llseek(flp, 0, SEEK_SET);
  1038. flp->f_op->write(flp, (char *)refp, ref_len, &flp->f_pos);
  1039. } else {
  1040. /* checksum ref file */
  1041. for (j = 0; j < ref_grps; ++j) {
  1042. ref_chksum = 0;
  1043. for (i = 0; i < ref_seg_len - 2; i += 2) {
  1044. ref_chksum +=
  1045. ((refp[i + j * ref_seg_len] << 8) +
  1046. refp[i + 1 + j * ref_seg_len]);
  1047. }
  1048. GTP_DEBUG("[gtp_bak_ref_proc]Calc ref chksum:0x%04X", ref_chksum & 0xFF);
  1049. tmp =
  1050. ref_chksum +
  1051. (refp[ref_seg_len + j * ref_seg_len - 2] << 8) +
  1052. refp[ref_seg_len + j * ref_seg_len - 1];
  1053. if (1 != tmp) {
  1054. GTP_DEBUG
  1055. ("[gtp_bak_ref_proc]Ref file chksum error,use default ref");
  1056. memset(&refp[j * ref_seg_len], 0, ref_seg_len);
  1057. refp[ref_seg_len - 1 + j * ref_seg_len] = 0x01;
  1058. } else {
  1059. GTP_DEBUG("[gtp_bak_ref_proc]Ref file chksum success.");
  1060. }
  1061. }
  1062. ret = i2c_write_bytes(client, 0x99D0, refp, ref_len);
  1063. if (-1 == ret) {
  1064. GTP_ERROR("[gtp_bak_ref_proc]Write ref i2c error.");
  1065. ret = FAIL;
  1066. goto exit_ref_proc;
  1067. }
  1068. }
  1069. ret = SUCCESS;
  1070. exit_ref_proc:
  1071. kfree(refp);
  1072. if (!IS_ERR(flp))
  1073. filp_close(flp, NULL);
  1074. return ret;
  1075. }
  1076. u8 gtp_fw_startup(struct i2c_client *client)
  1077. {
  1078. u8 wr_buf[4];
  1079. /* init sw WDT */
  1080. wr_buf[0] = 0xAA;
  1081. wr_buf[1] = 0xAA;
  1082. i2c_write_bytes(client, 0x8040, wr_buf, 2);
  1083. /* release SS51 & DSP */
  1084. wr_buf[0] = 0x00;
  1085. i2c_write_bytes(client, 0x4180, wr_buf, 1);
  1086. /* int sync */
  1087. gtp_int_sync(20);
  1088. /* check fw run status */
  1089. i2c_read_bytes(client, 0x8041, wr_buf, 1);
  1090. if (0xAA == wr_buf[0]) {
  1091. GTP_ERROR("IC works abnormally,startup failed.");
  1092. return FAIL;
  1093. }
  1094. GTP_DEBUG("IC works normally,Startup success.");
  1095. wr_buf[0] = 0xAA;
  1096. wr_buf[1] = 0xAA;
  1097. i2c_write_bytes(client, 0x8040, wr_buf, 2);
  1098. return SUCCESS;
  1099. }
  1100. static void gtp_recovery_reset(struct i2c_client *client)
  1101. {
  1102. #if GTP_ESD_PROTECT
  1103. gtp_esd_switch(client, SWITCH_OFF);
  1104. #endif
  1105. force_reset_guitar();
  1106. #if GTP_ESD_PROTECT
  1107. gtp_esd_switch(client, SWITCH_ON);
  1108. #endif
  1109. }
  1110. static u8 gtp_check_clk_legality(void)
  1111. {
  1112. u8 i = 0;
  1113. u8 clk_chksum = gtp_clk_buf[5];
  1114. for (i = 0; i < 5; i++) {
  1115. if ((gtp_clk_buf[i] < 50) || (gtp_clk_buf[i] > 120) ||
  1116. (gtp_clk_buf[i] != gtp_clk_buf[0])) {
  1117. break;
  1118. }
  1119. clk_chksum += gtp_clk_buf[i];
  1120. }
  1121. if ((i == 5) && (clk_chksum == 0)) {
  1122. GTP_INFO("Clk ram legality check success");
  1123. return SUCCESS;
  1124. }
  1125. GTP_ERROR("main clock freq in clock buf is wrong");
  1126. return FAIL;
  1127. }
  1128. static u8 gtp_main_clk_proc(struct i2c_client *client)
  1129. {
  1130. s32 ret = 0;
  1131. u8 i = 0;
  1132. u8 clk_cal_result = 0;
  1133. u8 clk_chksum = 0;
  1134. struct file *flp = NULL;
  1135. /* check clk legality */
  1136. ret = gtp_check_clk_legality();
  1137. if (SUCCESS == ret)
  1138. goto send_main_clk;
  1139. GTP_DEBUG("[gtp_main_clk_proc]Waiting for FS %d", gtp_ref_retries);
  1140. if (gup_check_fs_mounted("/data") == FAIL) {
  1141. GTP_DEBUG("[gtp_main_clk_proc]/data not mounted");
  1142. if (gtp_clk_retries++ < GTP_CHK_FS_MNT_MAX)
  1143. return FAIL;
  1144. GTP_ERROR("[gtp_main_clk_proc]Wait for file system timeout,need cal clk");
  1145. } else {
  1146. GTP_DEBUG("[gtp_main_clk_proc]/data mounted !!!!");
  1147. flp = filp_open(GTP_MAIN_CLK_PATH, O_RDWR | O_CREAT, 0660);
  1148. if (!IS_ERR(flp)) {
  1149. flp->f_op->llseek(flp, 0, SEEK_SET);
  1150. ret = flp->f_op->read(flp, (char *)gtp_clk_buf, 6, &flp->f_pos);
  1151. if (ret > 0) {
  1152. ret = gtp_check_clk_legality();
  1153. if (SUCCESS == ret) {
  1154. GTP_DEBUG
  1155. ("[gtp_main_clk_proc]Open & read & check clk file success.");
  1156. goto send_main_clk;
  1157. }
  1158. }
  1159. }
  1160. GTP_ERROR("[gtp_main_clk_proc]Check clk file failed,need cal clk");
  1161. }
  1162. /* cal clk */
  1163. #if GTP_ESD_PROTECT
  1164. gtp_esd_switch(client, SWITCH_OFF);
  1165. #endif
  1166. clk_cal_result = gup_clk_calibration();
  1167. force_reset_guitar();
  1168. GTP_DEBUG("&&&&&&&&&&clk cal result:%d", clk_cal_result);
  1169. #if GTP_ESD_PROTECT
  1170. gtp_esd_switch(client, SWITCH_ON);
  1171. #endif
  1172. if (clk_cal_result < 50 || clk_cal_result > 120) {
  1173. GTP_ERROR("[gtp_main_clk_proc]cal clk result is illegitimate");
  1174. ret = FAIL;
  1175. goto exit_clk_proc;
  1176. }
  1177. for (i = 0; i < 5; i++) {
  1178. gtp_clk_buf[i] = clk_cal_result;
  1179. clk_chksum += gtp_clk_buf[i];
  1180. }
  1181. gtp_clk_buf[5] = 0 - clk_chksum;
  1182. if (IS_ERR(flp)) {
  1183. flp = filp_open(GTP_MAIN_CLK_PATH, O_RDWR | O_CREAT, 0660);
  1184. } else {
  1185. flp->f_op->llseek(flp, 0, SEEK_SET);
  1186. flp->f_op->write(flp, (char *)gtp_clk_buf, 6, &flp->f_pos);
  1187. }
  1188. send_main_clk:
  1189. ret = i2c_write_bytes(client, 0x8020, gtp_clk_buf, 6);
  1190. if (-1 == ret) {
  1191. GTP_ERROR("[gtp_main_clk_proc]send main clk i2c error!");
  1192. ret = FAIL;
  1193. goto exit_clk_proc;
  1194. }
  1195. if (flp && !IS_ERR(flp))
  1196. filp_close(flp, NULL);
  1197. ret = SUCCESS;
  1198. return SUCCESS;
  1199. exit_clk_proc:
  1200. if (flp && !IS_ERR(flp)) { /* RMT add */
  1201. filp_close(flp, NULL);
  1202. }
  1203. return ret;
  1204. }
  1205. #endif
  1206. /* ************* For GT9XXF End **********************/
  1207. #ifdef MTK_CTP_RESET_CONFIG
  1208. static int tpd_clear_config(void *unused)
  1209. {
  1210. int ret = 0, check_sum = 0;
  1211. u8 temp_data = 0, i = 0;
  1212. u8 config_1st[GTP_CONFIG_MAX_LENGTH + GTP_ADDR_LENGTH]
  1213. = { GTP_REG_CONFIG_DATA >> 8, GTP_REG_CONFIG_DATA & 0xff };
  1214. GTP_INFO("Clear Config Begin......");
  1215. msleep(10000); /* wait main thread to be completed */
  1216. ret = i2c_read_bytes(i2c_client_point, GTP_REG_CONFIG_DATA, &temp_data, 1);
  1217. if (ret < 0) {
  1218. GTP_ERROR("GTP read config failed!");
  1219. return -1;
  1220. }
  1221. GTP_INFO("IC config version: 0x%x; Driver config version: 0x%x",
  1222. temp_data, config[GTP_ADDR_LENGTH]);
  1223. if ((temp_data < (u8) 0x5A) && (temp_data > config[GTP_ADDR_LENGTH])) {
  1224. memset(&config_1st[GTP_ADDR_LENGTH], 0, GTP_CONFIG_MAX_LENGTH);
  1225. memcpy(&config_1st[GTP_ADDR_LENGTH], &config[GTP_ADDR_LENGTH], cfg_len);
  1226. config_1st[GTP_ADDR_LENGTH] = 0;
  1227. check_sum = 0;
  1228. for (i = GTP_ADDR_LENGTH; i < cfg_len; i++)
  1229. check_sum += config_1st[i];
  1230. config_1st[cfg_len] = (~check_sum) + 1;
  1231. ret =
  1232. gtp_i2c_write(i2c_client_point, config_1st,
  1233. GTP_CONFIG_MAX_LENGTH + GTP_ADDR_LENGTH);
  1234. if (ret < 0)
  1235. GTP_ERROR("GTP write 00 config failed!");
  1236. else
  1237. GTP_INFO("Force clear cfg done");
  1238. } else {
  1239. GTP_INFO("No need clear cfg");
  1240. }
  1241. return 0;
  1242. }
  1243. #endif
  1244. static const struct file_operations gt_upgrade_proc_fops = {
  1245. .write = gt91xx_config_write_proc,
  1246. .read = gt91xx_config_read_proc
  1247. };
  1248. static s32 tpd_i2c_probe(struct i2c_client *client, const struct i2c_device_id *id)
  1249. {
  1250. s32 err = 0;
  1251. s32 ret = 0;
  1252. struct device_node *node;
  1253. u16 version_info;
  1254. struct task_struct *thread = NULL;
  1255. #if 0 /* GTP_HAVE_TOUCH_KEY */
  1256. s32 idx = 0;
  1257. #endif
  1258. #ifdef TPD_PROXIMITY
  1259. struct hwmsen_object obj_ps;
  1260. #endif
  1261. i2c_client_point = client;
  1262. ret = tpd_power_on(client);
  1263. if (ret < 0) {
  1264. GTP_ERROR("I2C communication ERROR!");
  1265. goto out;
  1266. }
  1267. #ifdef MTK_CTP_RESET_CONFIG
  1268. thread = kthread_run(tpd_clear_config, 0, "mtk-tpd-clear-config");
  1269. if (IS_ERR(thread)) {
  1270. err = PTR_ERR(thread);
  1271. GTP_INFO(TPD_DEVICE " failed to create kernel thread for clearing config: %d", err);
  1272. }
  1273. thread = NULL;
  1274. #endif
  1275. #if GTP_AUTO_UPDATE
  1276. ret = gup_init_update_proc(client);
  1277. if (ret < 0) {
  1278. GTP_ERROR("Create update thread error.");
  1279. goto out;
  1280. }
  1281. #endif
  1282. #ifdef VELOCITY_CUSTOM
  1283. tpd_v_magnify_x = TPD_VELOCITY_CUSTOM_X;
  1284. tpd_v_magnify_y = TPD_VELOCITY_CUSTOM_Y;
  1285. #endif
  1286. ret = gtp_read_version(client, &version_info);
  1287. if (ret < 0) {
  1288. GTP_ERROR("Read version failed.");
  1289. goto out;
  1290. }
  1291. GTP_INFO(TPD_DEVICE " read gtp version: %d", version_info);
  1292. ret = gtp_init_panel(client);
  1293. if (ret < 0) {
  1294. GTP_ERROR("GTP init panel failed.");
  1295. goto out;
  1296. }
  1297. gt91xx_config_proc =
  1298. proc_create(GT91XX_CONFIG_PROC_FILE, 0660, NULL, &gt_upgrade_proc_fops);
  1299. if (gt91xx_config_proc == NULL)
  1300. GTP_ERROR("create_proc_entry %s failed\n", GT91XX_CONFIG_PROC_FILE);
  1301. #if GTP_CREATE_WR_NODE
  1302. init_wr_node(client);
  1303. #endif
  1304. thread = kthread_run(touch_event_handler, 0, TPD_DEVICE);
  1305. if (IS_ERR(thread)) {
  1306. err = PTR_ERR(thread);
  1307. GTP_INFO(TPD_DEVICE " failed to create kernel thread: %d", err);
  1308. goto out;
  1309. }
  1310. msleep(50);
  1311. node = of_find_matching_node(NULL, touch_of_match);
  1312. if (node) {
  1313. touch_irq = irq_of_parse_and_map(node, 0);
  1314. ret = request_irq(touch_irq,
  1315. (irq_handler_t) tpd_eint_interrupt_handler,
  1316. !int_type ? IRQF_TRIGGER_RISING :
  1317. IRQF_TRIGGER_FALLING, "TOUCH_PANEL-eint", NULL);
  1318. if (ret > 0) {
  1319. ret = -1;
  1320. GTP_ERROR("tpd request_irq IRQ LINE NOT AVAILABLE!.");
  1321. }
  1322. } else {
  1323. GTP_ERROR("no irq node!!");
  1324. }
  1325. /* mt_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM); */
  1326. enable_irq(touch_irq);
  1327. #ifdef TPD_PROXIMITY
  1328. /* obj_ps.self = cm3623_obj; */
  1329. obj_ps.polling = 0; /* 0--interrupt mode;1--polling mode; */
  1330. obj_ps.sensor_operate = tpd_ps_operate;
  1331. err = hwmsen_attach(ID_PROXIMITY, &obj_ps);
  1332. if (err)
  1333. GTP_ERROR("hwmsen attach fail, return:%d.", err);
  1334. #endif
  1335. #if GTP_ESD_PROTECT
  1336. INIT_DELAYED_WORK(&gtp_esd_check_work, gtp_esd_check_func);
  1337. gtp_esd_check_workqueue = create_workqueue("gtp_esd_check");
  1338. queue_delayed_work(gtp_esd_check_workqueue, &gtp_esd_check_work, TPD_ESD_CHECK_CIRCLE);
  1339. #endif
  1340. #ifdef GTP_CHARGER_DETECT
  1341. INIT_DELAYED_WORK(&gtp_charger_check_work, gtp_charger_check_func);
  1342. gtp_charger_check_workqueue = create_workqueue("gtp_charger_check");
  1343. queue_delayed_work(gtp_charger_check_workqueue, &gtp_charger_check_work,
  1344. TPD_CHARGER_CHECK_CIRCLE);
  1345. #endif
  1346. tpd_load_status = 1;
  1347. return 0;
  1348. out:
  1349. return -1;
  1350. }
  1351. static irqreturn_t tpd_eint_interrupt_handler(void)
  1352. {
  1353. TPD_DEBUG_PRINT_INT;
  1354. tpd_flag = 1;
  1355. wake_up_interruptible(&waiter);
  1356. return IRQ_HANDLED;
  1357. }
  1358. static int tpd_i2c_remove(struct i2c_client *client)
  1359. {
  1360. #if GTP_CREATE_WR_NODE
  1361. uninit_wr_node();
  1362. #endif
  1363. #if GTP_ESD_PROTECT
  1364. destroy_workqueue(gtp_esd_check_workqueue);
  1365. #endif
  1366. #if GTP_ESD_PROTECT
  1367. destroy_workqueue(gtp_charger_check_workqueue);
  1368. #endif
  1369. return 0;
  1370. }
  1371. #ifdef GTP_CHARGER_DETECT
  1372. static void gtp_charger_check_func(struct work_struct *work)
  1373. {
  1374. int cur_charger_state;
  1375. cur_charger_state = upmu_get_pchr_chrdet();
  1376. GTP_DEBUG("Charger mode = %d", cur_charger_state);
  1377. if (gtp_charger_mode != cur_charger_state) {
  1378. GTP_DEBUG("Charger state change detected~!");
  1379. GTP_DEBUG("Charger mode = %d", cur_charger_state);
  1380. gtp_charger_mode = cur_charger_state;
  1381. gtp_send_cfg(i2c_client_point);
  1382. }
  1383. if (!tpd_halt) {
  1384. queue_delayed_work(gtp_charger_check_workqueue,
  1385. &gtp_charger_check_work, TPD_CHARGER_CHECK_CIRCLE);
  1386. }
  1387. }
  1388. #endif
  1389. #if (GTP_ESD_PROTECT || GTP_COMPATIBLE_MODE)
  1390. static void force_reset_guitar(void)
  1391. {
  1392. s32 i;
  1393. s32 ret;
  1394. GTP_INFO("force_reset_guitar");
  1395. /* Power off TP */
  1396. #ifdef TPD_POWER_SOURCE_CUSTOM
  1397. ret = regulator_disable(tpd->reg);
  1398. if (ret)
  1399. GTP_DEBUG("regulator_disable() failed!\n");
  1400. #else
  1401. hwPowerDown(MT65XX_POWER_LDO_VGP2, "TP");
  1402. #endif
  1403. #ifdef TPD_POWER_SOURCE_1800
  1404. hwPowerDown(TPD_POWER_SOURCE_1800, "TP");
  1405. #endif
  1406. msleep(30);
  1407. /* Power on TP */
  1408. #ifdef TPD_POWER_SOURCE_CUSTOM
  1409. ret = regulator_set_voltage(tpd->reg, 3300000, 3300000);
  1410. if (ret)
  1411. GTP_DEBUG("regulator_set_voltage() failed!\n");
  1412. ret = regulator_enable(tpd->reg); /* enable regulator */
  1413. if (ret)
  1414. GTP_DEBUG("regulator_enable() failed!\n");
  1415. #else
  1416. hwPowerOn(MT65XX_POWER_LDO_VGP2, VOL_3300, "TP");
  1417. #endif
  1418. #ifdef TPD_POWER_SOURCE_1800
  1419. hwPowerOn(TPD_POWER_SOURCE_1800, VOL_1800, "TP");
  1420. #endif
  1421. msleep(30);
  1422. for (i = 0; i < 5; i++) {
  1423. /* Reset Guitar */
  1424. gtp_reset_guitar(i2c_client_point, 20);
  1425. #if GTP_COMPATIBLE_MODE
  1426. if (CHIP_TYPE_GT9F == gtp_chip_type) {
  1427. /* check code ram */
  1428. ret = gup_fw_download_proc(NULL, GTP_FL_ESD_RECOVERY);
  1429. if (FAIL == ret) {
  1430. GTP_ERROR("[force_reset_guitar]Check & repair fw failed.");
  1431. continue;
  1432. }
  1433. tpd_halt = 1;
  1434. /* startup fw */
  1435. ret = gtp_fw_startup(i2c_client_point);
  1436. if (FAIL == ret) {
  1437. GTP_ERROR("[force_reset_guitar]Startup fw failed.");
  1438. continue;
  1439. }
  1440. tpd_halt = 0;
  1441. break;
  1442. }
  1443. #endif
  1444. ret = gtp_send_cfg(i2c_client_point);
  1445. if (ret < 0)
  1446. continue;
  1447. break;
  1448. }
  1449. }
  1450. #endif
  1451. #if GTP_ESD_PROTECT
  1452. static void gtp_esd_check_func(struct work_struct *work)
  1453. {
  1454. int i;
  1455. int ret = -1;
  1456. u8 test[3] = { GTP_REG_CONFIG_DATA >> 8, GTP_REG_CONFIG_DATA & 0xff };
  1457. if (tpd_halt)
  1458. return;
  1459. for (i = 0; i < 3; i++) {
  1460. ret = gtp_i2c_read(i2c_client_point, test, 3);
  1461. if (ret > 0)
  1462. break;
  1463. }
  1464. if (i >= 3) {
  1465. #if GTP_COMPATIBLE_MODE
  1466. if (1 == rqst_processing) {
  1467. GTP_INFO("Request Processing, no reset guitar...");
  1468. } else
  1469. #endif
  1470. {
  1471. #if GTP_COMPATIBLE_MODE
  1472. esd_resetting = 1;
  1473. #endif
  1474. force_reset_guitar();
  1475. #if GTP_COMPATIBLE_MODE
  1476. esd_resetting = 0;
  1477. #endif
  1478. }
  1479. }
  1480. if (!tpd_halt) {
  1481. queue_delayed_work(gtp_esd_check_workqueue, &gtp_esd_check_work,
  1482. TPD_ESD_CHECK_CIRCLE);
  1483. }
  1484. }
  1485. #endif
  1486. static int tpd_history_x;
  1487. static int tpd_history_y;
  1488. static void tpd_down(s32 x, s32 y, s32 size, s32 id)
  1489. {
  1490. if ((!size) && (!id)) {
  1491. input_report_abs(tpd->dev, ABS_MT_PRESSURE, 100);
  1492. input_report_abs(tpd->dev, ABS_MT_TOUCH_MAJOR, 100);
  1493. } else {
  1494. input_report_abs(tpd->dev, ABS_MT_PRESSURE, size);
  1495. input_report_abs(tpd->dev, ABS_MT_TOUCH_MAJOR, size);
  1496. /* track id Start 0 */
  1497. input_report_abs(tpd->dev, ABS_MT_TRACKING_ID, id);
  1498. }
  1499. input_report_key(tpd->dev, BTN_TOUCH, 1);
  1500. input_report_abs(tpd->dev, ABS_MT_POSITION_X, x);
  1501. input_report_abs(tpd->dev, ABS_MT_POSITION_Y, y);
  1502. input_mt_sync(tpd->dev);
  1503. TPD_DEBUG_SET_TIME;
  1504. TPD_EM_PRINT(x, y, x, y, id, 1);
  1505. tpd_history_x = x;
  1506. tpd_history_y = y;
  1507. /*MMProfileLogEx(MMP_TouchPanelEvent, MMProfileFlagPulse, 1, x + y); */
  1508. if (tpd_dts_data.use_tpd_button) {
  1509. if (FACTORY_BOOT == get_boot_mode() || RECOVERY_BOOT == get_boot_mode())
  1510. tpd_button(x, y, 1);
  1511. }
  1512. }
  1513. static void tpd_up(s32 x, s32 y, s32 id)
  1514. {
  1515. /* input_report_abs(tpd->dev, ABS_MT_PRESSURE, 0); */
  1516. input_report_key(tpd->dev, BTN_TOUCH, 0);
  1517. /* input_report_abs(tpd->dev, ABS_MT_TOUCH_MAJOR, 0); */
  1518. input_mt_sync(tpd->dev);
  1519. TPD_DEBUG_SET_TIME;
  1520. TPD_EM_PRINT(tpd_history_x, tpd_history_y, tpd_history_x, tpd_history_y, id, 0);
  1521. tpd_history_x = 0;
  1522. tpd_history_y = 0;
  1523. /*MMProfileLogEx(MMP_TouchPanelEvent, MMProfileFlagPulse, 0, x + y); */
  1524. if (tpd_dts_data.use_tpd_button) {
  1525. if (FACTORY_BOOT == get_boot_mode() || RECOVERY_BOOT == get_boot_mode())
  1526. tpd_button(x, y, 0);
  1527. }
  1528. }
  1529. /*Coordination mapping*/
  1530. static void tpd_calibrate_driver(int *x, int *y)
  1531. {
  1532. int tx;
  1533. GTP_DEBUG("Call tpd_calibrate of this driver ..\n");
  1534. tx = ((tpd_def_calmat[0] * (*x)) + (tpd_def_calmat[1] * (*y)) + (tpd_def_calmat[2])) >> 12;
  1535. *y = ((tpd_def_calmat[3] * (*x)) + (tpd_def_calmat[4] * (*y)) + (tpd_def_calmat[5])) >> 12;
  1536. *x = tx;
  1537. }
  1538. static int touch_event_handler(void *unused)
  1539. {
  1540. struct sched_param param = {.sched_priority = RTPM_PRIO_TPD };
  1541. u8 end_cmd[3] = { GTP_READ_COOR_ADDR >> 8, GTP_READ_COOR_ADDR & 0xFF, 0 };
  1542. u8 point_data[2 + 1 + 8 * GTP_MAX_TOUCH + 1] = { GTP_READ_COOR_ADDR >> 8,
  1543. GTP_READ_COOR_ADDR & 0xFF
  1544. };
  1545. u8 touch_num = 0;
  1546. u8 finger = 0;
  1547. static u8 pre_touch;
  1548. static u8 pre_key;
  1549. u8 key_value = 0;
  1550. u8 *coor_data = NULL;
  1551. s32 input_x = 0;
  1552. s32 input_y = 0;
  1553. s32 input_w = 0;
  1554. s32 id = 0;
  1555. s32 i = 0;
  1556. s32 ret = -1;
  1557. #if GTP_COMPATIBLE_MODE
  1558. u8 rqst_data[3] = { (u8) (GTP_REG_RQST >> 8), (u8) (GTP_REG_RQST & 0xFF), 0 };
  1559. #endif
  1560. #ifdef TPD_PROXIMITY
  1561. s32 err = 0;
  1562. hwm_sensor_data sensor_data;
  1563. u8 proximity_status;
  1564. #endif
  1565. #if GTP_CHANGE_X2Y
  1566. s32 temp;
  1567. #endif
  1568. sched_setscheduler(current, SCHED_RR, &param);
  1569. do {
  1570. set_current_state(TASK_INTERRUPTIBLE);
  1571. if (tpd_eint_mode) {
  1572. wait_event_interruptible(waiter, tpd_flag != 0);
  1573. tpd_flag = 0;
  1574. } else {
  1575. msleep(tpd_polling_time);
  1576. }
  1577. set_current_state(TASK_RUNNING);
  1578. mutex_lock(&i2c_access);
  1579. if (tpd_halt) {
  1580. mutex_unlock(&i2c_access);
  1581. GTP_DEBUG("return for interrupt after suspend... ");
  1582. continue;
  1583. }
  1584. ret = gtp_i2c_read(i2c_client_point, point_data, 12);
  1585. if (ret < 0) {
  1586. GTP_ERROR("I2C transfer error. errno:%d ", ret);
  1587. goto exit_work_func;
  1588. }
  1589. finger = point_data[GTP_ADDR_LENGTH];
  1590. #if GTP_COMPATIBLE_MODE
  1591. if ((finger == 0x00) && (CHIP_TYPE_GT9F == gtp_chip_type)) {
  1592. ret = gtp_i2c_read(i2c_client_point, rqst_data, 3);
  1593. if (ret < 0) {
  1594. GTP_ERROR("I2C transfer error. errno:%d\n ", ret);
  1595. goto exit_work_func;
  1596. }
  1597. switch (rqst_data[2] & 0x0F) {
  1598. case GTP_RQST_BAK_REF:
  1599. GTP_INFO("Request Ref.");
  1600. ret = gtp_bak_ref_proc(i2c_client_point, GTP_BAK_REF_SEND);
  1601. if (SUCCESS == ret) {
  1602. GTP_INFO("Send ref success.");
  1603. rqst_data[2] = GTP_RQST_RESPONDED;
  1604. gtp_i2c_write(i2c_client_point, rqst_data, 3);
  1605. }
  1606. goto exit_work_func;
  1607. case GTP_RQST_CONFIG:
  1608. GTP_INFO("Request Config.");
  1609. ret = gtp_send_cfg(i2c_client_point);
  1610. if (ret < 0) {
  1611. GTP_ERROR("Send config error.");
  1612. } else {
  1613. GTP_INFO("Send config success.");
  1614. rqst_data[2] = GTP_RQST_RESPONDED;
  1615. gtp_i2c_write(i2c_client_point, rqst_data, 3);
  1616. }
  1617. goto exit_work_func;
  1618. case GTP_RQST_MAIN_CLOCK:
  1619. GTP_INFO("Request main clock.");
  1620. rqst_processing = 1;
  1621. ret = gtp_main_clk_proc(i2c_client_point);
  1622. if (SUCCESS == ret) {
  1623. GTP_INFO("Send main clk success.");
  1624. rqst_data[2] = GTP_RQST_RESPONDED;
  1625. gtp_i2c_write(i2c_client_point, rqst_data, 3);
  1626. rqst_processing = 0;
  1627. }
  1628. goto exit_work_func;
  1629. case GTP_RQST_RESET:
  1630. GTP_INFO("Request Reset.");
  1631. gtp_recovery_reset(i2c_client_point);
  1632. goto exit_work_func;
  1633. default:
  1634. break;
  1635. }
  1636. }
  1637. #endif
  1638. if ((finger & 0x80) == 0) {
  1639. /* mt_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM); */
  1640. /*enable_irq(touch_irq);*/
  1641. mutex_unlock(&i2c_access);
  1642. GTP_ERROR("buffer not ready");
  1643. continue;
  1644. }
  1645. #ifdef TPD_PROXIMITY
  1646. if (tpd_proximity_flag == 1) {
  1647. proximity_status = point_data[GTP_ADDR_LENGTH];
  1648. GTP_DEBUG("REG INDEX[0x814E]:0x%02X", proximity_status);
  1649. if (proximity_status & 0x60) { /* proximity or large touch detect,enable hwm_sensor. */
  1650. tpd_proximity_detect = 0;
  1651. /* sensor_data.values[0] = 0; */
  1652. } else {
  1653. tpd_proximity_detect = 1;
  1654. /* sensor_data.values[0] = 1; */
  1655. }
  1656. /* get raw data */
  1657. GTP_DEBUG(" ps change");
  1658. GTP_DEBUG("PROXIMITY STATUS:0x%02X", tpd_proximity_detect);
  1659. /* map and store data to hwm_sensor_data */
  1660. sensor_data.values[0] = tpd_get_ps_value();
  1661. sensor_data.value_divide = 1;
  1662. sensor_data.status = SENSOR_STATUS_ACCURACY_MEDIUM;
  1663. /* report to the up-layer */
  1664. ret = hwmsen_get_interrupt_data(ID_PROXIMITY, &sensor_data);
  1665. if (ret)
  1666. GTP_ERROR("Call hwmsen_get_interrupt_data fail = %d", err);
  1667. }
  1668. #endif
  1669. touch_num = finger & 0x0f;
  1670. if (touch_num > GTP_MAX_TOUCH) {
  1671. GTP_ERROR("Bad number of fingers!");
  1672. goto exit_work_func;
  1673. }
  1674. if (touch_num > 1) {
  1675. u8 buf[8 * GTP_MAX_TOUCH] = { (GTP_READ_COOR_ADDR + 10) >> 8,
  1676. (GTP_READ_COOR_ADDR + 10) & 0xff
  1677. };
  1678. ret = gtp_i2c_read(i2c_client_point, buf, 2 + 8 * (touch_num - 1));
  1679. memcpy(&point_data[12], &buf[2], 8 * (touch_num - 1));
  1680. }
  1681. #if GTP_HAVE_TOUCH_KEY
  1682. key_value = point_data[3 + 8 * touch_num];
  1683. if (key_value || pre_key) {
  1684. for (i = 0; i < TPD_KEY_COUNT; i++) {
  1685. /* input_report_key(tpd->dev, touch_key_array[i], key_value & (0x01 << i)); */
  1686. if (key_value & (0x01 << i)) { /* key=1 menu ;key=2 home; key =4 back; */
  1687. input_x = touch_key_point_maping_array[i].point_x;
  1688. input_y = touch_key_point_maping_array[i].point_y;
  1689. GTP_DEBUG("button =%d %d", input_x, input_y);
  1690. tpd_down(input_x, input_y, 0, 0);
  1691. }
  1692. }
  1693. if ((pre_key != 0) && (key_value == 0))
  1694. tpd_up(0, 0, 0);
  1695. touch_num = 0;
  1696. pre_touch = 0;
  1697. }
  1698. #endif
  1699. pre_key = key_value;
  1700. GTP_DEBUG("pre_touch:%02x, finger:%02x.", pre_touch, finger);
  1701. if (touch_num) {
  1702. for (i = 0; i < touch_num; i++) {
  1703. coor_data = &point_data[i * 8 + 3];
  1704. id = coor_data[0] & 0x0F;
  1705. input_x = coor_data[1] | coor_data[2] << 8;
  1706. input_y = coor_data[3] | coor_data[4] << 8;
  1707. input_w = coor_data[5] | coor_data[6] << 8;
  1708. GTP_DEBUG
  1709. ("Original touch point : [X:%04d, Y:%04d]", input_x, input_y);
  1710. input_x = TPD_WARP_X(abs_x_max, input_x);
  1711. input_y = TPD_WARP_Y(abs_y_max, input_y);
  1712. tpd_calibrate_driver(&input_x, &input_y);
  1713. GTP_DEBUG
  1714. ("Touch point after calibration: [X:%04d, Y:%04d]",
  1715. input_x, input_y);
  1716. #if GTP_CHANGE_X2Y
  1717. temp = input_x;
  1718. input_x = input_y;
  1719. input_y = temp;
  1720. #endif
  1721. tpd_down(input_x, input_y, input_w, id);
  1722. }
  1723. } else if (pre_touch) {
  1724. GTP_DEBUG("Touch Release!");
  1725. tpd_up(0, 0, 0);
  1726. } else {
  1727. GTP_DEBUG("Additional Eint!");
  1728. }
  1729. pre_touch = touch_num;
  1730. /* input_report_key(tpd->dev, BTN_TOUCH, (touch_num || key_value)); */
  1731. if (tpd != NULL && tpd->dev != NULL)
  1732. input_sync(tpd->dev);
  1733. exit_work_func:
  1734. if (!gtp_rawdiff_mode) {
  1735. ret = gtp_i2c_write(i2c_client_point, end_cmd, 3);
  1736. if (ret < 0)
  1737. GTP_INFO("I2C write end_cmd error!");
  1738. }
  1739. /* mt_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM); */
  1740. /* enable_irq(touch_irq);*/
  1741. mutex_unlock(&i2c_access);
  1742. } while (!kthread_should_stop());
  1743. return 0;
  1744. }
  1745. static int tpd_local_init(void)
  1746. {
  1747. #ifdef TPD_POWER_SOURCE_CUSTOM
  1748. tpd->reg = regulator_get(tpd->tpd_dev, "vtouch");
  1749. if (IS_ERR(tpd->reg))
  1750. GTP_ERROR("regulator_get() failed!\n");
  1751. #endif
  1752. #if GTP_SUPPORT_I2C_DMA
  1753. gpDMABuf_va =
  1754. (u8 *) dma_alloc_coherent(NULL, GTP_DMA_MAX_TRANSACTION_LENGTH,
  1755. &gpDMABuf_pa, GFP_KERNEL);
  1756. if (!gpDMABuf_va)
  1757. GTP_INFO("[Error] Allocate DMA I2C Buffer failed!\n");
  1758. #endif
  1759. if (i2c_add_driver(&tpd_i2c_driver) != 0) {
  1760. GTP_INFO("unable to add i2c driver.");
  1761. return -1;
  1762. }
  1763. if (tpd_load_status == 0) {
  1764. GTP_INFO("add error touch panel driver.");
  1765. i2c_del_driver(&tpd_i2c_driver);
  1766. return -1;
  1767. }
  1768. input_set_abs_params(tpd->dev, ABS_MT_TRACKING_ID, 0, (GTP_MAX_TOUCH - 1), 0, 0);
  1769. if (tpd_dts_data.use_tpd_button) {
  1770. /*initialize tpd button data */
  1771. tpd_button_setting(tpd_dts_data.tpd_key_num,
  1772. tpd_dts_data.tpd_key_local, tpd_dts_data.tpd_key_dim_local);
  1773. }
  1774. #if (defined(TPD_WARP_START) && defined(TPD_WARP_END))
  1775. TPD_DO_WARP = 1;
  1776. memcpy(tpd_wb_start, tpd_wb_start_local, TPD_WARP_CNT * 4);
  1777. memcpy(tpd_wb_end, tpd_wb_start_local, TPD_WARP_CNT * 4);
  1778. #endif
  1779. #if (defined(TPD_HAVE_CALIBRATION) && !defined(TPD_CUSTOM_CALIBRATION))
  1780. /* memcpy(tpd_calmat, tpd_def_calmat_local, 8 * 4); */
  1781. /* memcpy(tpd_def_calmat, tpd_def_calmat_local, 8 * 4); */
  1782. if (FACTORY_BOOT == get_boot_mode()) {
  1783. TPD_DEBUG("Factory mode is detected!\n");
  1784. memcpy(tpd_calmat, tpd_def_calmat_local_factory, 8 * 4);
  1785. memcpy(tpd_def_calmat, tpd_def_calmat_local_factory, 8 * 4);
  1786. } else {
  1787. TPD_DEBUG("Normal mode is detected!\n");
  1788. memcpy(tpd_calmat, tpd_def_calmat_local_normal, 8 * 4);
  1789. memcpy(tpd_def_calmat, tpd_def_calmat_local_normal, 8 * 4);
  1790. }
  1791. #endif
  1792. /* set vendor string */
  1793. tpd->dev->id.vendor = 0x00;
  1794. tpd->dev->id.product = tpd_info.pid;
  1795. tpd->dev->id.version = tpd_info.vid;
  1796. GTP_INFO("end %s, %d", __func__, __LINE__);
  1797. tpd_type_cap = 1;
  1798. return 0;
  1799. }
  1800. /*******************************************************
  1801. Function:
  1802. Eter sleep function.
  1803. Input:
  1804. client:i2c_client.
  1805. Output:
  1806. Executive outcomes.0--success,non-0--fail.
  1807. *******************************************************/
  1808. static s8 gtp_enter_sleep(struct i2c_client *client)
  1809. {
  1810. s8 ret = -1;
  1811. #if !GTP_POWER_CTRL_SLEEP
  1812. s8 retry = 0;
  1813. u8 i2c_control_buf[3] = { (u8) (GTP_REG_SLEEP >> 8),
  1814. (u8) GTP_REG_SLEEP, 5
  1815. };
  1816. tpd_gpio_output(GTP_INT_PORT, 0);
  1817. msleep(20);
  1818. while (retry++ < 5) {
  1819. ret = gtp_i2c_write(client, i2c_control_buf, 3);
  1820. if (ret > 0) {
  1821. GTP_INFO("GTP enter sleep!");
  1822. return ret;
  1823. }
  1824. msleep(20);
  1825. }
  1826. #else
  1827. tpd_gpio_output(GTP_RST_PORT, 0);
  1828. msleep(20);
  1829. #ifdef TPD_POWER_SOURCE_CUSTOM
  1830. hwPowerDown(TPD_POWER_SOURCE_CUSTOM, "TP");
  1831. #else
  1832. hwPowerDown(MT65XX_POWER_LDO_VGP2, "TP");
  1833. #endif
  1834. #ifdef TPD_POWER_SOURCE_1800
  1835. hwPowerDown(TPD_POWER_SOURCE_1800, "TP");
  1836. #endif
  1837. GTP_INFO("GTP enter sleep!");
  1838. return 0;
  1839. #endif
  1840. GTP_ERROR("GTP send sleep cmd failed.");
  1841. return ret;
  1842. }
  1843. /*******************************************************
  1844. Function:
  1845. Wakeup from sleep mode Function.
  1846. Input:
  1847. client:i2c_client.
  1848. Output:
  1849. Executive outcomes.0--success,non-0--fail.
  1850. *******************************************************/
  1851. static s8 gtp_wakeup_sleep(struct i2c_client *client)
  1852. {
  1853. u8 retry = 0;
  1854. s8 ret = -1;
  1855. GTP_INFO("GTP wakeup begin.");
  1856. #if GTP_POWER_CTRL_SLEEP
  1857. #if GTP_COMPATIBLE_MODE
  1858. if (CHIP_TYPE_GT9F == gtp_chip_type) {
  1859. force_reset_guitar();
  1860. GTP_INFO("Esd recovery wakeup.");
  1861. return 0;
  1862. }
  1863. #endif
  1864. while (retry++ < 5) {
  1865. ret = tpd_power_on(client);
  1866. if (ret < 0)
  1867. GTP_ERROR("I2C Power on ERROR!");
  1868. ret = gtp_send_cfg(client);
  1869. if (ret > 0) {
  1870. GTP_DEBUG("Wakeup sleep send config success.");
  1871. return ret;
  1872. }
  1873. }
  1874. #else
  1875. #if GTP_COMPATIBLE_MODE
  1876. if (CHIP_TYPE_GT9F == gtp_chip_type) {
  1877. u8 opr_buf[2] = { 0 };
  1878. while (retry++ < 10) {
  1879. tpd_gpio_output(GTP_INT_PORT, 1);
  1880. msleep(20);
  1881. ret = gtp_i2c_test(client);
  1882. if (ret >= 0) {
  1883. /* Hold ss51 & dsp */
  1884. opr_buf[0] = 0x0C;
  1885. ret = i2c_write_bytes(client, 0x4180, opr_buf, 1);
  1886. if (ret < 0) {
  1887. GTP_DEBUG("Hold ss51 & dsp I2C error,retry:%d", retry);
  1888. continue;
  1889. }
  1890. /* Confirm hold */
  1891. opr_buf[0] = 0x00;
  1892. ret = i2c_read_bytes(client, 0x4180, opr_buf, 1);
  1893. if (ret < 0) {
  1894. GTP_DEBUG
  1895. ("confirm ss51 & dsp hold, I2C error,retry:%d", retry);
  1896. continue;
  1897. }
  1898. if (0x0C != opr_buf[0]) {
  1899. GTP_DEBUG
  1900. ("ss51 & dsp not hold, val: %d, retry: %d",
  1901. opr_buf[0], retry);
  1902. continue;
  1903. }
  1904. GTP_DEBUG("ss51 & dsp has been hold");
  1905. ret = gtp_fw_startup(client);
  1906. if (FAIL == ret) {
  1907. GTP_ERROR("[gtp_wakeup_sleep]Startup fw failed.");
  1908. continue;
  1909. }
  1910. GTP_INFO("flashless wakeup sleep success");
  1911. return ret;
  1912. }
  1913. force_reset_guitar();
  1914. }
  1915. if (retry >= 10) {
  1916. GTP_ERROR("wakeup retry timeout, process esd reset");
  1917. force_reset_guitar();
  1918. }
  1919. GTP_ERROR("GTP wakeup sleep failed.");
  1920. return ret;
  1921. }
  1922. #endif
  1923. while (retry++ < 10) {
  1924. tpd_gpio_output(GTP_INT_PORT, 1);
  1925. msleep(20);
  1926. tpd_gpio_output(GTP_INT_PORT, 0);
  1927. msleep(20);
  1928. ret = gtp_i2c_test(client);
  1929. if (ret >= 0) {
  1930. gtp_int_sync(50);
  1931. return ret;
  1932. }
  1933. gtp_reset_guitar(client, 20);
  1934. }
  1935. #endif
  1936. GTP_ERROR("GTP wakeup sleep failed.");
  1937. return ret;
  1938. }
  1939. /* Function to manage low power suspend */
  1940. static void tpd_suspend(struct device *h)
  1941. {
  1942. s32 ret = -1;
  1943. /* return; */
  1944. mutex_lock(&i2c_access);
  1945. /* mt_eint_mask(CUST_EINT_TOUCH_PANEL_NUM); */
  1946. disable_irq(touch_irq);
  1947. tpd_halt = 1;
  1948. mutex_unlock(&i2c_access);
  1949. ret = gtp_enter_sleep(i2c_client_point);
  1950. if (ret < 0)
  1951. GTP_ERROR("GTP early suspend failed.");
  1952. #if GTP_ESD_PROTECT
  1953. cancel_delayed_work_sync(&gtp_esd_check_work);
  1954. #endif
  1955. #ifdef GTP_CHARGER_DETECT
  1956. cancel_delayed_work_sync(&gtp_charger_check_work);
  1957. #endif
  1958. #ifdef TPD_PROXIMITY
  1959. if (tpd_proximity_flag == 1)
  1960. return;
  1961. #endif
  1962. }
  1963. /* Function to manage power-on resume */
  1964. static void tpd_resume(struct device *h)
  1965. {
  1966. s32 ret = -1;
  1967. /*return; */
  1968. ret = gtp_wakeup_sleep(i2c_client_point);
  1969. if (ret < 0)
  1970. GTP_ERROR("GTP later resume failed.");
  1971. GTP_INFO("GTP wakeup sleep.");
  1972. mutex_lock(&i2c_access);
  1973. tpd_halt = 0;
  1974. /* mt_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM); */
  1975. enable_irq(touch_irq);
  1976. mutex_unlock(&i2c_access);
  1977. #ifdef TPD_PROXIMITY
  1978. if (tpd_proximity_flag == 1)
  1979. return;
  1980. #endif
  1981. #if GTP_ESD_PROTECT
  1982. queue_delayed_work(gtp_esd_check_workqueue, &gtp_esd_check_work, TPD_ESD_CHECK_CIRCLE);
  1983. #endif
  1984. #ifdef GTP_CHARGER_DETECT
  1985. queue_delayed_work(gtp_charger_check_workqueue, &gtp_charger_check_work,
  1986. TPD_CHARGER_CHECK_CIRCLE);
  1987. #endif
  1988. }
  1989. static void tpd_off(void)
  1990. {
  1991. #ifdef TPD_POWER_SOURCE_CUSTOM
  1992. hwPowerDown(TPD_POWER_SOURCE_CUSTOM, "TP");
  1993. #else
  1994. hwPowerDown(MT65XX_POWER_LDO_VGP2, "TP");
  1995. #endif
  1996. #ifdef TPD_POWER_SOURCE_1800
  1997. hwPowerDown(TPD_POWER_SOURCE_1800, "TP");
  1998. #endif
  1999. GTP_INFO("GTP enter sleep!");
  2000. tpd_halt = 1;
  2001. /* mt_eint_mask(CUST_EINT_TOUCH_PANEL_NUM); */
  2002. disable_irq(touch_irq);
  2003. }
  2004. static void tpd_on(void)
  2005. {
  2006. s32 ret = -1, retry = 0;
  2007. while (retry++ < 5) {
  2008. ret = tpd_power_on(i2c_client_point);
  2009. if (ret < 0)
  2010. GTP_ERROR("I2C Power on ERROR!");
  2011. ret = gtp_send_cfg(i2c_client_point);
  2012. if (ret > 0)
  2013. GTP_DEBUG("Wakeup sleep send config success.");
  2014. }
  2015. if (ret < 0)
  2016. GTP_ERROR("GTP later resume failed.");
  2017. /* mt_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM); */
  2018. enable_irq(touch_irq);
  2019. tpd_halt = 0;
  2020. }
  2021. static struct tpd_driver_t tpd_device_driver = {
  2022. .tpd_device_name = "gt9xx",
  2023. .tpd_local_init = tpd_local_init,
  2024. .suspend = tpd_suspend,
  2025. .resume = tpd_resume,
  2026. .attrs = {
  2027. .attr = gt9xx_attrs,
  2028. .num = ARRAY_SIZE(gt9xx_attrs),
  2029. },
  2030. };
  2031. /* called when loaded into kernel */
  2032. static int __init tpd_driver_init(void)
  2033. {
  2034. GTP_INFO("MediaTek gt91xx touch panel driver init");
  2035. tpd_get_dts_info();
  2036. if (tpd_driver_add(&tpd_device_driver) < 0)
  2037. GTP_INFO("add generic driver failed");
  2038. return 0;
  2039. }
  2040. /* should never be called */
  2041. static void __exit tpd_driver_exit(void)
  2042. {
  2043. GTP_INFO("MediaTek gt91xx touch panel driver exit");
  2044. /* input_unregister_device(tpd->dev); */
  2045. tpd_driver_remove(&tpd_device_driver);
  2046. }
  2047. module_init(tpd_driver_init);
  2048. module_exit(tpd_driver_exit);