3 #include "tpd_custom_gt9xx.h"
5 #include "cust_gpio_usage.h"
8 #include <linux/hwmsensor.h>
9 #include <linux/hwmsen_dev.h>
10 #include <linux/sensors_io.h>
13 #ifdef CONFIG_OF_TOUCH
15 #include <linux/of_irq.h>
18 #if GTP_SUPPORT_I2C_DMA
19 #include <linux/dma-mapping.h>
21 #include <linux/proc_fs.h> /*proc*/
22 #include <linux/sched.h>
24 extern struct tpd_device
*tpd
;
25 #ifdef VELOCITY_CUSTOM
26 extern int tpd_v_magnify_x
;
27 extern int tpd_v_magnify_y
;
31 extern struct tpd_filter_t tpd_filter
;
32 static struct tpd_filter_t tpd_filter_local
= TPD_FILTER_PARA
;
34 static int tpd_flag
= 0;
36 static int tpd_eint_mode
=1;
37 static struct task_struct
*thread
= NULL
;
38 static struct task_struct
*probe_thread
= NULL
;
39 static bool check_flag
= false;
40 static int tpd_polling_time
=50;
41 extern u8 load_fw_process
;
43 static DECLARE_WAIT_QUEUE_HEAD(waiter
);
44 DEFINE_MUTEX(i2c_access
);
45 DEFINE_MUTEX(tp_wr_access
);
47 #ifdef TPD_HAVE_BUTTON
48 static int tpd_keys_local
[TPD_KEY_COUNT
] = TPD_KEYS
;
49 static int tpd_keys_dim_local
[TPD_KEY_COUNT
][4] = TPD_KEYS_DIM
;
52 #if GTP_HAVE_TOUCH_KEY
53 const u16 touch_key_array
[] = TPD_KEYS
;
54 #define GTP_MAX_KEY_NUM ( sizeof( touch_key_array )/sizeof( touch_key_array[0] ) )
55 struct touch_vitual_key_map_t
60 static struct touch_vitual_key_map_t touch_key_point_maping_array
[]=GTP_KEY_MAP_ARRAY
;
63 #ifdef CONFIG_OF_TOUCH
64 unsigned int touch_irq
= 0;
74 static DOZE_T doze_status
= DOZE_DISABLED
;
75 static s8
gtp_enter_doze(struct i2c_client
*client
);
78 #if GTP_CHARGER_SWITCH
79 extern int g_bat_init_flag
;
80 extern kal_bool
upmu_is_chr_det(void);
81 static void gtp_charger_switch(s32 dir_update
);
84 #if (defined(TPD_WARP_START) && defined(TPD_WARP_END))
85 static int tpd_wb_start_local
[TPD_WARP_CNT
] = TPD_WARP_START
;
86 static int tpd_wb_end_local
[TPD_WARP_CNT
] = TPD_WARP_END
;
89 #if (defined(TPD_HAVE_CALIBRATION) && !defined(TPD_CUSTOM_CALIBRATION))
90 //static int tpd_calmat_local[8] = TPD_CALIBRATION_MATRIX;
91 static int tpd_def_calmat_local
[8] = TPD_CALIBRATION_MATRIX
;
94 #if GTP_SUPPORT_I2C_DMA
95 s32
i2c_dma_write(struct i2c_client
*client
, u16 addr
, u8
*txbuf
, s32 len
);
96 s32
i2c_dma_read(struct i2c_client
*client
, u16 addr
, u8
*rxbuf
, s32 len
);
98 static u8
*gpDMABuf_va
= NULL
;
99 static dma_addr_t
*gpDMABuf_pa
= 0;
102 s32
gtp_send_cfg(struct i2c_client
*client
);
103 void gtp_reset_guitar(struct i2c_client
*client
, s32 ms
);
104 #ifdef CONFIG_OF_TOUCH
105 static irqreturn_t
tpd_eint_interrupt_handler(unsigned irq
, struct irq_desc
*desc
);
107 static void tpd_eint_interrupt_handler(void);
109 static int touch_event_handler(void *unused
);
110 static int tpd_i2c_probe(struct i2c_client
*client
, const struct i2c_device_id
*id
);
111 static int tpd_i2c_detect(struct i2c_client
*client
, struct i2c_board_info
*info
);
112 static int tpd_i2c_remove(struct i2c_client
*client
);
113 s32
gtp_i2c_read_dbl_check(struct i2c_client
*client
, u16 addr
, u8
*rxbuf
, int len
);
114 static void tpd_on(void);
115 static void tpd_off(void);
118 extern void mt65xx_eint_set_hw_debounce(kal_uint8 eintno
, kal_uint32 ms
);
119 extern kal_uint32
mt65xx_eint_set_sens(kal_uint8 eintno
, kal_bool sens
);
120 extern void mt65xx_eint_registration(kal_uint8 eintno
, kal_bool Dbounce_En
,
121 kal_bool ACT_Polarity
, void (EINT_FUNC_PTR
)(void),
122 kal_bool auto_umask
);
125 #ifdef GTP_CHARGER_DETECT
126 extern bool upmu_get_pchr_chrdet(void);
127 #define TPD_CHARGER_CHECK_CIRCLE 50
128 static struct delayed_work gtp_charger_check_work
;
129 static struct workqueue_struct
*gtp_charger_check_workqueue
= NULL
;
130 static void gtp_charger_check_func(struct work_struct
*);
131 static u8 gtp_charger_mode
= 0;
134 #if GTP_CREATE_WR_NODE
135 extern s32
init_wr_node(struct i2c_client
*);
136 extern void uninit_wr_node(void);
139 #if (GTP_ESD_PROTECT || GTP_COMPATIBLE_MODE)
140 void force_reset_guitar(void);
144 static int clk_tick_cnt
= 200;
145 static struct delayed_work gtp_esd_check_work
;
146 static struct workqueue_struct
*gtp_esd_check_workqueue
= NULL
;
147 static s32
gtp_init_ext_watchdog(struct i2c_client
*client
);
148 static void gtp_esd_check_func(struct work_struct
*);
149 void gtp_esd_switch(struct i2c_client
*client
, s32 on
);
155 u8 hotknot_paired_flag
= 0;
159 #define TPD_PROXIMITY_VALID_REG 0x814E
160 #define TPD_PROXIMITY_ENABLE_REG 0x8042
161 static u8 tpd_proximity_flag
= 0;
162 static u8 tpd_proximity_detect
= 1;//0-->close ; 1--> far away
165 #ifndef GTP_REG_REFRESH_RATE
166 #define GTP_REG_REFRESH_RATE 0x8056
169 u32 gtp_eint_trigger_type
= EINTF_TRIGGER_FALLING
;;
171 struct i2c_client
*i2c_client_point
= NULL
;
172 static const struct i2c_device_id tpd_i2c_id
[] = {{"gt9xx", 0}, {}};
173 static unsigned short force
[] = {0, 0xBA, I2C_CLIENT_END
, I2C_CLIENT_END
};
174 static const unsigned short *const forces
[] = { force
, NULL
};
175 //static struct i2c_client_address_data addr_data = { .forces = forces,};
176 static struct i2c_board_info __initdata i2c_tpd
= { I2C_BOARD_INFO("gt9xx", (0xBA >> 1))};
177 static struct i2c_driver tpd_i2c_driver
=
179 .probe
= tpd_i2c_probe
,
180 .remove
= tpd_i2c_remove
,
181 .detect
= tpd_i2c_detect
,
182 .driver
.name
= "gt9xx",
183 .id_table
= tpd_i2c_id
,
184 .address_list
= (const unsigned short *) forces
,
188 static u8 config
[GTP_CONFIG_MAX_LENGTH
+ GTP_ADDR_LENGTH
]
189 = {GTP_REG_CONFIG_DATA
>> 8, GTP_REG_CONFIG_DATA
& 0xff};
191 #if GTP_CHARGER_SWITCH
192 static u8 charger_config
[GTP_CONFIG_MAX_LENGTH
+ GTP_ADDR_LENGTH
]
193 = {GTP_REG_CONFIG_DATA
>> 8, GTP_REG_CONFIG_DATA
& 0xff};
194 static bool is_charger_cfg_updating
= false;
197 #ifdef GTP_CHARGER_DETECT
198 static u8 config_charger
[GTP_CONFIG_MAX_LENGTH
+ GTP_ADDR_LENGTH
]
199 = {GTP_REG_CONFIG_DATA
>> 8, GTP_REG_CONFIG_DATA
& 0xff};
204 u16 pid
; //product id //
205 u16 vid
; //version id //
209 st_tpd_info tpd_info
;
213 u8 gtp_rawdiff_mode
= 0;
215 #if GTP_CHARGER_SWITCH
216 u8 charger_cfg_len
= 0;
217 u8 charger_grp_cfg_version
= 0;
219 u8 grp_cfg_version
= 0;
221 u8 pnl_init_error
= 0;
222 static u8 chip_gt9xxs
= 0; // true if chip type is gt9xxs,like gt915s
224 #if GTP_COMPATIBLE_MODE
227 u8 gtp_ref_retries
= 0;
228 u8 gtp_clk_retries
= 0;
229 CHIP_TYPE_T gtp_chip_type
= CHIP_TYPE_GT9
;
231 u8 rqst_processing
= 0;
233 extern u8
gup_check_fs_mounted(char *path_name
);
234 extern u8
gup_clk_calibration(void);
235 extern s32
gup_load_main_system(char *filepath
);
236 extern s32
gup_fw_download_proc(void *dir
, u8 dwn_mode
);
237 void gtp_get_chip_type(struct i2c_client
*client
);
238 u8
gtp_fw_startup(struct i2c_client
*client
);
239 static u8
gtp_bak_ref_proc(struct i2c_client
*client
, u8 mode
);
240 static u8
gtp_main_clk_proc(struct i2c_client
*client
);
241 static void gtp_recovery_reset(struct i2c_client
*client
);
244 #if (GTP_ESD_PROTECT || GTP_COMPATIBLE_MODE)
248 /* proc file system */
249 s32
i2c_read_bytes(struct i2c_client
*client
, u16 addr
, u8
*rxbuf
, int len
);
250 s32
i2c_write_bytes(struct i2c_client
*client
, u16 addr
, u8
*txbuf
, int len
);
251 static struct proc_dir_entry
*gt91xx_config_proc
= NULL
;
253 #ifdef TPD_REFRESH_RATE
254 /*******************************************************
259 rate: refresh rate N (Duration=5+N ms, N=0~15)
262 Executive outcomes.0---succeed.
263 *******************************************************/
264 static u8
gtp_set_refresh_rate(u8 rate
)
266 u8 buf
[3] = {GTP_REG_REFRESH_RATE
>>8, GTP_REG_REFRESH_RATE
& 0xff, rate
};
270 GTP_ERROR("Refresh rate is over range (%d)", rate
);
274 GTP_INFO("Refresh rate change to %d", rate
);
275 return gtp_i2c_write(i2c_client_point
, buf
, sizeof(buf
));
278 /*******************************************************
283 Refresh rate or error code
284 *******************************************************/
285 static u8
gtp_get_refresh_rate(void)
289 u8 buf
[3] = {GTP_REG_REFRESH_RATE
>>8, GTP_REG_REFRESH_RATE
& 0xff};
290 ret
= gtp_i2c_read(i2c_client_point
, buf
, sizeof(buf
));
294 GTP_INFO("Refresh rate is %d", buf
[GTP_ADDR_LENGTH
]);
295 return buf
[GTP_ADDR_LENGTH
];
298 //=============================================================
299 static ssize_t
show_refresh_rate(struct device
*dev
,struct device_attribute
*attr
, char *buf
)
301 int ret
= gtp_get_refresh_rate();
305 return sprintf(buf
, "%d\n", ret
);
307 static ssize_t
store_refresh_rate(struct device
*dev
,struct device_attribute
*attr
, const char *buf
, size_t size
)
310 gtp_set_refresh_rate(simple_strtoul(buf
, NULL
, 16));
313 static DEVICE_ATTR(tpd_refresh_rate
, 0664, show_refresh_rate
, store_refresh_rate
);
315 static struct device_attribute
*gt9xx_attrs
[] =
317 &dev_attr_tpd_refresh_rate
,
320 //=============================================================
323 /* proc file system */
324 s32
i2c_read_bytes(struct i2c_client
*client
, u16 addr
, u8
*rxbuf
, int len
);
325 s32
i2c_write_bytes(struct i2c_client
*client
, u16 addr
, u8
*txbuf
, int len
);
327 static int tpd_i2c_detect(struct i2c_client
*client
, struct i2c_board_info
*info
)
329 strcpy(info
->type
, "mtk-tpd");
334 static s32
tpd_get_ps_value(void)
336 return tpd_proximity_detect
;
339 static s32
tpd_enable_ps(s32 enable
)
347 tpd_proximity_flag
= 1;
348 GTP_INFO("TPD proximity function to be on.");
353 tpd_proximity_flag
= 0;
354 GTP_INFO("TPD proximity function to be off.");
357 ret
= i2c_write_bytes(i2c_client_point
, TPD_PROXIMITY_ENABLE_REG
, &state
, 1);
361 GTP_ERROR("TPD %s proximity cmd failed.", state
? "enable" : "disable");
365 GTP_INFO("TPD proximity function %s success.", state
? "enable" : "disable");
369 s32
tpd_ps_operate(void *self
, u32 command
, void *buff_in
, s32 size_in
,
370 void *buff_out
, s32 size_out
, s32
*actualout
)
374 hwm_sensor_data
*sensor_data
;
379 if ((buff_in
== NULL
) || (size_in
< sizeof(int)))
381 GTP_ERROR("Set delay parameter error!");
389 if ((buff_in
== NULL
) || (size_in
< sizeof(int)))
391 GTP_ERROR("Enable sensor parameter error!");
396 value
= *(int *)buff_in
;
397 err
= tpd_enable_ps(value
);
402 case SENSOR_GET_DATA
:
403 if ((buff_out
== NULL
) || (size_out
< sizeof(hwm_sensor_data
)))
405 GTP_ERROR("Get sensor data parameter error!");
410 sensor_data
= (hwm_sensor_data
*)buff_out
;
411 sensor_data
->values
[0] = tpd_get_ps_value();
412 sensor_data
->value_divide
= 1;
413 sensor_data
->status
= SENSOR_STATUS_ACCURACY_MEDIUM
;
419 GTP_ERROR("proxmy sensor operate function no this parameter %d!\n", command
);
428 static int gt91xx_config_read_proc(struct file
*file
, char *buffer
, size_t count
, loff_t
*ppos
)
432 char temp_data
[GTP_CONFIG_MAX_LENGTH
+ 2] = {0};
433 int i
, len
, err
= -1;
435 page
= kmalloc(PAGE_SIZE
, GFP_KERNEL
);
443 ptr
+= sprintf(ptr
, "==== GT9XX config init value====\n");
445 for (i
= 0 ; i
< GTP_CONFIG_MAX_LENGTH
; i
++)
447 ptr
+= sprintf(ptr
, "0x%02X ", config
[i
+ 2]);
450 ptr
+= sprintf(ptr
, "\n");
453 ptr
+= sprintf(ptr
, "\n");
455 ptr
+= sprintf(ptr
, "==== GT9XX config real value====\n");
456 i2c_read_bytes(i2c_client_point
, GTP_REG_CONFIG_DATA
, temp_data
, GTP_CONFIG_MAX_LENGTH
);
458 for (i
= 0 ; i
< GTP_CONFIG_MAX_LENGTH
; i
++)
460 ptr
+= sprintf(ptr
, "0x%02X ", temp_data
[i
]);
463 ptr
+= sprintf(ptr
, "\n");
465 /* Touch PID & VID */
466 ptr
+= sprintf(ptr
, "\n");
467 ptr
+= sprintf(ptr
, "==== GT9XX Version ID ====\n");
468 i2c_read_bytes(i2c_client_point
, GTP_REG_VERSION
, temp_data
, 6);
469 ptr
+= sprintf(ptr
, "Chip PID: %c%c%c%c VID: 0x%02X%02X\n", temp_data
[0], temp_data
[1], temp_data
[2], temp_data
[3], temp_data
[5], temp_data
[4]);
470 #if GTP_COMPATIBLE_MODE
471 ptr
+= sprintf(ptr
, "Driver VID: 0x%02X%02X\n", gtp_default_FW_fl
[12], gtp_default_FW_fl
[13]);
473 ptr
+= sprintf(ptr
, "Driver VID: 0x%02X%02X\n", gtp_default_FW
[12], gtp_default_FW
[13]);
475 i2c_read_bytes(i2c_client_point
, 0x41E4, temp_data
, 1);
476 ptr
+= sprintf(ptr
, "Boot status 0x%X\n", temp_data
[0]);
478 /* Touch Status and Clock Gate */
479 ptr
+= sprintf(ptr
, "\n");
480 ptr
+= sprintf(ptr
, "==== Touch Status and Clock Gate ====\n");
481 ptr
+= sprintf(ptr
, "status: 1: on, 0 :off\n");
482 ptr
+= sprintf(ptr
, "Test status:%d\n", (tpd_halt
+1)&0x1);
491 err
= copy_to_user(buffer
,(char *)page
,len
);
501 //return (ptr - page);
504 static int gt91xx_config_write_proc(struct file
*file
, const char *buffer
, size_t count
, loff_t
*ppos
)
507 char temp
[25] = {0}; // for store special format cmd
508 char mode_str
[15] = {0};
512 GTP_DEBUG("write count %ld\n", (unsigned long)count
);
514 if (count
> GTP_CONFIG_MAX_LENGTH
)
516 GTP_ERROR("size not match [%d:%ld]", GTP_CONFIG_MAX_LENGTH
, (unsigned long)count
);
520 /**********************************************/
521 /* for store special format cmd */
522 if (copy_from_user(temp
, buffer
, sizeof(temp
)))
524 GTP_ERROR("copy from user fail 2");
527 sscanf(temp
, "%s %d", (char *)&mode_str
, &mode
);
529 /***********POLLING/EINT MODE switch****************/
530 if(strcmp(mode_str
, "polling") == 0)
532 if(mode
>=10&&mode
<=200)
534 GTP_INFO("Switch to polling mode, polling time is %d",mode
);
536 tpd_polling_time
=mode
;
538 wake_up_interruptible(&waiter
);
542 GTP_INFO("Wrong polling time, please set between 10~200ms");
546 if(strcmp(mode_str
, "eint") == 0)
548 GTP_INFO("Switch to eint mode");
552 /**********************************************/
553 if(strcmp(mode_str
, "switch") == 0)
555 if(mode
== 0)// turn off
557 else if(mode
== 1)//turn on
560 GTP_ERROR("error mode :%d", mode
);
564 if(strcmp(mode_str
, "clear_config") == 0)
566 GTP_INFO("Force clear config");
568 ret
= i2c_write_bytes(i2c_client_point
, GTP_REG_SLEEP
, buf
, 1);
572 if (copy_from_user(&config
[2], buffer
, count
))
574 GTP_ERROR("copy from user fail\n");
578 /***********clk operate reseved****************/
579 /**********************************************/
580 ret
= gtp_send_cfg(i2c_client_point
);
581 abs_x_max
= (config
[RESOLUTION_LOC
+ 1] << 8) + config
[RESOLUTION_LOC
];
582 abs_y_max
= (config
[RESOLUTION_LOC
+ 3] << 8) + config
[RESOLUTION_LOC
+ 2];
583 int_type
= (config
[TRIGGER_LOC
]) & 0x03;
587 GTP_ERROR("send config failed.");
593 #if GTP_SUPPORT_I2C_DMA
594 s32
i2c_dma_read(struct i2c_client
*client
, u16 addr
, u8
*rxbuf
, s32 len
)
600 struct i2c_msg msg
[2] =
603 .addr
= (client
->addr
& I2C_MASK_FLAG
),
607 .timing
= I2C_MASTER_CLOCK
610 .addr
= (client
->addr
& I2C_MASK_FLAG
),
611 .ext_flag
= (client
->ext_flag
| I2C_ENEXT_FLAG
| I2C_DMA_FLAG
),
615 .timing
= I2C_MASTER_CLOCK
619 mutex_lock(&tp_wr_access
);
620 buffer
[0] = (addr
>> 8) & 0xFF;
621 buffer
[1] = addr
& 0xFF;
624 mutex_unlock(&tp_wr_access
);
627 //GTP_DEBUG("dma i2c read: 0x%04X, %d bytes(s)", addr, len);
628 for (retry
= 0; retry
< 5; ++retry
)
630 ret
= i2c_transfer(client
->adapter
, &msg
[0], 2);
635 memcpy(rxbuf
, gpDMABuf_va
, len
);
636 mutex_unlock(&tp_wr_access
);
639 GTP_ERROR("Dma I2C Read Error: 0x%04X, %d byte(s), err-code: %d", addr
, len
, ret
);
640 mutex_unlock(&tp_wr_access
);
645 s32
i2c_dma_write(struct i2c_client
*client
, u16 addr
, u8
*txbuf
, s32 len
)
649 u8
*wr_buf
= gpDMABuf_va
;
653 .addr
= (client
->addr
& I2C_MASK_FLAG
),
654 .ext_flag
= (client
->ext_flag
| I2C_ENEXT_FLAG
| I2C_DMA_FLAG
),
658 .timing
= I2C_MASTER_CLOCK
661 mutex_lock(&tp_wr_access
);
662 wr_buf
[0] = (u8
)((addr
>> 8) & 0xFF);
663 wr_buf
[1] = (u8
)(addr
& 0xFF);
666 mutex_unlock(&tp_wr_access
);
669 //GTP_DEBUG("dma i2c write: 0x%04X, %d bytes(s)", addr, len);
670 memcpy(wr_buf
+2, txbuf
, len
);
671 for (retry
= 0; retry
< 5; ++retry
)
673 ret
= i2c_transfer(client
->adapter
, &msg
, 1);
678 mutex_unlock(&tp_wr_access
);
681 GTP_ERROR("Dma I2C Write Error: 0x%04X, %d byte(s), err-code: %d", addr
, len
, ret
);
682 mutex_unlock(&tp_wr_access
);
686 s32
i2c_read_bytes_dma(struct i2c_client
*client
, u16 addr
, u8
*rxbuf
, s32 len
)
693 //mutex_lock(&tp_wr_access);
694 //GTP_DEBUG("Read bytes dma: 0x%04X, %d byte(s)", addr, len);
697 if (left
> GTP_DMA_MAX_TRANSACTION_LENGTH
)
699 read_len
= GTP_DMA_MAX_TRANSACTION_LENGTH
;
705 ret
= i2c_dma_read(client
, addr
, rd_buf
, read_len
);
708 GTP_ERROR("dma read failed");
709 //mutex_unlock(&tp_wr_access);
717 //mutex_unlock(&tp_wr_access);
721 s32
i2c_write_bytes_dma(struct i2c_client
*client
, u16 addr
, u8
*txbuf
, s32 len
)
728 //mutex_lock(&tp_wr_access);
729 //GTP_DEBUG("Write bytes dma: 0x%04X, %d byte(s)", addr, len);
732 if (left
> GTP_DMA_MAX_I2C_TRANSFER_SIZE
)
734 write_len
= GTP_DMA_MAX_I2C_TRANSFER_SIZE
;
740 ret
= i2c_dma_write(client
, addr
, wr_buf
, write_len
);
744 GTP_ERROR("dma i2c write failed!");
745 //mutex_unlock(&tp_wr_access);
753 //mutex_unlock(&tp_wr_access);
759 int i2c_read_bytes_non_dma(struct i2c_client
*client
, u16 addr
, u8
*rxbuf
, int len
)
761 u8 buffer
[GTP_ADDR_LENGTH
];
766 struct i2c_msg msg
[2] =
769 .addr
= ((client
->addr
&I2C_MASK_FLAG
) | (I2C_ENEXT_FLAG
)),
770 //.addr = ((client->addr &I2C_MASK_FLAG) | (I2C_PUSHPULL_FLAG)),
773 .len
= GTP_ADDR_LENGTH
,
774 .timing
= I2C_MASTER_CLOCK
777 .addr
= ((client
->addr
&I2C_MASK_FLAG
) | (I2C_ENEXT_FLAG
)),
778 //.addr = ((client->addr &I2C_MASK_FLAG) | (I2C_PUSHPULL_FLAG)),
780 .timing
= I2C_MASTER_CLOCK
787 GTP_DEBUG("i2c_read_bytes to device %02X address %04X len %d", client
->addr
, addr
, len
);
791 buffer
[0] = ((addr
+ offset
) >> 8) & 0xFF;
792 buffer
[1] = (addr
+ offset
) & 0xFF;
794 msg
[1].buf
= &rxbuf
[offset
];
796 if (left
> MAX_TRANSACTION_LENGTH
)
798 msg
[1].len
= MAX_TRANSACTION_LENGTH
;
799 left
-= MAX_TRANSACTION_LENGTH
;
800 offset
+= MAX_TRANSACTION_LENGTH
;
810 while (i2c_transfer(client
->adapter
, &msg
[0], 2) != 2)
816 GTP_ERROR("I2C read 0x%X length=%d failed\n", addr
+ offset
, len
);
826 int i2c_read_bytes(struct i2c_client
*client
, u16 addr
, u8
*rxbuf
, int len
)
828 #if GTP_SUPPORT_I2C_DMA
829 return i2c_read_bytes_dma(client
, addr
, rxbuf
, len
);
831 return i2c_read_bytes_non_dma(client
, addr
, rxbuf
, len
);
835 s32
gtp_i2c_read(struct i2c_client
*client
, u8
*buf
, s32 len
)
838 u16 addr
= (buf
[0] << 8) + buf
[1];
840 ret
= i2c_read_bytes(client
, addr
, &buf
[2], len
- 2);
849 if (DOZE_ENABLED
== doze_status
)
854 #if GTP_COMPATIBLE_MODE
855 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
857 gtp_recovery_reset(client
);
862 gtp_reset_guitar(client
, 20);
869 s32
gtp_i2c_read_dbl_check(struct i2c_client
*client
, u16 addr
, u8
*rxbuf
, int len
)
872 u8 confirm_buf
[16] = {0};
877 memset(buf
, 0xAA, 16);
878 buf
[0] = (u8
)(addr
>> 8);
879 buf
[1] = (u8
)(addr
& 0xFF);
880 gtp_i2c_read(client
, buf
, len
+ 2);
882 memset(confirm_buf
, 0xAB, 16);
883 confirm_buf
[0] = (u8
)(addr
>> 8);
884 confirm_buf
[1] = (u8
)(addr
& 0xFF);
885 gtp_i2c_read(client
, confirm_buf
, len
+ 2);
887 if (!memcmp(buf
, confirm_buf
, len
+2))
889 memcpy(rxbuf
, confirm_buf
+2, len
);
893 GTP_ERROR("i2c read 0x%04X, %d bytes, double check failed!", addr
, len
);
897 int i2c_write_bytes_non_dma(struct i2c_client
*client
, u16 addr
, u8
*txbuf
, int len
)
899 u8 buffer
[MAX_TRANSACTION_LENGTH
];
906 .addr
= ((client
->addr
&I2C_MASK_FLAG
) | (I2C_ENEXT_FLAG
)),
907 //.addr = ((client->addr &I2C_MASK_FLAG) | (I2C_PUSHPULL_FLAG)),
910 .timing
= I2C_MASTER_CLOCK
,
917 GTP_DEBUG("i2c_write_bytes to device %02X address %04X len %d", client
->addr
, addr
, len
);
923 buffer
[0] = ((addr
+ offset
) >> 8) & 0xFF;
924 buffer
[1] = (addr
+ offset
) & 0xFF;
926 if (left
> MAX_I2C_TRANSFER_SIZE
)
928 memcpy(&buffer
[GTP_ADDR_LENGTH
], &txbuf
[offset
], MAX_I2C_TRANSFER_SIZE
);
929 msg
.len
= MAX_TRANSACTION_LENGTH
;
930 left
-= MAX_I2C_TRANSFER_SIZE
;
931 offset
+= MAX_I2C_TRANSFER_SIZE
;
935 memcpy(&buffer
[GTP_ADDR_LENGTH
], &txbuf
[offset
], left
);
936 msg
.len
= left
+ GTP_ADDR_LENGTH
;
940 //GTP_DEBUG("byte left %d offset %d\n", left, offset);
942 while (i2c_transfer(client
->adapter
, &msg
, 1) != 1)
948 GTP_ERROR("I2C write 0x%X%X length=%d failed\n", buffer
[0], buffer
[1], len
);
957 int i2c_write_bytes(struct i2c_client
*client
, u16 addr
, u8
*txbuf
, int len
)
959 #if GTP_SUPPORT_I2C_DMA
960 return i2c_write_bytes_dma(client
, addr
, txbuf
, len
);
962 return i2c_write_bytes_non_dma(client
, addr
, txbuf
, len
);
966 s32
gtp_i2c_write(struct i2c_client
*client
, u8
*buf
, s32 len
)
969 u16 addr
= (buf
[0] << 8) + buf
[1];
971 ret
= i2c_write_bytes(client
, addr
, &buf
[2], len
- 2);
980 if (DOZE_ENABLED
== doze_status
)
985 #if GTP_COMPATIBLE_MODE
986 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
988 gtp_recovery_reset(client
);
993 gtp_reset_guitar(client
, 20);
1001 /*******************************************************
1003 Send config Function.
1009 Executive outcomes.0--success,non-0--fail.
1010 *******************************************************/
1011 s32
gtp_send_cfg(struct i2c_client
*client
)
1015 #if GTP_DRIVER_SEND_CFG
1019 GTP_INFO("Ic fixed config, no config sent!");
1022 else if (pnl_init_error
)
1024 GTP_INFO("Error occurred in init_panel, no config sent!");
1028 GTP_DEBUG("Driver Send Config");
1029 for (retry
= 0; retry
< 5; retry
++)
1031 ret
= gtp_i2c_write(client
, config
, GTP_CONFIG_MAX_LENGTH
+ GTP_ADDR_LENGTH
);
1043 /*******************************************************
1045 Send charger config Function.
1051 Executive outcomes.0--success,non-0--fail.
1052 *******************************************************/
1053 #if GTP_CHARGER_SWITCH
1054 s32
gtp_send_cfg_for_charger(struct i2c_client
*client
)
1060 #if GTP_DRIVER_SEND_CFG
1063 GTP_INFO("gtp_send_cfg_for_charger!");
1067 GTP_INFO("Ic fixed config, no config sent!");
1070 else if (pnl_init_error
)
1072 GTP_INFO("Error occurred in init_panel, no config sent!");
1076 GTP_DEBUG("gtp_send_cfg_for_charger Send Config");
1077 charger_config
[2] = 0x00;
1079 for (i
= GTP_ADDR_LENGTH
; i
< charger_cfg_len
; i
++)
1081 check_sum
+= charger_config
[i
];
1083 charger_config
[charger_cfg_len
] = (~check_sum
) + 1;
1085 for (retry
= 0; retry
< 5; retry
++)
1087 ret
= gtp_i2c_write(client
, charger_config
, GTP_CONFIG_MAX_LENGTH
+ GTP_ADDR_LENGTH
);
1099 /*******************************************************
1101 Read goodix touchscreen version function.
1104 client: i2c client struct.
1105 version:address to store version info
1108 Executive outcomes.0---succeed.
1109 *******************************************************/
1110 s32
gtp_read_version(struct i2c_client
*client
, u16
*version
)
1114 u8 buf
[8] = {GTP_REG_VERSION
>> 8, GTP_REG_VERSION
& 0xff};
1118 ret
= gtp_i2c_read(client
, buf
, sizeof(buf
));
1122 GTP_ERROR("GTP read version failed");
1128 *version
= (buf
[7] << 8) | buf
[6];
1131 tpd_info
.vid
= *version
;
1132 tpd_info
.pid
= 0x00;
1134 for (i
= 0; i
< 4; i
++)
1136 if (buf
[i
+ 2] < 0x30)break;
1138 tpd_info
.pid
|= ((buf
[i
+ 2] - 0x30) << ((3 - i
) * 4));
1143 GTP_INFO("IC VERSION: %c%c%c%c_%02x%02x",
1144 buf
[2], buf
[3], buf
[4], buf
[5], buf
[7], buf
[6]);
1148 if (buf
[5] == 'S' || buf
[5] == 's')
1152 GTP_INFO("IC VERSION:%c%c%c%c_%02x%02x",
1153 buf
[2], buf
[3], buf
[4], buf
[5], buf
[7], buf
[6]);
1158 #if GTP_DRIVER_SEND_CFG
1159 /*******************************************************
1161 Get information from ic, such as resolution and
1164 client: i2c client private struct.
1167 FAIL: i2c failed, SUCCESS: i2c ok
1168 *******************************************************/
1169 static s32
gtp_get_info(struct i2c_client
*client
)
1171 u8 opr_buf
[6] = {0};
1174 opr_buf
[0] = (u8
)((GTP_REG_CONFIG_DATA
+1) >> 8);
1175 opr_buf
[1] = (u8
)((GTP_REG_CONFIG_DATA
+1) & 0xFF);
1177 ret
= gtp_i2c_read(client
, opr_buf
, 6);
1183 abs_x_max
= (opr_buf
[3] << 8) + opr_buf
[2];
1184 abs_y_max
= (opr_buf
[5] << 8) + opr_buf
[4];
1186 opr_buf
[0] = (u8
)((GTP_REG_CONFIG_DATA
+6) >> 8);
1187 opr_buf
[1] = (u8
)((GTP_REG_CONFIG_DATA
+6) & 0xFF);
1189 ret
= gtp_i2c_read(client
, opr_buf
, 3);
1194 int_type
= opr_buf
[2] & 0x03;
1196 GTP_INFO("X_MAX = %d, Y_MAX = %d, TRIGGER = 0x%02x",
1197 abs_x_max
,abs_y_max
, int_type
);
1204 /*******************************************************
1206 GTP initialize function.
1209 client: i2c client private struct.
1212 Executive outcomes.0---succeed.
1213 *******************************************************/
1214 static s32
gtp_init_panel(struct i2c_client
*client
)
1218 #if GTP_DRIVER_SEND_CFG
1224 u8 cfg_info_group1
[] = CTP_CFG_GROUP1
;
1225 u8 cfg_info_group2
[] = CTP_CFG_GROUP2
;
1226 u8 cfg_info_group3
[] = CTP_CFG_GROUP3
;
1227 u8 cfg_info_group4
[] = CTP_CFG_GROUP4
;
1228 u8 cfg_info_group5
[] = CTP_CFG_GROUP5
;
1229 u8 cfg_info_group6
[] = CTP_CFG_GROUP6
;
1230 u8
*send_cfg_buf
[] = {cfg_info_group1
, cfg_info_group2
, cfg_info_group3
,
1231 cfg_info_group4
, cfg_info_group5
, cfg_info_group6
};
1232 u8 cfg_info_len
[] = { CFG_GROUP_LEN(cfg_info_group1
),
1233 CFG_GROUP_LEN(cfg_info_group2
),
1234 CFG_GROUP_LEN(cfg_info_group3
),
1235 CFG_GROUP_LEN(cfg_info_group4
),
1236 CFG_GROUP_LEN(cfg_info_group5
),
1237 CFG_GROUP_LEN(cfg_info_group6
)};
1239 #if GTP_CHARGER_SWITCH
1240 u8 cfg_info_group1_charger
[] = CTP_CFG_GROUP1_CHARGER
;
1242 u8
*send_charger_cfg_buf
[] = {cfg_info_group1_charger
, cfg_info_group2
, cfg_info_group3
,
1243 cfg_info_group4
, cfg_info_group5
, cfg_info_group6
};
1244 u8 charger_cfg_info_len
[] = { CFG_GROUP_LEN(cfg_info_group1_charger
),
1245 CFG_GROUP_LEN(cfg_info_group2
),
1246 CFG_GROUP_LEN(cfg_info_group3
),
1247 CFG_GROUP_LEN(cfg_info_group4
),
1248 CFG_GROUP_LEN(cfg_info_group5
),
1249 CFG_GROUP_LEN(cfg_info_group6
)};
1250 GTP_DEBUG("Charger Config Groups\' Lengths: %d, %d, %d, %d, %d, %d",
1251 charger_cfg_info_len
[0], charger_cfg_info_len
[1], charger_cfg_info_len
[2], charger_cfg_info_len
[3],
1252 charger_cfg_info_len
[4], charger_cfg_info_len
[5]);
1255 GTP_DEBUG("Config Groups\' Lengths: %d, %d, %d, %d, %d, %d",
1256 cfg_info_len
[0], cfg_info_len
[1], cfg_info_len
[2], cfg_info_len
[3],
1257 cfg_info_len
[4], cfg_info_len
[5]);
1259 if ((!cfg_info_len
[1]) && (!cfg_info_len
[2]) &&
1260 (!cfg_info_len
[3]) && (!cfg_info_len
[4]) &&
1267 #if GTP_COMPATIBLE_MODE
1268 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
1273 ret
= gtp_i2c_read_dbl_check(client
, GTP_REG_SENSOR_ID
, &sensor_id
, 1);
1276 if (sensor_id
>= 0x06)
1278 GTP_ERROR("Invalid sensor_id(0x%02X), No Config Sent!", sensor_id
);
1281 #if GTP_COMPATIBLE_MODE
1282 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
1289 gtp_get_info(client
);
1296 GTP_ERROR("Failed to get sensor_id, No config sent!");
1300 GTP_INFO("Sensor_ID: %d", sensor_id
);
1303 cfg_len
= cfg_info_len
[sensor_id
];
1304 #if GTP_CHARGER_SWITCH
1305 charger_cfg_len
= charger_cfg_info_len
[sensor_id
];
1306 GTP_INFO("CHARGER_CTP_CONFIG_GROUP%d used, config length: %d", sensor_id
+ 1, charger_cfg_len
);
1308 if(charger_cfg_len
< GTP_CONFIG_MIN_LENGTH
)
1310 GTP_ERROR("CHARGER_CTP_CONFIG_GROUP%d is INVALID CONFIG GROUP! NO Config Sent! You need to check you header file CFG_GROUP section!", sensor_id
+1);
1316 GTP_INFO("CTP_CONFIG_GROUP%d used, config length: %d", sensor_id
+ 1, cfg_len
);
1318 if (cfg_len
< GTP_CONFIG_MIN_LENGTH
)
1320 GTP_ERROR("CTP_CONFIG_GROUP%d is INVALID CONFIG GROUP! NO Config Sent! You need to check you header file CFG_GROUP section!", sensor_id
+1);
1325 #if GTP_COMPATIBLE_MODE
1326 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
1333 ret
= gtp_i2c_read_dbl_check(client
, GTP_REG_CONFIG_DATA
, &opr_buf
[0], 1);
1337 GTP_DEBUG("CFG_CONFIG_GROUP%d Config Version: %d, 0x%02X; IC Config Version: %d, 0x%02X", sensor_id
+1,
1338 send_cfg_buf
[sensor_id
][0], send_cfg_buf
[sensor_id
][0], opr_buf
[0], opr_buf
[0]);
1340 if (opr_buf
[0] < 90)
1342 grp_cfg_version
= send_cfg_buf
[sensor_id
][0]; // backup group config version
1343 send_cfg_buf
[sensor_id
][0] = 0x00;
1344 #if GTP_CHARGER_SWITCH
1345 charger_grp_cfg_version
= send_charger_cfg_buf
[sensor_id
][0];
1346 send_charger_cfg_buf
[sensor_id
][0] = 0x00;
1350 else // treated as fixed config, not send config
1352 GTP_INFO("Ic fixed config with config version(%d)", opr_buf
[0]);
1358 GTP_ERROR("Failed to get ic config version!No config sent!");
1363 memset(&config
[GTP_ADDR_LENGTH
], 0, GTP_CONFIG_MAX_LENGTH
);
1364 memcpy(&config
[GTP_ADDR_LENGTH
], send_cfg_buf
[sensor_id
], cfg_len
);
1366 #if GTP_CHARGER_SWITCH
1367 memset(&charger_config
[GTP_ADDR_LENGTH
], 0, GTP_CONFIG_MAX_LENGTH
);
1368 memcpy(&charger_config
[GTP_ADDR_LENGTH
], send_charger_cfg_buf
[sensor_id
], charger_cfg_len
);
1372 int TPD_LCM_WIDTH
= 0;
1373 int TPD_LCM_HEIGHT
= 0;
1375 TPD_LCM_WIDTH
= simple_strtoul(CONFIG_LCM_WIDTH
, NULL
, 0);
1376 TPD_LCM_HEIGHT
= simple_strtoul(CONFIG_LCM_HEIGHT
, NULL
, 0);
1379 config
[RESOLUTION_LOC
] = (u8
)TPD_LCM_WIDTH
;
1380 config
[RESOLUTION_LOC
+ 1] = (u8
)(TPD_LCM_WIDTH
>>8);
1381 config
[RESOLUTION_LOC
+ 2] = (u8
)TPD_LCM_HEIGHT
;
1382 config
[RESOLUTION_LOC
+ 3] = (u8
)(TPD_LCM_HEIGHT
>>8);
1384 if (GTP_INT_TRIGGER
== 0) //RISING
1386 config
[TRIGGER_LOC
] &= 0xfe;
1388 else if (GTP_INT_TRIGGER
== 1) //FALLING
1390 config
[TRIGGER_LOC
] |= 0x01;
1393 #if GTP_CHARGER_SWITCH
1394 charger_config
[RESOLUTION_LOC
] = (u8
)TPD_LCM_WIDTH
;
1395 charger_config
[RESOLUTION_LOC
+ 1] = (u8
)(TPD_LCM_WIDTH
>>8);
1396 charger_config
[RESOLUTION_LOC
+ 2] = (u8
)TPD_LCM_HEIGHT
;
1397 charger_config
[RESOLUTION_LOC
+ 3] = (u8
)(TPD_LCM_HEIGHT
>>8);
1399 if (GTP_INT_TRIGGER
== 0) //RISING
1401 charger_config
[TRIGGER_LOC
] &= 0xfe;
1403 else if (GTP_INT_TRIGGER
== 1) //FALLING
1405 charger_config
[TRIGGER_LOC
] |= 0x01;
1409 #endif // GTP_CUSTOM_CFG
1412 for (i
= GTP_ADDR_LENGTH
; i
< cfg_len
; i
++)
1414 check_sum
+= config
[i
];
1416 config
[cfg_len
] = (~check_sum
) + 1;
1418 #if GTP_CHARGER_SWITCH
1420 for (i
= GTP_ADDR_LENGTH
; i
< charger_cfg_len
; i
++)
1422 check_sum
+= charger_config
[i
];
1424 charger_config
[charger_cfg_len
] = (~check_sum
) + 1;
1428 #else // DRIVER NOT SEND CONFIG
1429 cfg_len
= GTP_CONFIG_MAX_LENGTH
;
1430 ret
= gtp_i2c_read(client
, config
, cfg_len
+ GTP_ADDR_LENGTH
);
1433 GTP_ERROR("Read Config Failed, Using DEFAULT Resolution & INT Trigger!");
1434 abs_x_max
= GTP_MAX_WIDTH
;
1435 abs_y_max
= GTP_MAX_HEIGHT
;
1436 int_type
= GTP_INT_TRIGGER
;
1438 #endif // GTP_DRIVER_SEND_CFG
1441 if ((abs_x_max
== 0) && (abs_y_max
== 0))
1443 abs_x_max
= (config
[RESOLUTION_LOC
+ 1] << 8) + config
[RESOLUTION_LOC
];
1444 abs_y_max
= (config
[RESOLUTION_LOC
+ 3] << 8) + config
[RESOLUTION_LOC
+ 2];
1445 int_type
= (config
[TRIGGER_LOC
]) & 0x03;
1448 #if GTP_COMPATIBLE_MODE
1449 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
1452 if (!memcmp(>p_default_FW_fl
[4], "950", 3))
1454 driver_num
= config
[GTP_REG_MATRIX_DRVNUM
- GTP_REG_CONFIG_DATA
+ 2];
1455 sensor_num
= config
[GTP_REG_MATRIX_SENNUM
- GTP_REG_CONFIG_DATA
+ 2];
1459 driver_num
= (config
[CFG_LOC_DRVA_NUM
]&0x1F) + (config
[CFG_LOC_DRVB_NUM
]&0x1F);
1460 sensor_num
= (config
[CFG_LOC_SENS_NUM
]&0x0F) + ((config
[CFG_LOC_SENS_NUM
]>>4)&0x0F);
1463 have_key
= config
[GTP_REG_HAVE_KEY
- GTP_REG_CONFIG_DATA
+ 2] & 0x01; // have key or not
1469 GTP_INFO("Driver * Sensor: %d * %d(Key: %d), X_MAX = %d, Y_MAX = %d, TRIGGER = 0x%02x",
1470 driver_num
, sensor_num
, have_key
, abs_x_max
,abs_y_max
,int_type
);
1475 #if GTP_DRIVER_SEND_CFG
1477 ret
= gtp_send_cfg(client
);
1480 GTP_ERROR("Send config error.");
1483 // set config version to CTP_CFG_GROUP
1484 // for resume to send config
1485 config
[GTP_ADDR_LENGTH
] = grp_cfg_version
;
1487 for (i
= GTP_ADDR_LENGTH
; i
< cfg_len
; i
++)
1489 check_sum
+= config
[i
];
1491 config
[cfg_len
] = (~check_sum
) + 1;
1493 /**********************/
1494 #if GTP_CHARGER_SWITCH
1495 charger_config
[GTP_ADDR_LENGTH
] = charger_grp_cfg_version
;
1497 for (i
= GTP_ADDR_LENGTH
; i
< charger_cfg_len
; i
++)
1499 check_sum
+= charger_config
[i
];
1501 charger_config
[charger_cfg_len
] = (~check_sum
) + 1;
1503 /**********************/
1505 GTP_INFO("X_MAX = %d, Y_MAX = %d, TRIGGER = 0x%02x",
1506 abs_x_max
,abs_y_max
,int_type
);
1513 static s8
gtp_i2c_test(struct i2c_client
*client
)
1524 ret
= i2c_read_bytes(client
, GTP_REG_HW_INFO
, (u8
*)&hw_info
, sizeof(hw_info
));
1526 if ((!ret
) && (hw_info
== 0x00900600)) //20121212
1531 GTP_ERROR("GTP_REG_HW_INFO : %08X", hw_info
);
1532 GTP_ERROR("GTP i2c test failed time %d.", retry
);
1541 /*******************************************************
1543 Set INT pin as input for FW sync.
1546 If the INT is high, It means there is pull up resistor attached on the INT pin.
1547 Pull low the INT pin manaully for FW sync.
1548 *******************************************************/
1549 void gtp_int_sync(s32 ms
)
1551 GTP_GPIO_OUTPUT(GTP_INT_PORT
, 0);
1553 GTP_GPIO_AS_INT(GTP_INT_PORT
);
1556 void gtp_reset_guitar(struct i2c_client
*client
, s32 ms
)
1558 GTP_INFO("GTP RESET!\n");
1559 GTP_GPIO_OUTPUT(GTP_RST_PORT
, 0);
1561 GTP_GPIO_OUTPUT(GTP_INT_PORT
, client
->addr
== 0x14);
1564 GTP_GPIO_OUTPUT(GTP_RST_PORT
, 1);
1566 msleep(6); //must >= 6ms
1568 #if GTP_COMPATIBLE_MODE
1569 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
1575 gtp_int_sync(100); // for dbl-system
1577 gtp_init_ext_watchdog(i2c_client_point
);
1581 static int tpd_power_on(struct i2c_client
*client
)
1584 int reset_count
= 0;
1587 GTP_GPIO_OUTPUT(GTP_RST_PORT
, 0);
1588 GTP_GPIO_OUTPUT(GTP_INT_PORT
, 0);
1593 mt_set_gpio_mode(GPIO_CTP_EN_PIN
, GPIO_CTP_EN_PIN_M_GPIO
);
1594 mt_set_gpio_dir(GPIO_CTP_EN_PIN
, GPIO_DIR_OUT
);
1595 mt_set_gpio_out(GPIO_CTP_EN_PIN
, GPIO_OUT_ONE
);
1597 #else // ( defined(MT6575) || defined(MT6577) || defined(MT6589) )
1599 #ifdef TPD_POWER_SOURCE_CUSTOM
1600 hwPowerOn(TPD_POWER_SOURCE_CUSTOM
, VOL_2800
, "TP");
1602 hwPowerOn(MT65XX_POWER_LDO_VGP2
, VOL_2800
, "TP");
1604 #ifdef TPD_POWER_SOURCE_1800
1605 hwPowerOn(TPD_POWER_SOURCE_1800
, VOL_1800
, "TP");
1610 gtp_reset_guitar(client
, 20);
1612 #if GTP_COMPATIBLE_MODE
1613 gtp_get_chip_type(client
);
1615 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
1617 ret
= (int)gup_load_main_system(NULL
);
1620 GTP_ERROR("[tpd_power_on]Download fw failed.");
1621 if(reset_count
++ < TPD_MAX_RESET_COUNT
)
1634 ret
= gtp_i2c_test(client
);
1638 GTP_ERROR("I2C communication ERROR!");
1640 if (reset_count
< TPD_MAX_RESET_COUNT
)
1651 //**************** For GT9XXF Start ********************//
1652 #if GTP_COMPATIBLE_MODE
1654 void gtp_get_chip_type(struct i2c_client
*client
)
1656 u8 opr_buf
[10] = {0x00};
1661 ret
= gtp_i2c_read_dbl_check(client
, GTP_REG_CHIP_TYPE
, opr_buf
, 10);
1665 GTP_ERROR("Failed to get chip-type, set chip type default: GOODIX_GT9");
1666 gtp_chip_type
= CHIP_TYPE_GT9
;
1667 tpd_load_status
= 0;
1671 if (!memcmp(opr_buf
, "GOODIX_GT9", 10))
1673 gtp_chip_type
= CHIP_TYPE_GT9
;
1677 gtp_chip_type
= CHIP_TYPE_GT9F
;
1679 #ifdef CUSTOM_CHIP_TYPE
1680 gtp_chip_type
= CUSTOM_CHIP_TYPE
; // for test
1682 GTP_INFO("Chip Type: %s", (gtp_chip_type
== CHIP_TYPE_GT9
) ? "GOODIX_GT9" : "GOODIX_GT9F");
1684 tpd_load_status
= 1;
1688 static u8
gtp_bak_ref_proc(struct i2c_client
*client
, u8 mode
)
1693 struct file
*flp
= NULL
;
1696 u32 ref_seg_len
= 0;
1701 GTP_DEBUG("[gtp_bak_ref_proc]Driver:%d,Sensor:%d.", driver_num
, sensor_num
);
1703 //check file-system mounted
1704 GTP_DEBUG("[gtp_bak_ref_proc]Waiting for FS %d", gtp_ref_retries
);
1705 if (gup_check_fs_mounted("/data") == FAIL
)
1707 GTP_DEBUG("[gtp_bak_ref_proc]/data not mounted");
1708 if(gtp_ref_retries
++ < GTP_CHK_FS_MNT_MAX
)
1715 GTP_DEBUG("[gtp_bak_ref_proc]/data mounted !!!!");
1718 if (!memcmp(>p_default_FW_fl
[4], "950", 3))
1720 ref_seg_len
= (driver_num
* (sensor_num
- 1) + 2) * 2;
1722 ref_len
= ref_seg_len
* 6; // for GT950, backup-reference for six segments
1726 ref_len
= driver_num
*(sensor_num
-2)*2 + 4;
1727 ref_seg_len
= ref_len
;
1731 refp
= (u8
*)kzalloc(ref_len
, GFP_KERNEL
);
1734 GTP_ERROR("[gtp_bak_ref_proc]Alloc memory for ref failed.use default ref");
1737 memset(refp
, 0, ref_len
);
1738 if(gtp_ref_retries
>= GTP_CHK_FS_MNT_MAX
)
1740 for (j
= 0; j
< ref_grps
; ++j
)
1742 refp
[ref_seg_len
+ j
* ref_seg_len
-1] = 0x01;
1744 ret
= i2c_write_bytes(client
, 0x99D0, refp
, ref_len
);
1747 GTP_ERROR("[gtp_bak_ref_proc]Write ref i2c error.");
1751 GTP_ERROR("[gtp_bak_ref_proc]Bak file or path is not exist,send default ref.");
1757 flp
= filp_open(GTP_BAK_REF_PATH
, O_RDWR
| O_CREAT
, 0660);
1760 GTP_ERROR("[gtp_bak_ref_proc]Ref File not found!Creat ref file.");
1761 //flp->f_op->llseek(flp, 0, SEEK_SET);
1762 //flp->f_op->write(flp, (char *)refp, ref_len, &flp->f_pos);
1767 else if(GTP_BAK_REF_SEND
== mode
)
1769 flp
->f_op
->llseek(flp
, 0, SEEK_SET
);
1770 ret
= flp
->f_op
->read(flp
, (char *)refp
, ref_len
, &flp
->f_pos
);
1773 GTP_ERROR("[gtp_bak_ref_proc]Read ref file failed.");
1774 memset(refp
, 0, ref_len
);
1778 if(GTP_BAK_REF_STORE
== mode
)
1780 ret
= i2c_read_bytes(client
, 0x99D0, refp
, ref_len
);
1783 GTP_ERROR("[gtp_bak_ref_proc]Read ref i2c error.");
1787 flp
->f_op
->llseek(flp
, 0, SEEK_SET
);
1788 flp
->f_op
->write(flp
, (char *)refp
, ref_len
, &flp
->f_pos
);
1793 for (j
= 0; j
< ref_grps
; ++j
)
1796 for(i
=0; i
<ref_seg_len
-2; i
+=2)
1798 ref_chksum
+= ((refp
[i
+ j
* ref_seg_len
]<<8) + refp
[i
+ 1 + j
* ref_seg_len
]);
1801 GTP_DEBUG("[gtp_bak_ref_proc]Calc ref chksum:0x%04X", ref_chksum
&0xFF);
1802 tmp
= ref_chksum
+ (refp
[ref_seg_len
+ j
* ref_seg_len
-2]<<8) + refp
[ref_seg_len
+ j
* ref_seg_len
-1];
1805 GTP_DEBUG("[gtp_bak_ref_proc]Ref file chksum error,use default ref");
1806 memset(&refp
[j
* ref_seg_len
], 0, ref_seg_len
);
1807 refp
[ref_seg_len
- 1 + j
* ref_seg_len
] = 0x01;
1811 if (j
== (ref_grps
- 1))
1813 GTP_DEBUG("[gtp_bak_ref_proc]Ref file chksum success.");
1819 ret
= i2c_write_bytes(client
, 0x99D0, refp
, ref_len
);
1822 GTP_ERROR("[gtp_bak_ref_proc]Write ref i2c error.");
1835 if(flp
!= NULL
&&!IS_ERR(flp
))
1837 filp_close(flp
, NULL
);
1842 u8
gtp_fw_startup(struct i2c_client
*client
)
1849 ret
= i2c_write_bytes(client
, 0x8041, wr_buf
, 1);
1852 GTP_ERROR("I2C error to firmware startup.");
1855 //release SS51 & DSP
1857 i2c_write_bytes(client
, 0x4180, wr_buf
, 1);
1862 //check fw run status
1863 i2c_read_bytes(client
, 0x8041, wr_buf
, 1);
1864 if(0xAA == wr_buf
[0])
1866 GTP_ERROR("IC works abnormally,startup failed.");
1871 GTP_DEBUG("IC works normally,Startup success.");
1873 i2c_write_bytes(client
, 0x8041, wr_buf
, 1);
1877 static void gtp_recovery_reset(struct i2c_client
*client
)
1879 //mutex_lock(&i2c_access);
1883 gtp_esd_switch(client
, SWITCH_OFF
);
1885 force_reset_guitar();
1887 gtp_esd_switch(client
, SWITCH_ON
);
1890 //mutex_unlock(&i2c_access);
1893 static u8
gtp_check_clk_legality(void)
1896 u8 clk_chksum
= gtp_clk_buf
[5];
1898 for(i
= 0; i
< 5; i
++)
1900 if((gtp_clk_buf
[i
] < 50) || (gtp_clk_buf
[i
] > 120) ||
1901 (gtp_clk_buf
[i
] != gtp_clk_buf
[0]))
1905 clk_chksum
+= gtp_clk_buf
[i
];
1908 if((i
== 5) && (clk_chksum
== 0))
1910 GTP_INFO("Clk ram legality check success");
1913 GTP_ERROR("main clock freq in clock buf is wrong");
1917 static u8
gtp_main_clk_proc(struct i2c_client
*client
)
1921 u8 clk_cal_result
= 0;
1923 struct file
*flp
= NULL
;
1925 //check clk legality
1926 ret
= gtp_check_clk_legality();
1932 GTP_DEBUG("[gtp_main_clk_proc]Waiting for FS %d", gtp_ref_retries
);
1933 if (gup_check_fs_mounted("/data") == FAIL
)
1935 GTP_DEBUG("[gtp_main_clk_proc]/data not mounted");
1936 if(gtp_clk_retries
++ < GTP_CHK_FS_MNT_MAX
)
1942 GTP_ERROR("[gtp_main_clk_proc]Wait for file system timeout,need cal clk");
1947 GTP_DEBUG("[gtp_main_clk_proc]/data mounted !!!!");
1948 flp
= filp_open(GTP_MAIN_CLK_PATH
, O_RDWR
| O_CREAT
, 0660);
1951 flp
->f_op
->llseek(flp
, 0, SEEK_SET
);
1952 ret
= flp
->f_op
->read(flp
, (char *)gtp_clk_buf
, 6, &flp
->f_pos
);
1955 ret
= gtp_check_clk_legality();
1958 GTP_DEBUG("[gtp_main_clk_proc]Open & read & check clk file success.");
1963 GTP_ERROR("[gtp_main_clk_proc]Check clk file failed,need cal clk");
1968 gtp_esd_switch(client
, SWITCH_OFF
);
1970 clk_cal_result
= gup_clk_calibration();
1971 force_reset_guitar();
1972 GTP_DEBUG("&&&&&&&&&&clk cal result:%d", clk_cal_result
);
1975 gtp_esd_switch(client
, SWITCH_ON
);
1978 if(clk_cal_result
< 50 || clk_cal_result
> 120)
1980 GTP_ERROR("[gtp_main_clk_proc]cal clk result is illegitimate");
1985 for(i
= 0;i
< 5; i
++)
1987 gtp_clk_buf
[i
] = clk_cal_result
;
1988 clk_chksum
+= gtp_clk_buf
[i
];
1990 gtp_clk_buf
[5] = 0 - clk_chksum
;
1994 flp
= filp_open(GTP_MAIN_CLK_PATH
, O_RDWR
| O_CREAT
, 0660);
1998 flp
->f_op
->llseek(flp
, 0, SEEK_SET
);
1999 flp
->f_op
->write(flp
, (char *)gtp_clk_buf
, 6, &flp
->f_pos
);
2005 ret
= i2c_write_bytes(client
, 0x8020, gtp_clk_buf
, 6);
2008 GTP_ERROR("[gtp_main_clk_proc]send main clk i2c error!");
2015 if(flp
!= NULL
&&!IS_ERR(flp
))
2017 filp_close(flp
, NULL
);
2024 //************* For GT9XXF End **********************//
2026 static const struct file_operations gt_upgrade_proc_fops
= {
2027 .write
= gt91xx_config_write_proc
,
2028 .read
= gt91xx_config_read_proc
2031 #ifdef CONFIG_OF_TOUCH
2032 static int tpd_irq_registration(void)
2034 struct device_node
*node
= NULL
;
2036 u32 ints
[2] = {0,0};
2038 node
= of_find_compatible_node(NULL
, NULL
, "mediatek, TOUCH_PANEL-eint");
2040 of_property_read_u32_array(node
, "debounce", ints
, ARRAY_SIZE(ints
));
2041 gpio_set_debounce(ints
[0], ints
[1]);
2043 touch_irq
= irq_of_parse_and_map(node
, 0);
2045 if (!int_type
) //EINTF_TRIGGER
2047 ret
= request_irq(touch_irq
, tpd_eint_interrupt_handler
, EINTF_TRIGGER_RISING
, "TOUCH_PANEL-eint", NULL
);
2048 gtp_eint_trigger_type
= EINTF_TRIGGER_RISING
;
2051 GTP_ERROR("tpd request_irq IRQ LINE NOT AVAILABLE!.");
2056 ret
= request_irq(touch_irq
, tpd_eint_interrupt_handler
, EINTF_TRIGGER_FALLING
, "TOUCH_PANEL-eint", NULL
);
2057 gtp_eint_trigger_type
= EINTF_TRIGGER_FALLING
;
2060 GTP_ERROR("tpd request_irq IRQ LINE NOT AVAILABLE!.");
2064 GTP_ERROR("tpd request_irq can not find touch eint device node!.");
2067 GTP_INFO("[%s]irq:%d, debounce:%d-%d:", __FUNCTION__
, touch_irq
, ints
[0], ints
[1]);
2072 static int tpd_registration(struct i2c_client
*client
)
2077 #if GTP_HAVE_TOUCH_KEY
2080 #ifdef TPD_PROXIMITY
2081 struct hwmsen_object obj_ps
;
2084 GTP_INFO("tpd registration start.");
2086 i2c_client_point
= client
;
2087 ret
= tpd_power_on(client
);
2091 GTP_ERROR("I2C communication ERROR!");
2094 //#ifdef VELOCITY_CUSTOM
2097 if ((err
= misc_register(&tpd_misc_device
)))
2099 printk("mtk_tpd: tpd_misc_device register failed\n");
2103 #ifdef VELOCITY_CUSTOM
2104 tpd_v_magnify_x
= TPD_VELOCITY_CUSTOM_X
;
2105 tpd_v_magnify_y
= TPD_VELOCITY_CUSTOM_Y
;
2109 memcpy(&tpd_filter
, &tpd_filter_local
, sizeof(struct tpd_filter_t
));
2113 ret
= gtp_read_version(client
, &version_info
);
2117 GTP_ERROR("Read version failed.");
2120 ret
= gtp_init_panel(client
);
2124 GTP_ERROR("GTP init panel failed.");
2127 // Create proc file system
2128 gt91xx_config_proc
= proc_create(GT91XX_CONFIG_PROC_FILE
, 0660, NULL
, >_upgrade_proc_fops
);
2129 if (gt91xx_config_proc
== NULL
)
2131 GTP_ERROR("create_proc_entry %s failed\n", GT91XX_CONFIG_PROC_FILE
);
2135 #if GTP_CREATE_WR_NODE
2136 init_wr_node(client
);
2139 thread
= kthread_run(touch_event_handler
, 0, TPD_DEVICE
);
2143 err
= PTR_ERR(thread
);
2144 GTP_INFO(TPD_DEVICE
" failed to create kernel thread: %d\n", err
);
2148 #if GTP_HAVE_TOUCH_KEY
2150 for (idx
= 0; idx
< GTP_MAX_KEY_NUM
; idx
++)
2152 input_set_capability(tpd
->dev
, EV_KEY
, touch_key_array
[idx
]);
2156 #if GTP_SLIDE_WAKEUP
2157 input_set_capability(tpd
->dev
, EV_KEY
, KEY_POWER
);
2162 __set_bit(BTN_TOOL_PEN
, tpd
->dev
->keybit
);
2163 __set_bit(INPUT_PROP_DIRECT
, tpd
->dev
->propbit
);
2164 //__set_bit(INPUT_PROP_POINTER, tpd->dev->propbit); // 20130722
2167 mt_set_gpio_mode(GPIO_CTP_EINT_PIN
, GPIO_CTP_EINT_PIN_M_EINT
);
2168 mt_set_gpio_dir(GPIO_CTP_EINT_PIN
, GPIO_DIR_IN
);
2169 mt_set_gpio_pull_enable(GPIO_CTP_EINT_PIN
, GPIO_PULL_DISABLE
);
2173 #ifdef CONFIG_OF_TOUCH
2174 /* EINT device tree, default EINT enable */
2175 tpd_irq_registration();
2177 if (!int_type
) //EINTF_TRIGGER
2179 mt_eint_registration(CUST_EINT_TOUCH_PANEL_NUM
, EINTF_TRIGGER_RISING
, tpd_eint_interrupt_handler
, 1);
2180 gtp_eint_trigger_type
= EINTF_TRIGGER_RISING
;
2184 mt_eint_registration(CUST_EINT_TOUCH_PANEL_NUM
, EINTF_TRIGGER_FALLING
, tpd_eint_interrupt_handler
, 1);
2185 gtp_eint_trigger_type
= EINTF_TRIGGER_FALLING
;
2187 mt_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM
);
2191 ret
= gup_init_update_proc(client
);
2195 GTP_ERROR("Create update thread error.");
2199 #ifdef TPD_PROXIMITY
2200 //obj_ps.self = cm3623_obj;
2201 obj_ps
.polling
= 0; //0--interrupt mode;1--polling mode;
2202 obj_ps
.sensor_operate
= tpd_ps_operate
;
2204 if ((err
= hwmsen_attach(ID_PROXIMITY
, &obj_ps
)))
2206 GTP_ERROR("hwmsen attach fail, return:%d.", err
);
2212 gtp_esd_switch(client
, SWITCH_ON
);
2214 GTP_INFO("tpd registration done.");
2217 static s32
tpd_i2c_probe(struct i2c_client
*client
, const struct i2c_device_id
*id
)
2221 GTP_INFO("tpd_i2c_probe start.");
2223 if (RECOVERY_BOOT
== get_boot_mode())
2226 probe_thread
=kthread_run(tpd_registration
, client
, "tpd_probe");
2227 if (IS_ERR(probe_thread
))
2229 err
= PTR_ERR(probe_thread
);
2230 GTP_INFO(TPD_DEVICE
" failed to create probe thread: %d\n", err
);
2240 GTP_INFO("tpd_i2c_probe done.count = %d, flag = %d",count
,check_flag
);
2244 #ifdef CONFIG_OF_TOUCH
2245 static irqreturn_t
tpd_eint_interrupt_handler(unsigned irq
, struct irq_desc
*desc
)
2247 TPD_DEBUG_PRINT_INT
;
2250 /* enter EINT handler disable INT, make sure INT is disable when handle touch event including top/bottom half */
2251 /* use _nosync to avoid deadlock */
2252 disable_irq_nosync(touch_irq
);
2253 wake_up_interruptible(&waiter
);
2257 static void tpd_eint_interrupt_handler(void)
2259 TPD_DEBUG_PRINT_INT
;
2263 wake_up_interruptible(&waiter
);
2267 static int tpd_i2c_remove(struct i2c_client
*client
)
2269 #if GTP_CREATE_WR_NODE
2274 destroy_workqueue(gtp_esd_check_workqueue
);
2279 #if (GTP_ESD_PROTECT || GTP_COMPATIBLE_MODE)
2280 void force_reset_guitar(void)
2284 //static u8 is_reseting = 0;
2286 if(is_reseting
|| (load_fw_process
== 1))
2290 GTP_INFO("force_reset_guitar");
2292 #ifdef CONFIG_OF_TOUCH
2293 disable_irq(touch_irq
);
2295 mt_eint_mask(CUST_EINT_TOUCH_PANEL_NUM
);
2298 GTP_GPIO_OUTPUT(GTP_RST_PORT
, 0);
2299 GTP_GPIO_OUTPUT(GTP_INT_PORT
, 0);
2302 mt_set_gpio_mode(GPIO_CTP_EN_PIN
, GPIO_CTP_EN_PIN_M_GPIO
);
2303 mt_set_gpio_dir(GPIO_CTP_EN_PIN
, GPIO_DIR_OUT
);
2304 mt_set_gpio_out(GPIO_CTP_EN_PIN
, GPIO_OUT_ZERO
);
2307 mt_set_gpio_out(GPIO_CTP_EN_PIN
, GPIO_OUT_ONE
);
2309 #else // ( defined(MT6575) || defined(MT6577) || defined(MT6589) )
2311 #ifdef TPD_POWER_SOURCE_CUSTOM
2312 hwPowerDown(TPD_POWER_SOURCE_CUSTOM
, "TP");
2314 hwPowerDown(MT65XX_POWER_LDO_VGP2
, "TP");
2316 #ifdef TPD_POWER_SOURCE_1800
2317 hwPowerDown(TPD_POWER_SOURCE_1800
, "TP");
2322 #ifdef TPD_POWER_SOURCE_CUSTOM
2323 hwPowerOn(TPD_POWER_SOURCE_CUSTOM
, VOL_2800
, "TP");
2325 hwPowerOn(MT65XX_POWER_LDO_VGP2
, VOL_2800
, "TP");
2331 #ifdef CONFIG_OF_TOUCH
2332 enable_irq(touch_irq
);
2334 mt_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM
);
2337 for (i
= 0; i
< 5; i
++)
2340 gtp_reset_guitar(i2c_client_point
, 20);
2342 #if GTP_COMPATIBLE_MODE
2343 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
2346 ret
= gup_load_main_system(NULL
);
2349 GTP_ERROR("[force_reset_guitar]Check & repair fw failed.");
2357 ret
= gtp_send_cfg(i2c_client_point
);
2372 static s32
gtp_init_ext_watchdog(struct i2c_client
*client
)
2374 u8 opr_buffer
[2] = {0xAA};
2375 GTP_DEBUG("Init external watchdog.");
2376 return i2c_write_bytes(client
, 0x8041, opr_buffer
, 1);
2379 void gtp_esd_switch(struct i2c_client
*client
, s32 on
)
2381 spin_lock(&esd_lock
);
2382 if (SWITCH_ON
== on
) // switch on esd
2387 spin_unlock(&esd_lock
);
2388 GTP_INFO("Esd started");
2389 queue_delayed_work(gtp_esd_check_workqueue
, >p_esd_check_work
, clk_tick_cnt
);
2393 spin_unlock(&esd_lock
);
2396 else // switch off esd
2401 spin_unlock(&esd_lock
);
2402 GTP_INFO("Esd cancelled");
2403 cancel_delayed_work(>p_esd_check_work
);
2407 spin_unlock(&esd_lock
);
2413 static void gtp_esd_check_func(struct work_struct
*work
)
2417 u8 esd_buf
[2] = {0x00};
2421 GTP_INFO("Esd suspended!");
2424 if(1 == load_fw_process
)
2426 GTP_INFO("Load FW process is runing");
2430 //mutex_lock(&i2c_access);
2431 for (i
= 0; i
< 3; i
++)
2433 ret
= i2c_read_bytes_non_dma(i2c_client_point
, 0x8040, esd_buf
, 2);
2435 GTP_DEBUG("[Esd]0x8040 = 0x%02X, 0x8041 = 0x%02X", esd_buf
[0], esd_buf
[1]);
2438 // IIC communication problem
2443 if ((esd_buf
[0] == 0xAA) || (esd_buf
[1] != 0xAA))
2445 u8 chk_buf
[2] = {0x00};
2446 i2c_read_bytes_non_dma(i2c_client_point
, 0x8040, chk_buf
, 2);
2448 GTP_DEBUG("[Check]0x8040 = 0x%02X, 0x8041 = 0x%02X", chk_buf
[0], chk_buf
[1]);
2450 if ( (chk_buf
[0] == 0xAA) || (chk_buf
[1] != 0xAA) )
2452 i
= 3; // jump to reset guitar
2462 // IC works normally, Write 0x8040 0xAA, feed the watchdog
2464 i2c_write_bytes_non_dma(i2c_client_point
, 0x8040, esd_buf
, 1);
2473 #if GTP_COMPATIBLE_MODE
2474 if ((CHIP_TYPE_GT9F
== gtp_chip_type
) && (1 == rqst_processing
))
2476 GTP_INFO("Request Processing, no reset guitar.");
2481 GTP_INFO("IC works abnormally! Process reset guitar.");
2482 memset(esd_buf
, 0x01, sizeof(esd_buf
));
2483 i2c_write_bytes(i2c_client_point
, 0x4226, esd_buf
, sizeof(esd_buf
));
2485 force_reset_guitar();
2489 #if FLASHLESS_FLASH_WORKROUND
2496 ret
= i2c_read_bytes_non_dma(i2c_client_point
, 0x8140, versionBuff
, 4);
2501 if( memcmp(versionBuff
, >p_default_FW_fl
[4], 4) !=0 )
2505 temp
= versionBuff
[5];
2506 versionBuff
[5] = versionBuff
[4];
2507 versionBuff
[4] = temp
;
2509 if( memcmp(&versionBuff
[4], >p_default_FW_fl
[12], 2) !=0 )
2517 GTP_INFO("IC version error., force reset!");
2518 force_reset_guitar();
2522 //mutex_unlock(&i2c_access);
2525 queue_delayed_work(gtp_esd_check_workqueue
, >p_esd_check_work
, clk_tick_cnt
);
2529 GTP_INFO("Esd suspended!");
2535 static int tpd_history_x
=0, tpd_history_y
=0;
2536 static void tpd_down(s32 x
, s32 y
, s32 size
, s32 id
)
2538 #if GTP_CHARGER_SWITCH
2539 if(is_charger_cfg_updating
){
2540 printk("tpd_down ignored when CFG changing\n");
2544 if ((!size
) && (!id
))
2546 input_report_abs(tpd
->dev
, ABS_MT_PRESSURE
, 100);
2547 input_report_abs(tpd
->dev
, ABS_MT_TOUCH_MAJOR
, 100);
2551 input_report_abs(tpd
->dev
, ABS_MT_PRESSURE
, size
);
2552 input_report_abs(tpd
->dev
, ABS_MT_TOUCH_MAJOR
, size
);
2553 /* track id Start 0 */
2554 input_report_abs(tpd
->dev
, ABS_MT_TRACKING_ID
, id
);
2557 input_report_key(tpd
->dev
, BTN_TOUCH
, 1);
2558 input_report_abs(tpd
->dev
, ABS_MT_POSITION_X
, x
);
2559 input_report_abs(tpd
->dev
, ABS_MT_POSITION_Y
, y
);
2560 input_mt_sync(tpd
->dev
);
2562 TPD_EM_PRINT(x
, y
, x
, y
, id
, 1);
2566 //MMProfileLogEx(MMP_TouchPanelEvent, MMProfileFlagPulse, 1, x+y);
2567 #ifdef TPD_HAVE_BUTTON
2569 if (FACTORY_BOOT
== get_boot_mode() || RECOVERY_BOOT
== get_boot_mode())
2571 tpd_button(x
, y
, 1);
2577 static void tpd_up(s32 x
, s32 y
, s32 id
)
2579 #if GTP_CHARGER_SWITCH
2580 if(is_charger_cfg_updating
){
2581 printk("tpd_up change is_charger_cfg_updating status\n");
2582 is_charger_cfg_updating
= false;
2586 //input_report_abs(tpd->dev, ABS_MT_PRESSURE, 0);
2587 input_report_key(tpd
->dev
, BTN_TOUCH
, 0);
2588 //input_report_abs(tpd->dev, ABS_MT_TOUCH_MAJOR, 0);
2589 input_mt_sync(tpd
->dev
);
2591 TPD_EM_PRINT(tpd_history_x
, tpd_history_y
, tpd_history_x
, tpd_history_y
, id
, 0);
2594 //MMProfileLogEx(MMP_TouchPanelEvent, MMProfileFlagPulse, 0, x+y);
2596 #ifdef TPD_HAVE_BUTTON
2598 if (FACTORY_BOOT
== get_boot_mode() || RECOVERY_BOOT
== get_boot_mode())
2600 tpd_button(x
, y
, 0);
2605 #if GTP_CHARGER_SWITCH
2606 static u64 CFG_time_interval
= 0;
2607 static void gtp_charger_switch(s32 dir_update
)
2610 u8 chr_cmd
[3] = {0x80, 0x40};
2611 static u8 chr_pluggedin
= 0;
2613 u8 buf
[3] = {0x81, 0xaa, 0};
2614 u64 cfg_timestamp
= 0;
2618 chr_status
= *(volatile u32
*)CHR_CON0
;
2619 chr_status
&= (1 << 13);
2620 #else // ( defined(MT6575) || defined(MT6577) || defined(MT6589) )
2621 if (!g_bat_init_flag
) return;
2622 chr_status
= upmu_is_chr_det();
2625 gtp_i2c_read(i2c_client_point
,buf
,sizeof(buf
));
2628 GTP_INFO("GTP gtp_charger_switch in Hotknot status CFG update ignored");
2632 if (chr_status
) // charger plugged in
2634 if (!chr_pluggedin
|| dir_update
)
2636 cfg_timestamp
= sched_clock();
2637 if((cfg_timestamp
- CFG_time_interval
)<500000000){
2638 GTP_INFO("Update CFG Operation too fast, ignored");
2642 gtp_send_cfg_for_charger(i2c_client_point
);
2644 ret
= gtp_i2c_write(i2c_client_point
, chr_cmd
, 3);
2647 GTP_INFO("Update status for Charger Plugin");
2651 is_charger_cfg_updating
= true;
2653 CFG_time_interval
= cfg_timestamp
;
2657 else // charger plugged out
2659 if (chr_pluggedin
|| dir_update
)
2661 cfg_timestamp
= sched_clock();
2662 if((cfg_timestamp
- CFG_time_interval
)<500000000){
2663 GTP_INFO("Update CFG Operation too fast, ignored");
2667 gtp_send_cfg(i2c_client_point
);
2669 ret
= gtp_i2c_write(i2c_client_point
, chr_cmd
, 3);
2672 GTP_INFO("Update status for Charger Plugout");
2676 is_charger_cfg_updating
= true;
2678 CFG_time_interval
= cfg_timestamp
;
2684 static int touch_event_handler(void *unused
)
2686 struct sched_param param
= { .sched_priority
= RTPM_PRIO_TPD
};
2687 u8 end_cmd
[3] = {GTP_READ_COOR_ADDR
>> 8, GTP_READ_COOR_ADDR
& 0xFF, 0};
2688 u8 point_data
[2 + 1 + 8 * GTP_MAX_TOUCH
+ 1] = {GTP_READ_COOR_ADDR
>> 8, GTP_READ_COOR_ADDR
& 0xFF};
2691 static u8 pre_touch
= 0;
2692 static u8 pre_key
= 0;
2694 static u8 pre_pen
= 0;
2697 u8
*coor_data
= NULL
;
2705 #if GTP_COMPATIBLE_MODE
2706 u8 rqst_data
[3] = {(u8
)(GTP_REG_RQST
>> 8), (u8
)(GTP_REG_RQST
& 0xFF), 0};
2709 #if HOTKNOT_BLOCK_RW
2710 u8 hn_pxy_state
= 0;
2711 u8 hn_pxy_state_bak
= 0;
2712 u8 hn_paired_cnt
= 0;
2713 u8 hn_state_buf
[10] = {(u8
)(GTP_REG_HN_STATE
>> 8), (u8
)(GTP_REG_HN_STATE
& 0xFF), 0};
2716 #ifdef TPD_PROXIMITY
2718 hwm_sensor_data sensor_data
;
2719 u8 proximity_status
;
2722 #if GTP_SLIDE_WAKEUP
2723 u8 doze_buf
[3] = {0x81, 0x4B};
2726 u8 g_buffer
[3] = {0x30, 0x14};
2729 sched_setscheduler(current
, SCHED_RR
, ¶m
);
2732 set_current_state(TASK_INTERRUPTIBLE
);
2735 wait_event_interruptible(waiter
, tpd_flag
!= 0);
2740 msleep(tpd_polling_time
);
2743 set_current_state(TASK_RUNNING
);
2744 mutex_lock(&i2c_access
);
2746 #if GTP_CHARGER_SWITCH
2747 gtp_charger_switch(0);
2751 ret
= gtp_i2c_read(i2c_client_point
, g_buffer
, 3);
2752 printk("mtk-tpd:0x3014:value %x\n", g_buffer
[2]);
2753 if(ret
>0 &&(g_buffer
[2] == 0x1d))//0x001d: 1640hz;0x004b:4292hz
2755 printk("low report rate:0x3014:value %x\n", g_buffer
[2]);
2759 #if GTP_SLIDE_WAKEUP
2760 if (DOZE_ENABLED
== doze_status
)
2762 ret
= gtp_i2c_read(i2c_client_point
, doze_buf
, 3);
2763 GTP_DEBUG("0x814B = 0x%02X", doze_buf
[2]);
2766 if (0xAA == doze_buf
[2])
2768 GTP_INFO("Forward slide to light up the screen!");
2769 doze_status
= DOZE_WAKEUP
;
2770 input_report_key(tpd
->dev
, KEY_POWER
, 1);
2771 input_sync(tpd
->dev
);
2772 input_report_key(tpd
->dev
, KEY_POWER
, 0);
2773 input_sync(tpd
->dev
);
2776 gtp_i2c_write(i2c_client_point
, doze_buf
, 3);
2778 else if (0xBB == doze_buf
[2])
2780 GTP_INFO("Backward slide to light up the screen!");
2781 doze_status
= DOZE_WAKEUP
;
2782 input_report_key(tpd
->dev
, KEY_POWER
, 1);
2783 input_sync(tpd
->dev
);
2784 input_report_key(tpd
->dev
, KEY_POWER
, 0);
2785 input_sync(tpd
->dev
);
2788 gtp_i2c_write(i2c_client_point
, doze_buf
, 3);
2791 else if (0xC0 == (doze_buf
[2] & 0xC0)) // double click wakeup
2793 GTP_INFO("Double click to light up the screen!");
2794 doze_status
= DOZE_WAKEUP
;
2795 input_report_key(tpd
->dev
, KEY_POWER
, 1);
2796 input_sync(tpd
->dev
);
2797 input_report_key(tpd
->dev
, KEY_POWER
, 0);
2798 input_sync(tpd
->dev
);
2801 gtp_i2c_write(i2c_client_point
, doze_buf
, 3);
2805 gtp_enter_doze(i2c_client_point
);
2811 if(tpd_halt
||(is_reseting
== 1) || (load_fw_process
== 1))
2813 //mutex_unlock(&i2c_access);
2814 GTP_ERROR("return for interrupt after suspend... ");
2815 goto exit_work_func
;
2817 ret
= gtp_i2c_read(i2c_client_point
, point_data
, 12);
2820 GTP_ERROR("I2C transfer error. errno:%d\n ", ret
);
2821 goto exit_work_func
;
2823 finger
= point_data
[GTP_ADDR_LENGTH
];
2825 #if GTP_COMPATIBLE_MODE
2826 if ((finger
== 0x00) && (CHIP_TYPE_GT9F
== gtp_chip_type
))
2828 ret
= gtp_i2c_read(i2c_client_point
, rqst_data
, 3);
2832 GTP_ERROR("I2C transfer error. errno:%d\n ", ret
);
2833 goto exit_work_func
;
2835 switch(rqst_data
[2]&0x0F)
2837 case GTP_RQST_BAK_REF
:
2838 GTP_INFO("Request Ref.");
2839 ret
= gtp_bak_ref_proc(i2c_client_point
, GTP_BAK_REF_SEND
);
2842 GTP_INFO("Send ref success.");
2843 rqst_data
[2] = GTP_RQST_RESPONDED
;
2844 gtp_i2c_write(i2c_client_point
, rqst_data
, 3);
2846 goto exit_work_func
;
2847 case GTP_RQST_CONFIG
:
2848 GTP_INFO("Request Config.");
2849 ret
= gtp_send_cfg(i2c_client_point
);
2852 GTP_ERROR("Send config error.");
2856 GTP_INFO("Send config success.");
2857 rqst_data
[2] = GTP_RQST_RESPONDED
;
2858 gtp_i2c_write(i2c_client_point
, rqst_data
, 3);
2860 goto exit_work_func
;
2861 case GTP_RQST_MAIN_CLOCK
:
2862 GTP_INFO("Request main clock.");
2863 rqst_processing
= 1;
2864 ret
= gtp_main_clk_proc(i2c_client_point
);
2867 GTP_INFO("Send main clk success.");
2868 rqst_data
[2] = GTP_RQST_RESPONDED
;
2869 gtp_i2c_write(i2c_client_point
, rqst_data
, 3);
2870 rqst_processing
= 0;
2872 goto exit_work_func
;
2873 case GTP_RQST_RESET
:
2874 mutex_unlock(&i2c_access
);
2875 GTP_INFO("Request Reset.");
2876 gtp_recovery_reset(i2c_client_point
);
2877 goto exit_work_func
;
2878 case GTP_RQST_HOTKNOT_CODE
:
2879 GTP_INFO("Request HotKnot Code.");
2880 gup_load_hotknot_system();
2881 goto exit_work_func
;
2888 if ((finger
& 0x80) == 0)
2890 #if HOTKNOT_BLOCK_RW
2891 if(!hotknot_paired_flag
)
2895 #ifdef CONFIG_OF_TOUCH
2896 enable_irq(touch_irq
);
2898 mt_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM
);
2901 mutex_unlock(&i2c_access
);
2902 GTP_INFO("buffer not ready");
2907 #if HOTKNOT_BLOCK_RW
2908 if(!hotknot_paired_flag
&& (finger
&0x0F))
2910 id
= point_data
[GTP_ADDR_LENGTH
+1];
2911 hn_pxy_state
= point_data
[GTP_ADDR_LENGTH
+2]&0x80;
2912 hn_pxy_state_bak
= point_data
[GTP_ADDR_LENGTH
+3]&0x80;
2913 if((32 == id
) && (0x80 == hn_pxy_state
) && (0x80 == hn_pxy_state_bak
))
2915 #ifdef HN_DBLCFM_PAIRED
2916 if(hn_paired_cnt
++ < 2)
2918 goto exit_work_func
;
2921 GTP_DEBUG("HotKnot paired!");
2922 if(wait_hotknot_state
& HN_DEVICE_PAIRED
)
2924 GTP_DEBUG("INT wakeup HN_DEVICE_PAIRED block polling waiter");
2925 got_hotknot_state
|= HN_DEVICE_PAIRED
;
2926 wake_up_interruptible(&bp_waiter
);
2928 hotknot_paired_flag
= 1;
2929 goto exit_work_func
;
2933 got_hotknot_state
&= (~HN_DEVICE_PAIRED
);
2939 if(hotknot_paired_flag
)
2941 ret
= gtp_i2c_read(i2c_client_point
, hn_state_buf
, 6);
2945 GTP_ERROR("I2C transfer error. errno:%d\n ", ret
);
2946 goto exit_work_func
;
2949 got_hotknot_state
= 0;
2951 GTP_DEBUG("[0xAB10~0xAB13]=0x%x,0x%x,0x%x,0x%x", hn_state_buf
[GTP_ADDR_LENGTH
],
2952 hn_state_buf
[GTP_ADDR_LENGTH
+1],
2953 hn_state_buf
[GTP_ADDR_LENGTH
+2],
2954 hn_state_buf
[GTP_ADDR_LENGTH
+3]);
2956 if(wait_hotknot_state
& HN_MASTER_SEND
)
2958 if((0x03 == hn_state_buf
[GTP_ADDR_LENGTH
]) ||
2959 (0x04 == hn_state_buf
[GTP_ADDR_LENGTH
]) ||
2960 (0x07 == hn_state_buf
[GTP_ADDR_LENGTH
]))
2962 GTP_DEBUG("Wakeup HN_MASTER_SEND block polling waiter");
2963 got_hotknot_state
|= HN_MASTER_SEND
;
2964 got_hotknot_extra_state
= hn_state_buf
[GTP_ADDR_LENGTH
];
2965 wake_up_interruptible(&bp_waiter
);
2968 else if(wait_hotknot_state
& HN_SLAVE_RECEIVED
)
2970 if((0x03 == hn_state_buf
[GTP_ADDR_LENGTH
+1]) ||
2971 (0x04 == hn_state_buf
[GTP_ADDR_LENGTH
+1]) ||
2972 (0x07 == hn_state_buf
[GTP_ADDR_LENGTH
+1]))
2974 GTP_DEBUG("Wakeup HN_SLAVE_RECEIVED block polling waiter:0x%x", hn_state_buf
[GTP_ADDR_LENGTH
+1]);
2975 got_hotknot_state
|= HN_SLAVE_RECEIVED
;
2976 got_hotknot_extra_state
= hn_state_buf
[GTP_ADDR_LENGTH
+1];
2977 wake_up_interruptible(&bp_waiter
);
2980 else if(wait_hotknot_state
& HN_MASTER_DEPARTED
)
2982 if(0x07 == hn_state_buf
[GTP_ADDR_LENGTH
])
2984 GTP_DEBUG("Wakeup HN_MASTER_DEPARTED block polling waiter");
2985 got_hotknot_state
|= HN_MASTER_DEPARTED
;
2986 wake_up_interruptible(&bp_waiter
);
2989 else if(wait_hotknot_state
& HN_SLAVE_DEPARTED
)
2991 if(0x07 == hn_state_buf
[GTP_ADDR_LENGTH
+1])
2993 GTP_DEBUG("Wakeup HN_SLAVE_DEPARTED block polling waiter");
2994 got_hotknot_state
|= HN_SLAVE_DEPARTED
;
2995 wake_up_interruptible(&bp_waiter
);
3002 #ifdef TPD_PROXIMITY
3003 if (tpd_proximity_flag
== 1)
3005 proximity_status
= point_data
[GTP_ADDR_LENGTH
];
3006 GTP_DEBUG("REG INDEX[0x814E]:0x%02X\n", proximity_status
);
3008 if (proximity_status
& 0x60) //proximity or large touch detect,enable hwm_sensor.
3010 tpd_proximity_detect
= 0;
3011 //sensor_data.values[0] = 0;
3015 tpd_proximity_detect
= 1;
3016 //sensor_data.values[0] = 1;
3020 GTP_DEBUG(" ps change\n");
3021 GTP_DEBUG("PROXIMITY STATUS:0x%02X\n", tpd_proximity_detect
);
3022 //map and store data to hwm_sensor_data
3023 sensor_data
.values
[0] = tpd_get_ps_value();
3024 sensor_data
.value_divide
= 1;
3025 sensor_data
.status
= SENSOR_STATUS_ACCURACY_MEDIUM
;
3026 //report to the up-layer
3027 ret
= hwmsen_get_interrupt_data(ID_PROXIMITY
, &sensor_data
);
3031 GTP_ERROR("Call hwmsen_get_interrupt_data fail = %d\n", err
);
3037 touch_num
= finger
& 0x0f;
3039 if (touch_num
> GTP_MAX_TOUCH
)
3041 GTP_ERROR("Bad number of fingers!");
3042 goto exit_work_func
;
3047 u8 buf
[8 * GTP_MAX_TOUCH
] = {(GTP_READ_COOR_ADDR
+ 10) >> 8, (GTP_READ_COOR_ADDR
+ 10) & 0xff};
3049 ret
= gtp_i2c_read(i2c_client_point
, buf
, 2 + 8 * (touch_num
- 1));
3050 memcpy(&point_data
[12], &buf
[2], 8 * (touch_num
- 1));
3053 #if GTP_HAVE_TOUCH_KEY
3054 key_value
= point_data
[3 + 8 * touch_num
];
3056 if (key_value
|| pre_key
)
3058 for (i
= 0; i
< TPD_KEY_COUNT
; i
++)
3060 //input_report_key(tpd->dev, touch_key_array[i], key_value & (0x01 << i));
3061 if( key_value
&(0x01<<i
) ) //key=1 menu ;key=2 home; key =4 back;
3063 input_x
=touch_key_point_maping_array
[i
].point_x
;
3064 input_y
= touch_key_point_maping_array
[i
].point_y
;
3065 GTP_DEBUG("button =%d %d",input_x
,input_y
);
3067 tpd_down( input_x
, input_y
, 0, 0);
3071 if((pre_key
!=0)&&(key_value
==0))
3081 pre_key
= key_value
;
3083 GTP_DEBUG("pre_touch:%02x, finger:%02x.", pre_touch
, finger
);
3087 for (i
= 0; i
< touch_num
; i
++)
3089 coor_data
= &point_data
[i
* 8 + 3];
3091 id
= coor_data
[0] & 0x0F;
3092 input_x
= coor_data
[1] | coor_data
[2] << 8;
3093 input_y
= coor_data
[3] | coor_data
[4] << 8;
3094 input_w
= coor_data
[5] | coor_data
[6] << 8;
3096 input_x
= TPD_WARP_X(abs_x_max
, input_x
);
3097 input_y
= TPD_WARP_Y(abs_y_max
, input_y
);
3101 if ((id
& 0x80)) // pen/stylus is activated
3103 GTP_DEBUG("Pen touch DOWN!");
3104 input_report_key(tpd
->dev
, BTN_TOOL_PEN
, 1);
3109 GTP_DEBUG(" %d)(%d, %d)[%d]", id
, input_x
, input_y
, input_w
);
3110 tpd_down(input_x
, input_y
, input_w
, id
);
3118 GTP_DEBUG("Pen touch UP!");
3119 input_report_key(tpd
->dev
, BTN_TOOL_PEN
, 0);
3123 GTP_DEBUG("Touch Release!");
3128 GTP_DEBUG("Additional Eint!");
3130 pre_touch
= touch_num
;
3132 if (tpd
!= NULL
&& tpd
->dev
!= NULL
)
3134 input_sync(tpd
->dev
);
3139 if (!gtp_rawdiff_mode
)
3141 ret
= gtp_i2c_write(i2c_client_point
, end_cmd
, 3);
3145 GTP_INFO("I2C write end_cmd error!");
3149 #ifdef CONFIG_OF_TOUCH
3150 enable_irq(touch_irq
);
3152 mt_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM
);
3154 mutex_unlock(&i2c_access
);
3156 } while (!kthread_should_stop());
3161 static int tpd_local_init(void)
3164 clk_tick_cnt
= 2 * HZ
; // HZ: clock ticks in 1 second generated by system
3165 GTP_DEBUG("Clock ticks for an esd cycle: %d", clk_tick_cnt
);
3166 INIT_DELAYED_WORK(>p_esd_check_work
, gtp_esd_check_func
);
3167 gtp_esd_check_workqueue
= create_workqueue("gtp_esd_check");
3168 spin_lock_init(&esd_lock
); // 2.6.39 & later
3169 // esd_lock = SPIN_LOCK_UNLOCKED; // 2.6.39 & before
3172 #if GTP_SUPPORT_I2C_DMA
3173 tpd
->dev
->dev
.coherent_dma_mask
= DMA_BIT_MASK(32);
3174 gpDMABuf_va
= (u8
*)dma_alloc_coherent(&tpd
->dev
->dev
, GTP_DMA_MAX_TRANSACTION_LENGTH
, &gpDMABuf_pa
, GFP_KERNEL
);
3176 GTP_INFO("[Error] Allocate DMA I2C Buffer failed!\n");
3178 memset(gpDMABuf_va
, 0, GTP_DMA_MAX_TRANSACTION_LENGTH
);
3180 if (i2c_add_driver(&tpd_i2c_driver
) != 0)
3182 GTP_INFO("unable to add i2c driver.\n");
3186 if (tpd_load_status
== 0) //if(tpd_load_status == 0) // disable auto load touch driver for linux3.0 porting
3188 GTP_INFO("add error touch panel driver.\n");
3189 i2c_del_driver(&tpd_i2c_driver
);
3192 input_set_abs_params(tpd
->dev
, ABS_MT_TRACKING_ID
, 0, (GTP_MAX_TOUCH
-1), 0, 0);
3193 #ifdef TPD_HAVE_BUTTON
3194 tpd_button_setting(TPD_KEY_COUNT
, tpd_keys_local
, tpd_keys_dim_local
);// initialize tpd button data
3197 #if (defined(TPD_WARP_START) && defined(TPD_WARP_END))
3199 memcpy(tpd_wb_start
, tpd_wb_start_local
, TPD_WARP_CNT
* 4);
3200 memcpy(tpd_wb_end
, tpd_wb_start_local
, TPD_WARP_CNT
* 4);
3203 #if (defined(TPD_HAVE_CALIBRATION) && !defined(TPD_CUSTOM_CALIBRATION))
3204 memcpy(tpd_calmat
, tpd_def_calmat_local
, 8 * 4);
3205 memcpy(tpd_def_calmat
, tpd_def_calmat_local
, 8 * 4);
3208 // set vendor string
3209 tpd
->dev
->id
.vendor
= 0x00;
3210 tpd
->dev
->id
.product
= tpd_info
.pid
;
3211 tpd
->dev
->id
.version
= tpd_info
.vid
;
3213 GTP_INFO("end %s, %d\n", __FUNCTION__
, __LINE__
);
3219 #if GTP_SLIDE_WAKEUP
3220 static s8
gtp_enter_doze(struct i2c_client
*client
)
3224 u8 i2c_control_buf
[3] = {(u8
)(GTP_REG_SLEEP
>> 8), (u8
)GTP_REG_SLEEP
, 8};
3227 #if GTP_DBL_CLK_WAKEUP
3228 i2c_control_buf
[2] = 0x09;
3231 GTP_DEBUG("entering doze mode...");
3234 i2c_control_buf
[0] = 0x80;
3235 i2c_control_buf
[1] = 0x46;
3236 ret
= gtp_i2c_write(client
, i2c_control_buf
, 3);
3239 GTP_DEBUG("failed to set doze flag into 0x8046, %d", retry
);
3242 i2c_control_buf
[0] = 0x80;
3243 i2c_control_buf
[1] = 0x40;
3244 ret
= gtp_i2c_write(client
, i2c_control_buf
, 3);
3247 doze_status
= DOZE_ENABLED
;
3248 GTP_DEBUG("GTP has been working in doze mode!");
3253 GTP_ERROR("GTP send doze cmd failed.");
3258 /*******************************************************
3260 Eter sleep function.
3266 Executive outcomes.0--success,non-0--fail.
3267 *******************************************************/
3268 static s8
gtp_enter_sleep(struct i2c_client
*client
)
3270 #if GTP_COMPATIBLE_MODE
3271 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
3273 u8 i2c_status_buf
[3] = {0x80, 0x44, 0x00};
3276 ret
= gtp_i2c_read(client
, i2c_status_buf
, 3);
3279 GTP_ERROR("[gtp_enter_sleep]Read ref status reg error.");
3282 if (i2c_status_buf
[2] & 0x80)
3285 ret
= gtp_bak_ref_proc(client
, GTP_BAK_REF_STORE
);
3288 GTP_ERROR("[gtp_enter_sleep]Store bak ref failed.");
3294 #if GTP_POWER_CTRL_SLEEP
3296 GTP_GPIO_OUTPUT(GTP_RST_PORT
, 0);
3297 GTP_GPIO_OUTPUT(GTP_INT_PORT
, 0);
3300 #if 0 //ifdef MT6573
3301 mt_set_gpio_mode(GPIO_CTP_EN_PIN
, GPIO_CTP_EN_PIN_M_GPIO
);
3302 mt_set_gpio_dir(GPIO_CTP_EN_PIN
, GPIO_DIR_OUT
);
3303 mt_set_gpio_out(GPIO_CTP_EN_PIN
, GPIO_OUT_ZERO
);
3305 #else // ( defined(MT6575) || defined(MT6577) || defined(MT6589) )
3307 #ifdef TPD_POWER_SOURCE_1800
3308 hwPowerDown(TPD_POWER_SOURCE_1800
, "TP");
3311 #ifdef TPD_POWER_SOURCE_CUSTOM
3312 hwPowerDown(TPD_POWER_SOURCE_CUSTOM
, "TP");
3314 hwPowerDown(MT65XX_POWER_LDO_VGP2
, "TP");
3318 GTP_INFO("GTP enter sleep by poweroff!");
3325 u8 i2c_control_buf
[3] = {(u8
)(GTP_REG_SLEEP
>> 8), (u8
)GTP_REG_SLEEP
, 5};
3328 GTP_GPIO_OUTPUT(GTP_INT_PORT
, 0);
3330 //i2c_control_buf[2] = 0x08; // for double system
3334 ret
= gtp_i2c_write(client
, i2c_control_buf
, 3);
3338 GTP_INFO("GTP enter sleep!");
3346 GTP_ERROR("GTP send sleep cmd failed.");
3353 /*******************************************************
3355 Wakeup from sleep mode Function.
3361 Executive outcomes.0--success,non-0--fail.
3362 *******************************************************/
3363 static s8
gtp_wakeup_sleep(struct i2c_client
*client
)
3368 GTP_DEBUG("GTP wakeup begin.");
3370 #if (GTP_POWER_CTRL_SLEEP)
3372 #if GTP_COMPATIBLE_MODE
3373 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
3375 force_reset_guitar();
3376 GTP_INFO("Esd recovery wakeup.");
3383 ret
= tpd_power_on(client
);
3387 GTP_ERROR("I2C Power on ERROR!");
3390 GTP_INFO("Ic wakeup by poweron");
3395 #if GTP_COMPATIBLE_MODE
3396 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
3398 u8 opr_buf
[2] = {0};
3400 while (retry
++ < 10)
3402 GTP_GPIO_OUTPUT(GTP_INT_PORT
, 1);
3405 ret
= gtp_i2c_test(client
);
3411 ret
= i2c_write_bytes(client
, 0x4180, opr_buf
, 1);
3414 GTP_DEBUG("Hold ss51 & dsp I2C error,retry:%d", retry
);
3420 ret
= i2c_read_bytes(client
, 0x4180, opr_buf
, 1);
3423 GTP_DEBUG("confirm ss51 & dsp hold, I2C error,retry:%d", retry
);
3426 if (0x0C != opr_buf
[0])
3428 GTP_DEBUG("ss51 & dsp not hold, val: %d, retry: %d", opr_buf
[0], retry
);
3431 GTP_DEBUG("ss51 & dsp has been hold");
3433 ret
= gtp_fw_startup(client
);
3436 GTP_ERROR("[gtp_wakeup_sleep]Startup fw failed.");
3439 GTP_INFO("flashless wakeup sleep success");
3442 force_reset_guitar();
3446 GTP_ERROR("wakeup retry timeout, process esd reset");
3447 force_reset_guitar();
3449 GTP_ERROR("GTP wakeup sleep failed.");
3453 while (retry
++ < 10)
3455 #if GTP_SLIDE_WAKEUP
3456 if (DOZE_WAKEUP
!= doze_status
)
3458 GTP_DEBUG("power wakeup, reset guitar");
3459 doze_status
= DOZE_DISABLED
;
3461 #ifdef CONFIG_OF_TOUCH
3462 disable_irq(touch_irq
);
3464 mt_eint_mask(CUST_EINT_TOUCH_PANEL_NUM
);
3467 gtp_reset_guitar(client
, 20);
3469 #ifdef CONFIG_OF_TOUCH
3470 enable_irq(touch_irq
);
3472 mt_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM
);
3478 GTP_DEBUG("slide(double click) wakeup, no reset guitar");
3479 doze_status
= DOZE_DISABLED
;
3481 gtp_init_ext_watchdog(client
);
3485 // if (chip_gt9xxs == 1)
3487 // gtp_reset_guitar(client, 10);
3491 // GTP_GPIO_OUTPUT(GTP_INT_PORT, 1);
3495 //GTP_GPIO_AS_INT(GTP_INT_PORT);
3496 gtp_reset_guitar(client
, 20); // for double-system, reset to default system
3501 ret
= gtp_i2c_test(client
);
3505 GTP_INFO("GTP wakeup sleep.");
3506 #if (!GTP_SLIDE_WAKEUP)
3507 if (chip_gt9xxs
== 0)
3511 gtp_init_ext_watchdog(client
);
3518 gtp_reset_guitar(client
, 20);
3521 GTP_ERROR("GTP wakeup sleep failed.");
3525 /* Function to manage low power suspend */
3526 static void tpd_suspend(struct early_suspend
*h
)
3529 u8 buf
[3] = {0x81, 0xaa, 0};
3531 #ifdef TPD_PROXIMITY
3532 if (tpd_proximity_flag
== 1)
3538 #if HOTKNOT_BLOCK_RW
3539 if(hotknot_paired_flag
)
3545 mutex_lock(&i2c_access
);
3547 gtp_i2c_read(i2c_client_point
,buf
,sizeof(buf
));
3550 mutex_unlock(&i2c_access
);
3551 GTP_INFO("GTP early suspend pair sucess");
3556 mutex_unlock(&i2c_access
);
3559 cancel_delayed_work_sync(>p_esd_check_work
);
3562 #ifdef GTP_CHARGER_DETECT
3563 cancel_delayed_work_sync(>p_charger_check_work
);
3566 mutex_lock(&i2c_access
);
3568 #if GTP_SLIDE_WAKEUP
3569 ret
= gtp_enter_doze(i2c_client_point
);
3572 #ifdef CONFIG_OF_TOUCH
3573 disable_irq(touch_irq
);
3575 mt_eint_mask(CUST_EINT_TOUCH_PANEL_NUM
);
3578 ret
= gtp_enter_sleep(i2c_client_point
);
3581 GTP_ERROR("GTP early suspend failed.");
3584 mutex_unlock(&i2c_access
);
3589 /* Function to manage power-on resume */
3590 static void tpd_resume(struct early_suspend
*h
)
3594 printk("mtk-tpd: %s start\n", __FUNCTION__
);
3595 #ifdef TPD_PROXIMITY
3597 if (tpd_proximity_flag
== 1)
3603 #if HOTKNOT_BLOCK_RW
3604 if(hotknot_paired_flag
)
3609 //if((is_reseting == 0) || (load_fw_process == 0))
3610 if(load_fw_process
== 0)
3612 ret
= gtp_wakeup_sleep(i2c_client_point
);
3616 GTP_ERROR("GTP later resume failed.");
3620 #if GTP_COMPATIBLE_MODE
3621 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
3628 //gtp_send_cfg(i2c_client_point);
3631 #if GTP_CHARGER_SWITCH
3632 if (g_bat_init_flag
) gtp_charger_switch(1); // force update
3635 #if GTP_SLIDE_WAKEUP
3636 doze_status
= DOZE_DISABLED
;
3638 mutex_lock(&i2c_access
);
3640 //set again for IPO-H resume
3642 #ifdef CONFIG_OF_TOUCH
3643 enable_irq(touch_irq
);
3645 mt_eint_registration(CUST_EINT_TOUCH_PANEL_NUM
, gtp_eint_trigger_type
, tpd_eint_interrupt_handler
, 1);
3646 mt_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM
);
3649 mutex_unlock(&i2c_access
);
3653 queue_delayed_work(gtp_esd_check_workqueue
, >p_esd_check_work
, clk_tick_cnt
);
3656 #ifdef GTP_CHARGER_DETECT
3657 queue_delayed_work(gtp_charger_check_workqueue
, >p_charger_check_work
, clk_tick_cnt
);
3659 printk("mtk-tpd: %s end\n", __FUNCTION__
);
3662 static struct tpd_driver_t tpd_device_driver
=
3664 .tpd_device_name
= "gt9xx",
3665 .tpd_local_init
= tpd_local_init
,
3666 .suspend
= tpd_suspend
,
3667 .resume
= tpd_resume
,
3668 #ifdef TPD_HAVE_BUTTON
3669 .tpd_have_button
= 1,
3671 .tpd_have_button
= 0,
3675 static void tpd_off(void)
3678 #ifdef TPD_POWER_SOURCE_CUSTOM
3679 hwPowerDown(TPD_POWER_SOURCE_CUSTOM
, "TP");
3681 hwPowerDown(MT65XX_POWER_LDO_VGP2
, "TP");
3683 #ifdef TPD_POWER_SOURCE_1800
3684 hwPowerDown(TPD_POWER_SOURCE_1800
, "TP");
3686 GTP_INFO("GTP enter sleep!");
3690 #ifdef CONFIG_OF_TOUCH
3691 disable_irq(touch_irq
);
3693 mt_eint_mask(CUST_EINT_TOUCH_PANEL_NUM
);
3698 static void tpd_on(void)
3700 s32 ret
= -1, retry
= 0;
3704 ret
= tpd_power_on(i2c_client_point
);
3708 GTP_ERROR("I2C Power on ERROR!");
3711 ret
= gtp_send_cfg(i2c_client_point
);
3715 GTP_DEBUG("Wakeup sleep send config success.");
3720 GTP_ERROR("GTP later resume failed.");
3723 #ifdef CONFIG_OF_TOUCH
3724 enable_irq(touch_irq
);
3726 mt_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM
);
3732 /* called when loaded into kernel */
3733 static int __init
tpd_driver_init(void)
3735 GTP_INFO("MediaTek gt91xx touch panel driver init\n");
3736 #if defined(TPD_I2C_NUMBER)
3737 i2c_register_board_info(TPD_I2C_NUMBER
, &i2c_tpd
, 1);
3739 i2c_register_board_info(0, &i2c_tpd
, 1);
3741 if (tpd_driver_add(&tpd_device_driver
) < 0)
3742 GTP_INFO("add generic driver failed\n");
3747 /* should never be called */
3748 static void __exit
tpd_driver_exit(void)
3750 GTP_INFO("MediaTek gt91xx touch panel driver exit\n");
3751 tpd_driver_remove(&tpd_device_driver
);
3754 module_init(tpd_driver_init
);
3755 module_exit(tpd_driver_exit
);