1 /* Copyright Statement:
3 * This software/firmware and related documentation ("MediaTek Software") are
4 * protected under relevant copyright laws. The information contained herein
5 * is confidential and proprietary to MediaTek Inc. and/or its licensors.
6 * Without the prior written permission of MediaTek inc. and/or its licensors,
7 * any reproduction, modification, use or disclosure of MediaTek Software,
8 * and information contained herein, in whole or in part, shall be strictly prohibited.
10 * MediaTek Inc. (C) 2012. All rights reserved.
12 * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
13 * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
14 * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
15 * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
16 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
17 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
18 * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
19 * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
20 * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
21 * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
22 * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
23 * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
24 * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
25 * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
26 * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
27 * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
28 * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
29 * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
31 * The following software/firmware and/or related documentation ("MediaTek Software")
32 * have been modified by MediaTek Inc. All revisions are subject to any receiver's
33 * applicable license agreements with MediaTek Inc.
38 * Release Date: 2013/08/28
39 * Contact: andrew@goodix.com, meta@goodix.com
42 * 1. New Heartbeat/ESD-protect Mechanism(external watchdog)
43 * 2. doze mode, sliding wakeup
44 * 3. config length verification & 3 more config groups(GT9 Sensor_ID: 0 ~ 5)
45 * 4. charger status switch
48 * 1. pen/stylus support
49 * 2. slide wakeup, new esd optimization
52 * 1. read double check & fixed config support
53 * 2. other optimizations
56 * 1. compatible with GT9XXF
60 * 1. update gt9xx_config to compatible with Linux 3.10
62 * 3. pen separate input device, active-pen button support
63 * 4. coordinates & keys optimization
64 * 5. no longer support GT915S
67 * Special edition for GT910 flashless
70 * Special edition for GT910 flashless
71 * 1. modified to support gesture wakeup module
75 #include "tpd_custom_gt9xx.h"
76 #include <asm/ptrace.h>
79 #include "cust_gpio_usage.h"
82 #include <linux/hwmsensor.h>
83 #include <linux/hwmsen_dev.h>
84 #include <linux/sensors_io.h>
87 #if GTP_SUPPORT_I2C_DMA
88 #include <linux/dma-mapping.h>
91 extern int gesture_value
;
92 extern char tpd_firmware_version_val
[5];
93 extern int tpd_config_version
;
94 extern int tpd_x_line
;
95 extern int tpd_y_line
;
96 /*[PLATFORM]-Add-BEGIN by falin.luo@tcl.com 2015/5/6*/
97 /*MMI test app read sensor id to distinguish the tp manufacturer*/
98 extern u8 tpd_sensor_id
;
99 /*[PLATFORM]-Add-END by falin.luo@tcl.com 2015/5/6*/
101 int gtp_autotool_setting
;
102 EXPORT_SYMBOL(gtp_autotool_setting
);
103 extern struct tpd_device
*tpd
;
105 static int tpd_sleep_flag
= 0;
106 static int tpd_flag
= 0;
108 static struct task_struct
*thread
= NULL
;
109 static DECLARE_WAIT_QUEUE_HEAD(waiter
);
111 #ifdef TPD_HAVE_BUTTON
112 static int tpd_keys_local
[TPD_KEY_COUNT
] = TPD_KEYS
;
113 static int tpd_keys_dim_local
[TPD_KEY_COUNT
][4] = TPD_KEYS_DIM
;
122 static DOZE_T doze_status
= DOZE_DISABLED
;
123 static s8
gtp_enter_doze(struct i2c_client
*client
);
125 #if GTP_CHARGER_SWITCH
127 #define CHR_CON0 (0xF7000000+0x2FA00)
129 extern kal_bool
upmu_is_chr_det(void);
131 static void gtp_charger_switch(s32 dir_update
);
134 #if GTP_HAVE_TOUCH_KEY
135 const u16 touch_key_array
[] = GTP_KEY_TAB
;
136 #define GTP_MAX_KEY_NUM ( sizeof( touch_key_array )/sizeof( touch_key_array[0] ) )
139 #if (defined(TPD_WARP_START) && defined(TPD_WARP_END))
140 static int tpd_wb_start_local
[TPD_WARP_CNT
] = TPD_WARP_START
;
141 static int tpd_wb_end_local
[TPD_WARP_CNT
] = TPD_WARP_END
;
144 #if (defined(TPD_HAVE_CALIBRATION) && !defined(TPD_CUSTOM_CALIBRATION))
145 //static int tpd_calmat_local[8] = TPD_CALIBRATION_MATRIX;
146 static int tpd_def_calmat_local
[8] = TPD_CALIBRATION_MATRIX
;
149 #if GTP_SUPPORT_I2C_DMA
150 s32
i2c_dma_write(struct i2c_client
*client
, u16 addr
, u8
*txbuf
, s32 len
);
151 s32
i2c_dma_read(struct i2c_client
*client
, u16 addr
, u8
*rxbuf
, s32 len
);
153 static u8
*gpDMABuf_va
= NULL
;
154 static u32 gpDMABuf_pa
= 0;
157 s32
gtp_send_cfg(struct i2c_client
*client
);
158 void gtp_reset_guitar(struct i2c_client
*client
, s32 ms
);
159 static void tpd_eint_interrupt_handler(void);
160 static int touch_event_handler(void *unused
);
161 static int tpd_i2c_probe(struct i2c_client
*client
, const struct i2c_device_id
*id
);
162 static int tpd_i2c_detect(struct i2c_client
*client
, struct i2c_board_info
*info
);
163 static int tpd_i2c_remove(struct i2c_client
*client
);
164 s32
gtp_i2c_read_dbl_check(struct i2c_client
*client
, u16 addr
, u8
*rxbuf
, int len
);
165 extern void mt_eint_unmask(unsigned int line
);
166 extern void mt_eint_mask(unsigned int line
);
168 #if GTP_CREATE_WR_NODE
169 extern s32
init_wr_node(struct i2c_client
*);
170 extern void uninit_wr_node(void);
173 #if (GTP_ESD_PROTECT || GTP_COMPATIBLE_MODE)
174 static s32
force_reset_guitar(s32
);
178 static int clk_tick_cnt
= 200;
181 extern unsigned char gtp_default_FW_fl
[];
182 static struct delayed_work gtp_esd_check_work
;
183 static struct workqueue_struct
*gtp_esd_check_workqueue
= NULL
;
184 static s32
gtp_init_ext_watchdog(struct i2c_client
*client
);
185 static void gtp_esd_check_func(struct work_struct
*);
186 void gtp_esd_switch(struct i2c_client
*client
, s32 on
);
190 #define TPD_PROXIMITY_VALID_REG 0x814E
191 #define TPD_PROXIMITY_ENABLE_REG 0x8042
192 static u8 tpd_proximity_flag
= 0;
193 static u8 tpd_proximity_detect
= 1;//0-->close ; 1--> far away
196 struct i2c_client
*i2c_client_point
= NULL
;
197 static const struct i2c_device_id tpd_i2c_id
[] = {{"gt9xx", 0}, {}};
198 static unsigned short force
[] = {0, 0xBA, I2C_CLIENT_END
, I2C_CLIENT_END
};
199 static const unsigned short *const forces
[] = { force
, NULL
};
200 //static struct i2c_client_address_data addr_data = { .forces = forces,};
201 static struct i2c_board_info __initdata i2c_tpd
= { I2C_BOARD_INFO("gt9xx", (0xBA >> 1))};
202 static struct i2c_driver tpd_i2c_driver
=
204 .probe
= tpd_i2c_probe
,
205 .remove
= tpd_i2c_remove
,
206 .detect
= tpd_i2c_detect
,
207 .driver
.name
= "gt9xx",
208 .id_table
= tpd_i2c_id
,
209 .address_list
= (const unsigned short *) forces
,
212 static u8 config
[GTP_CONFIG_MAX_LENGTH
+ GTP_ADDR_LENGTH
]
213 = {GTP_REG_CONFIG_DATA
>> 8, GTP_REG_CONFIG_DATA
& 0xff};
218 u16 pid
; //product id //
219 u16 vid
; //version id //
223 st_tpd_info tpd_info
;
227 u8 gtp_rawdiff_mode
= 0;
229 u8 grp_cfg_version
= 0;
231 u8 pnl_init_error
= 0;
234 struct input_dev
*pen_dev
;
237 #if GTP_COMPATIBLE_MODE
240 /*[PLATFORM]-Add-BEGIN by falin.luo@tcl.com 2015/4/29*/
241 /*change counter data type to u16, because GTP_CHK_FS_MNT_MAX is 300 */
242 u16 gtp_ref_retries
= 0;
243 u16 gtp_clk_retries
= 0;
244 static u16 is_data_mounted
= 0;
245 /*[PLATFORM]-Add-NED by falin.luo@tcl.com 2015/4/29*/
246 CHIP_TYPE_T gtp_chip_type
= CHIP_TYPE_GT9
;
247 u8 rqst_processing
= 0;
249 u8 after_912_1020
= 0;
252 //add by caoyang for ·À¶¶
253 //static struct timer_list buttons_timer;
254 //static DECLARE_WAIT_QUEUE_HEAD(button_waitq);
257 extern u8
gup_check_fs_mounted(char *path_name
);
258 extern u8
gup_clk_calibration(void);
259 extern int gup_reload_fw_dsp(void *dir
, u8 dwn_mode
);
260 extern s32
gup_fw_download_proc(void *dir
, u8 dwn_mode
);
261 void gtp_get_chip_type(struct i2c_client
*client
);
262 u8
gtp_fw_startup(struct i2c_client
*client
);
263 static u8
gtp_bak_ref_proc(struct i2c_client
*client
, u8 mode
);
264 static u8
gtp_main_clk_proc(struct i2c_client
*client
);
265 static void gtp_recovery_reset(struct i2c_client
*client
);
267 #if GTP_COMPATIBLE_MODE
268 u8 gtp_hopping_buf
[16] = {0};
271 #if GTP_FL_LITTLE_SYSTEM
272 u8 power_is_down
= 0;
273 u8 little_fw_mode
= 0;
274 u8 fw_block
= 0; // 0: not started, 1 ~ 11/12 ss51 seg a/b each 2K, 13: ss51 seg b, 10K/12K
275 u8 block_section
= 1; // 1 ~ 8, 2K total, 256 Bytes each
277 char symbolic_state1
[][20] = {"OTHERS", "BUFFER_FULL", "CHECK_COMPLETE", "CHECK_ERROR", "WAIT_CHECK", "OTHERS", "OTHERS", "OTHERS"};
278 char symbolic_state2
[][20] = {"OTHERS", "IS_A_SEG", "IS_B_SEG_FIRST", "IS_B_SEG_OTHER", "IS_B_SEG_LAST", "OTHERS", "OTHERS", "OTHERS"};
280 static void tpd_up(s32 x
, s32 y
, s32 id
);
281 extern u8
gup_burn_ss51_block(struct i2c_client
*client
, s32 block_section
, s32 fw_block
, u16
*fw_chksum
);
282 extern u8
gup_burn_ss51_seg_b(struct i2c_client
*client
, s32 size
, u16
*fw_chksum
);
287 /* proc file system */
288 s32
i2c_read_bytes(struct i2c_client
*client
, u16 addr
, u8
*rxbuf
, int len
);
289 s32
i2c_write_bytes(struct i2c_client
*client
, u16 addr
, u8
*txbuf
, int len
);
291 static ssize_t
gt91xx_config_read_proc(struct file
*, char __user
*, size_t, loff_t
*);
292 static ssize_t
gt91xx_config_write_proc(struct file
*, const char __user
*, size_t, loff_t
*);
294 static struct proc_dir_entry
*gt91xx_config_proc
= NULL
;
295 static const struct file_operations config_proc_ops
= {
296 .owner
= THIS_MODULE
,
297 .read
= gt91xx_config_read_proc
,
298 .write
= gt91xx_config_write_proc
,
301 #define VELOCITY_CUSTOM
302 #ifdef VELOCITY_CUSTOM
303 #include <linux/device.h>
304 #include <linux/miscdevice.h>
305 #include <asm/uaccess.h>
307 #ifndef TPD_VELOCITY_CUSTOM_X
308 #define TPD_VELOCITY_CUSTOM_X 10
310 #ifndef TPD_VELOCITY_CUSTOM_Y
311 #define TPD_VELOCITY_CUSTOM_Y 10
314 // for magnify velocity********************************************
315 #define TOUCH_IOC_MAGIC 'A'
317 #define TPD_GET_VELOCITY_CUSTOM_X _IO(TOUCH_IOC_MAGIC,0)
318 #define TPD_GET_VELOCITY_CUSTOM_Y _IO(TOUCH_IOC_MAGIC,1)
320 int g_v_magnify_x
= TPD_VELOCITY_CUSTOM_X
;
321 int g_v_magnify_y
= TPD_VELOCITY_CUSTOM_Y
;
322 static int tpd_misc_open(struct inode
*inode
, struct file
*file
)
324 return nonseekable_open(inode
, file
);
327 static int tpd_misc_release(struct inode
*inode
, struct file
*file
)
332 static long tpd_unlocked_ioctl(struct file
*file
, unsigned int cmd
,
340 if (_IOC_DIR(cmd
) & _IOC_READ
)
342 err
= !access_ok(VERIFY_WRITE
, (void __user
*)arg
, _IOC_SIZE(cmd
));
344 else if (_IOC_DIR(cmd
) & _IOC_WRITE
)
346 err
= !access_ok(VERIFY_READ
, (void __user
*)arg
, _IOC_SIZE(cmd
));
351 printk("tpd: access error: %08X, (%2d, %2d)\n", cmd
, _IOC_DIR(cmd
), _IOC_SIZE(cmd
));
357 case TPD_GET_VELOCITY_CUSTOM_X
:
358 data
= (void __user
*) arg
;
366 if (copy_to_user(data
, &g_v_magnify_x
, sizeof(g_v_magnify_x
)))
374 case TPD_GET_VELOCITY_CUSTOM_Y
:
375 data
= (void __user
*) arg
;
383 if (copy_to_user(data
, &g_v_magnify_y
, sizeof(g_v_magnify_y
)))
392 printk("tpd: unknown IOCTL: 0x%08x\n", cmd
);
402 static struct file_operations tpd_fops
=
404 // .owner = THIS_MODULE,
405 .open
= tpd_misc_open
,
406 .release
= tpd_misc_release
,
407 .unlocked_ioctl
= tpd_unlocked_ioctl
,
409 /*----------------------------------------------------------------------------*/
410 static struct miscdevice tpd_misc_device
=
412 .minor
= MISC_DYNAMIC_MINOR
,
413 .name
= "gt9xx_touch",
417 //**********************************************
420 static int tpd_i2c_detect(struct i2c_client
*client
, struct i2c_board_info
*info
)
422 strcpy(info
->type
, "mtk-tpd");
427 static s32
tpd_get_ps_value(void)
429 return tpd_proximity_detect
;
432 static s32
tpd_enable_ps(s32 enable
)
440 tpd_proximity_flag
= 1;
441 GTP_INFO("TPD proximity function to be on.");
446 tpd_proximity_flag
= 0;
447 GTP_INFO("TPD proximity function to be off.");
450 ret
= i2c_write_bytes(i2c_client_point
, TPD_PROXIMITY_ENABLE_REG
, &state
, 1);
454 GTP_ERROR("TPD %s proximity cmd failed.", state
? "enable" : "disable");
458 GTP_INFO("TPD proximity function %s success.", state
? "enable" : "disable");
462 s32
tpd_ps_operate(void *self
, u32 command
, void *buff_in
, s32 size_in
,
463 void *buff_out
, s32 size_out
, s32
*actualout
)
467 hwm_sensor_data
*sensor_data
;
472 if ((buff_in
== NULL
) || (size_in
< sizeof(int)))
474 GTP_ERROR("Set delay parameter error!");
482 if ((buff_in
== NULL
) || (size_in
< sizeof(int)))
484 GTP_ERROR("Enable sensor parameter error!");
489 value
= *(int *)buff_in
;
490 err
= tpd_enable_ps(value
);
495 case SENSOR_GET_DATA
:
496 if ((buff_out
== NULL
) || (size_out
< sizeof(hwm_sensor_data
)))
498 GTP_ERROR("Get sensor data parameter error!");
503 sensor_data
= (hwm_sensor_data
*)buff_out
;
504 sensor_data
->values
[0] = tpd_get_ps_value();
505 sensor_data
->value_divide
= 1;
506 sensor_data
->status
= SENSOR_STATUS_ACCURACY_MEDIUM
;
512 GTP_ERROR("proxmy sensor operate function no this parameter %d!\n", command
);
522 static ssize_t
gt91xx_config_read_proc(struct file
*file
, char __user
*page
, size_t size
, loff_t
*ppos
)
525 char temp_data
[GTP_CONFIG_MAX_LENGTH
+ 2] = {0};
528 if (*ppos
) // CMD call again
533 ptr
+= sprintf(ptr
, "==== GT9XX config init value====\n");
535 for (i
= 0 ; i
< GTP_CONFIG_MAX_LENGTH
; i
++)
537 ptr
+= sprintf(ptr
, "0x%02X ", config
[i
+ 2]);
540 ptr
+= sprintf(ptr
, "\n");
543 ptr
+= sprintf(ptr
, "\n");
545 ptr
+= sprintf(ptr
, "==== GT9XX config real value====\n");
546 i2c_read_bytes(i2c_client_point
, GTP_REG_CONFIG_DATA
, temp_data
, GTP_CONFIG_MAX_LENGTH
);
548 for (i
= 0 ; i
< GTP_CONFIG_MAX_LENGTH
; i
++)
550 ptr
+= sprintf(ptr
, "0x%02X ", temp_data
[i
]);
553 ptr
+= sprintf(ptr
, "\n");
559 static ssize_t
gt91xx_config_write_proc(struct file
*filp
, const char __user
*buffer
, size_t count
, loff_t
*off
)
563 GTP_DEBUG("write count %d\n", count
);
565 if (count
> GTP_CONFIG_MAX_LENGTH
)
567 GTP_ERROR("size not match [%d:%d]\n", GTP_CONFIG_MAX_LENGTH
, count
);
571 if (copy_from_user(&config
[2], buffer
, count
))
573 GTP_ERROR("copy from user fail\n");
577 ret
= gtp_send_cfg(i2c_client_point
);
578 abs_x_max
= (config
[RESOLUTION_LOC
+ 1] << 8) + config
[RESOLUTION_LOC
];
579 abs_y_max
= (config
[RESOLUTION_LOC
+ 3] << 8) + config
[RESOLUTION_LOC
+ 2];
580 int_type
= (config
[TRIGGER_LOC
]) & 0x03;
584 GTP_ERROR("send config failed.");
590 #if GTP_SUPPORT_I2C_DMA
591 s32
i2c_dma_read(struct i2c_client
*client
, u16 addr
, u8
*rxbuf
, s32 len
)
597 struct i2c_msg msg
[2] =
600 .addr
= (client
->addr
& I2C_MASK_FLAG
),
604 .timing
= I2C_MASTER_CLOCK
607 .addr
= (client
->addr
& I2C_MASK_FLAG
),
608 .ext_flag
= (client
->ext_flag
| I2C_ENEXT_FLAG
| I2C_DMA_FLAG
),
610 .buf
= (u8
*)gpDMABuf_pa
,
612 .timing
= I2C_MASTER_CLOCK
616 buffer
[0] = (addr
>> 8) & 0xFF;
617 buffer
[1] = addr
& 0xFF;
622 //GTP_DEBUG("dma i2c read: 0x%04X, %d bytes(s)", addr, len);
623 for (retry
= 0; retry
< 5; ++retry
)
625 ret
= i2c_transfer(client
->adapter
, &msg
[0], 2);
630 memcpy(rxbuf
, gpDMABuf_va
, len
);
633 GTP_ERROR("Dma I2C Read Error: 0x%04X, %d byte(s), err-code: %d", addr
, len
, ret
);
638 s32
i2c_dma_write(struct i2c_client
*client
, u16 addr
, u8
*txbuf
, s32 len
)
642 u8
*wr_buf
= gpDMABuf_va
;
646 .addr
= (client
->addr
& I2C_MASK_FLAG
),
647 .ext_flag
= (client
->ext_flag
| I2C_ENEXT_FLAG
| I2C_DMA_FLAG
),
649 .buf
= (u8
*)gpDMABuf_pa
,
651 .timing
= I2C_MASTER_CLOCK
654 wr_buf
[0] = (u8
)((addr
>> 8) & 0xFF);
655 wr_buf
[1] = (u8
)(addr
& 0xFF);
660 //GTP_DEBUG("dma i2c write: 0x%04X, %d bytes(s)", addr, len);
661 memcpy(wr_buf
+2, txbuf
, len
);
662 for (retry
= 0; retry
< 5; ++retry
)
664 ret
= i2c_transfer(client
->adapter
, &msg
, 1);
671 GTP_ERROR("Dma I2C Write Error: 0x%04X, %d byte(s), err-code: %d", addr
, len
, ret
);
675 s32
i2c_read_bytes_dma(struct i2c_client
*client
, u16 addr
, u8
*rxbuf
, s32 len
)
682 //GTP_DEBUG("Read bytes dma: 0x%04X, %d byte(s)", addr, len);
685 if (left
> GTP_DMA_MAX_TRANSACTION_LENGTH
)
687 read_len
= GTP_DMA_MAX_TRANSACTION_LENGTH
;
693 ret
= i2c_dma_read(client
, addr
, rd_buf
, read_len
);
696 GTP_ERROR("dma read failed");
707 s32
i2c_write_bytes_dma(struct i2c_client
*client
, u16 addr
, u8
*txbuf
, s32 len
)
715 //GTP_DEBUG("Write bytes dma: 0x%04X, %d byte(s)", addr, len);
718 if (left
> GTP_DMA_MAX_I2C_TRANSFER_SIZE
)
720 write_len
= GTP_DMA_MAX_I2C_TRANSFER_SIZE
;
726 ret
= i2c_dma_write(client
, addr
, wr_buf
, write_len
);
730 GTP_ERROR("dma i2c write failed!");
743 int i2c_read_bytes_non_dma(struct i2c_client
*client
, u16 addr
, u8
*rxbuf
, int len
)
745 u8 buffer
[GTP_ADDR_LENGTH
];
750 struct i2c_msg msg
[2] =
753 //.addr = ((client->addr &I2C_MASK_FLAG) | (I2C_ENEXT_FLAG)),
754 .addr
= ((client
->addr
&I2C_MASK_FLAG
) | (I2C_PUSHPULL_FLAG
)),
757 .len
= GTP_ADDR_LENGTH
,
758 .timing
= I2C_MASTER_CLOCK
761 //.addr = ((client->addr &I2C_MASK_FLAG) | (I2C_ENEXT_FLAG)),
762 .addr
= ((client
->addr
&I2C_MASK_FLAG
) | (I2C_PUSHPULL_FLAG
)),
764 .timing
= I2C_MASTER_CLOCK
771 //GTP_DEBUG("i2c_read_bytes to device %02X address %04X len %d\n", client->addr, addr, len);
775 buffer
[0] = ((addr
+ offset
) >> 8) & 0xFF;
776 buffer
[1] = (addr
+ offset
) & 0xFF;
778 msg
[1].buf
= &rxbuf
[offset
];
780 if (left
> MAX_TRANSACTION_LENGTH
)
782 msg
[1].len
= MAX_TRANSACTION_LENGTH
;
783 left
-= MAX_TRANSACTION_LENGTH
;
784 offset
+= MAX_TRANSACTION_LENGTH
;
794 while (i2c_transfer(client
->adapter
, &msg
[0], 2) != 2)
801 GTP_ERROR("I2C read 0x%X length=%d failed\n", addr
+ offset
, len
);
811 int i2c_read_bytes(struct i2c_client
*client
, u16 addr
, u8
*rxbuf
, int len
)
813 #if GTP_SUPPORT_I2C_DMA
814 return i2c_read_bytes_dma(client
, addr
, rxbuf
, len
);
816 return i2c_read_bytes_non_dma(client
, addr
, rxbuf
, len
);
820 s32
gtp_i2c_read(struct i2c_client
*client
, u8
*buf
, s32 len
)
823 u16 addr
= (buf
[0] << 8) + buf
[1];
825 ret
= i2c_read_bytes_non_dma(client
, addr
, &buf
[2], len
- 2);
833 //#if GTP_GESTURE_WAKEUP
834 if(gesture_value
> 0){
835 if (DOZE_ENABLED
== doze_status
)
841 #if GTP_COMPATIBLE_MODE
842 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
844 #if GTP_FL_LITTLE_SYSTEM
848 GTP_INFO("Little fw enabled, no esd reset.");
853 gtp_recovery_reset(client
);
859 gtp_reset_guitar(client
, 20);
866 s32
gtp_i2c_read_dbl_check(struct i2c_client
*client
, u16 addr
, u8
*rxbuf
, int len
)
869 u8 confirm_buf
[16] = {0};
874 memset(buf
, 0xAA, 16);
875 buf
[0] = (u8
)(addr
>> 8);
876 buf
[1] = (u8
)(addr
& 0xFF);
877 gtp_i2c_read(client
, buf
, len
+ 2);
879 memset(confirm_buf
, 0xAB, 16);
880 confirm_buf
[0] = (u8
)(addr
>> 8);
881 confirm_buf
[1] = (u8
)(addr
& 0xFF);
882 gtp_i2c_read(client
, confirm_buf
, len
+ 2);
884 if (!memcmp(buf
, confirm_buf
, len
+2))
886 memcpy(rxbuf
, confirm_buf
+2, len
);
890 GTP_ERROR("i2c read 0x%04X, %d bytes, double check failed!", addr
, len
);
894 int i2c_write_bytes_non_dma(struct i2c_client
*client
, u16 addr
, u8
*txbuf
, int len
)
896 u8 buffer
[MAX_TRANSACTION_LENGTH
];
903 //.addr = ((client->addr &I2C_MASK_FLAG) | (I2C_ENEXT_FLAG)),
904 .addr
= ((client
->addr
&I2C_MASK_FLAG
) | (I2C_PUSHPULL_FLAG
)),
907 .timing
= I2C_MASTER_CLOCK
,
914 //GTP_DEBUG("i2c_write_bytes to device %02X address %04X len %d\n", client->addr, addr, len);
920 buffer
[0] = ((addr
+ offset
) >> 8) & 0xFF;
921 buffer
[1] = (addr
+ offset
) & 0xFF;
923 if (left
> MAX_I2C_TRANSFER_SIZE
)
925 memcpy(&buffer
[GTP_ADDR_LENGTH
], &txbuf
[offset
], MAX_I2C_TRANSFER_SIZE
);
926 msg
.len
= MAX_TRANSACTION_LENGTH
;
927 left
-= MAX_I2C_TRANSFER_SIZE
;
928 offset
+= MAX_I2C_TRANSFER_SIZE
;
932 memcpy(&buffer
[GTP_ADDR_LENGTH
], &txbuf
[offset
], left
);
933 msg
.len
= left
+ GTP_ADDR_LENGTH
;
937 //GTP_DEBUG("byte left %d offset %d\n", left, offset);
939 while (i2c_transfer(client
->adapter
, &msg
, 1) != 1)
947 GTP_ERROR("I2C write 0x%X%X length=%d failed\n", buffer
[0], buffer
[1], len
);
956 int i2c_write_bytes(struct i2c_client
*client
, u16 addr
, u8
*txbuf
, int len
)
958 #if GTP_SUPPORT_I2C_DMA
959 return i2c_write_bytes_dma(client
, addr
, txbuf
, len
);
961 return i2c_write_bytes_non_dma(client
, addr
, txbuf
, len
);
965 s32
gtp_i2c_write(struct i2c_client
*client
, u8
*buf
, s32 len
)
968 u16 addr
= (buf
[0] << 8) + buf
[1];
970 ret
= i2c_write_bytes_non_dma(client
, addr
, &buf
[2], len
- 2);
978 //#if GTP_GESTURE_WAKEUP
979 if(gesture_value
> 0){
980 if (DOZE_ENABLED
== doze_status
)
986 #if GTP_COMPATIBLE_MODE
987 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
989 #if GTP_FL_LITTLE_SYSTEM
993 GTP_INFO("Little fw enabled, no esd reset.");
998 gtp_recovery_reset(client
);
1004 gtp_reset_guitar(client
, 20);
1012 /*******************************************************
1014 Send config Function.
1020 Executive outcomes.0--success,non-0--fail.
1021 *******************************************************/
1022 s32
gtp_send_cfg(struct i2c_client
*client
)
1026 #if GTP_DRIVER_SEND_CFG
1030 GTP_INFO("Ic fixed config, no config sent!");
1033 else if (pnl_init_error
)
1035 GTP_INFO("Error occurred in init_panel, no config sent!");
1039 GTP_INFO("Driver Send Config");
1040 for (retry
= 0; retry
< 5; retry
++)
1042 ret
= gtp_i2c_write(client
, config
, GTP_CONFIG_MAX_LENGTH
+ GTP_ADDR_LENGTH
);
1054 /*******************************************************
1056 Read goodix touchscreen version function.
1059 client: i2c client struct.
1060 version:address to store version info
1063 Executive outcomes.0---succeed.
1064 *******************************************************/
1065 s32
gtp_read_version(struct i2c_client
*client
, u16
*version
)
1069 u8 buf
[8] = {GTP_REG_VERSION
>> 8, GTP_REG_VERSION
& 0xff};
1073 ret
= gtp_i2c_read(client
, buf
, sizeof(buf
));
1077 GTP_ERROR("GTP read version failed");
1083 *version
= (buf
[7] << 8) | buf
[6];
1086 tpd_info
.vid
= *version
;
1087 tpd_info
.pid
= 0x00;
1089 for (i
= 0; i
< 4; i
++)
1091 if (buf
[i
+ 2] < 0x30)break;
1093 tpd_info
.pid
|= ((buf
[i
+ 2] - 0x30) << ((3 - i
) * 4));
1098 GTP_INFO("IC VERSION: %c%c%c_%02x%02x",
1099 buf
[2], buf
[3], buf
[4], buf
[7], buf
[6]);
1103 GTP_INFO("IC VERSION:%c%c%c%c_%02x%02x",
1104 buf
[2], buf
[3], buf
[4], buf
[5], buf
[7], buf
[6]);
1106 sprintf(tpd_firmware_version_val
,"%02x%02x",buf
[7], buf
[6]);
1107 tpd_firmware_version_val
[4] = '\0';
1108 printk(KERN_ERR
"caoyang test tpd_firmware_version_val:%s",tpd_firmware_version_val
);
1112 #if GTP_DRIVER_SEND_CFG
1113 /*******************************************************
1115 Get information from ic, such as resolution and
1118 client: i2c client private struct.
1121 FAIL: i2c failed, SUCCESS: i2c ok
1122 *******************************************************/
1123 static s32
gtp_get_info(struct i2c_client
*client
)
1125 u8 opr_buf
[6] = {0};
1128 opr_buf
[0] = (u8
)((GTP_REG_CONFIG_DATA
+1) >> 8);
1129 opr_buf
[1] = (u8
)((GTP_REG_CONFIG_DATA
+1) & 0xFF);
1131 ret
= gtp_i2c_read(client
, opr_buf
, 6);
1137 abs_x_max
= (opr_buf
[3] << 8) + opr_buf
[2];
1138 abs_y_max
= (opr_buf
[5] << 8) + opr_buf
[4];
1140 opr_buf
[0] = (u8
)((GTP_REG_CONFIG_DATA
+6) >> 8);
1141 opr_buf
[1] = (u8
)((GTP_REG_CONFIG_DATA
+6) & 0xFF);
1143 ret
= gtp_i2c_read(client
, opr_buf
, 3);
1148 int_type
= opr_buf
[2] & 0x03;
1150 GTP_INFO("X_MAX = %d, Y_MAX = %d, TRIGGER = 0x%02x",
1151 abs_x_max
,abs_y_max
, int_type
);
1158 /*******************************************************
1160 GTP initialize function.
1163 client: i2c client private struct.
1166 Executive outcomes.0---succeed.
1167 *******************************************************/
1168 static s32
gtp_init_panel(struct i2c_client
*client
)
1172 #if GTP_DRIVER_SEND_CFG
1178 u8 cfg_info_group1
[] = CTP_CFG_GROUP1
;
1179 u8 cfg_info_group2
[] = CTP_CFG_GROUP2
;
1180 u8 cfg_info_group3
[] = CTP_CFG_GROUP3
;
1181 u8 cfg_info_group4
[] = CTP_CFG_GROUP4
;
1182 u8 cfg_info_group5
[] = CTP_CFG_GROUP5
;
1183 u8 cfg_info_group6
[] = CTP_CFG_GROUP6
;
1184 u8
*send_cfg_buf
[] = {cfg_info_group1
, cfg_info_group2
, cfg_info_group3
,
1185 cfg_info_group4
, cfg_info_group5
, cfg_info_group6
};
1186 u8 cfg_info_len
[] = { CFG_GROUP_LEN(cfg_info_group1
),
1187 CFG_GROUP_LEN(cfg_info_group2
),
1188 CFG_GROUP_LEN(cfg_info_group3
),
1189 CFG_GROUP_LEN(cfg_info_group4
),
1190 CFG_GROUP_LEN(cfg_info_group5
),
1191 CFG_GROUP_LEN(cfg_info_group6
)};
1193 GTP_DEBUG("Config Groups\' Lengths: %d, %d, %d, %d, %d, %d",
1194 cfg_info_len
[0], cfg_info_len
[1], cfg_info_len
[2], cfg_info_len
[3],
1195 cfg_info_len
[4], cfg_info_len
[5]);
1197 if ((!cfg_info_len
[1]) && (!cfg_info_len
[2]) &&
1198 (!cfg_info_len
[3]) && (!cfg_info_len
[4]) &&
1205 #if GTP_COMPATIBLE_MODE
1206 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
1211 ret
= gtp_i2c_read_dbl_check(client
, GTP_REG_SENSOR_ID
, &sensor_id
, 1);
1214 if (sensor_id
>= 0x06)
1216 GTP_ERROR("Invalid sensor_id(0x%02X), No Config Sent!", sensor_id
);
1223 GTP_ERROR("Failed to get sensor_id, No config sent!");
1227 GTP_INFO("Sensor_ID: %d", sensor_id
);
1230 cfg_len
= cfg_info_len
[sensor_id
];
1231 tpd_config_version
= send_cfg_buf
[sensor_id
][0];
1232 /*[PLATFORM]-Add-BEGIN by falin.luo@tcl.com 2015/5/6*/
1233 /*MMI test app read sensor id to distinguish the tp manufacturer*/
1234 tpd_sensor_id
= sensor_id
;
1235 /*[PLATFORM]-Add-END by falin.luo@tcl.com 2015/5/6*/
1236 GTP_INFO("CTP_CONFIG_GROUP%d used, config length: %d", sensor_id
+ 1, cfg_len
);
1238 if (cfg_len
< GTP_CONFIG_MIN_LENGTH
)
1240 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);
1245 #if GTP_COMPATIBLE_MODE
1246 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
1253 ret
= gtp_i2c_read_dbl_check(client
, GTP_REG_CONFIG_DATA
, &opr_buf
[0], 1);
1257 GTP_DEBUG("CFG_CONFIG_GROUP%d Config Version: %d, 0x%02X; IC Config Version: %d, 0x%02X", sensor_id
+1,
1258 send_cfg_buf
[sensor_id
][0], send_cfg_buf
[sensor_id
][0], opr_buf
[0], opr_buf
[0]);
1260 if (opr_buf
[0] < 90)
1262 grp_cfg_version
= send_cfg_buf
[sensor_id
][0]; // backup group config version
1263 send_cfg_buf
[sensor_id
][0] = 0x00;
1266 else // treated as fixed config, not send config
1268 GTP_INFO("Ic fixed config with config version(%d)", opr_buf
[0]);
1270 gtp_get_info(client
);
1276 GTP_ERROR("Failed to get ic config version!No config sent!");
1281 memset(&config
[GTP_ADDR_LENGTH
], 0, GTP_CONFIG_MAX_LENGTH
);
1282 memcpy(&config
[GTP_ADDR_LENGTH
], send_cfg_buf
[sensor_id
], cfg_len
);
1285 config
[RESOLUTION_LOC
] = (u8
)GTP_MAX_WIDTH
;
1286 config
[RESOLUTION_LOC
+ 1] = (u8
)(GTP_MAX_WIDTH
>>8);
1287 config
[RESOLUTION_LOC
+ 2] = (u8
)GTP_MAX_HEIGHT
;
1288 config
[RESOLUTION_LOC
+ 3] = (u8
)(GTP_MAX_HEIGHT
>>8);
1290 if (GTP_INT_TRIGGER
== 0) //RISING
1292 config
[TRIGGER_LOC
] &= 0xfe;
1294 else if (GTP_INT_TRIGGER
== 1) //FALLING
1296 config
[TRIGGER_LOC
] |= 0x01;
1298 #endif // GTP_CUSTOM_CFG
1301 for (i
= GTP_ADDR_LENGTH
; i
< cfg_len
; i
++)
1303 check_sum
+= config
[i
];
1305 config
[cfg_len
] = (~check_sum
) + 1;
1307 #else // DRIVER NOT SEND CONFIG
1308 cfg_len
= GTP_CONFIG_MAX_LENGTH
;
1309 ret
= gtp_i2c_read(client
, config
, cfg_len
+ GTP_ADDR_LENGTH
);
1312 GTP_ERROR("Read Config Failed, Using DEFAULT Resolution & INT Trigger!");
1313 abs_x_max
= GTP_MAX_WIDTH
;
1314 abs_y_max
= GTP_MAX_HEIGHT
;
1315 int_type
= GTP_INT_TRIGGER
;
1317 #endif // GTP_DRIVER_SEND_CFG
1320 if ((abs_x_max
== 0) && (abs_y_max
== 0))
1322 abs_x_max
= (config
[RESOLUTION_LOC
+ 1] << 8) + config
[RESOLUTION_LOC
];
1323 abs_y_max
= (config
[RESOLUTION_LOC
+ 3] << 8) + config
[RESOLUTION_LOC
+ 2];
1324 int_type
= (config
[TRIGGER_LOC
]) & 0x03;
1327 #if GTP_COMPATIBLE_MODE
1328 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
1333 driver_num
= config
[GTP_REG_MATRIX_DRVNUM
- GTP_REG_CONFIG_DATA
+ 2];
1334 sensor_num
= config
[GTP_REG_MATRIX_SENNUM
- GTP_REG_CONFIG_DATA
+ 2];
1338 driver_num
= (config
[CFG_LOC_DRVA_NUM
]&0x1F) + (config
[CFG_LOC_DRVB_NUM
]&0x1F);
1339 sensor_num
= (config
[CFG_LOC_SENS_NUM
]&0x0F) + ((config
[CFG_LOC_SENS_NUM
]>>4)&0x0F);
1342 have_key
= config
[GTP_REG_HAVE_KEY
- GTP_REG_CONFIG_DATA
+ 2] & 0x01; // have key or not
1348 if ((cfg_len
== 186) && after_912_1020
)
1350 GTP_DEBUG("Firmware after 912_1020, set config length to 228.");
1354 config
[GTP_ADDR_LENGTH
+ 226] = config
[GTP_ADDR_LENGTH
+ 184];
1356 memset(&config
[GTP_ADDR_LENGTH
+ 184], 0x00, 228 - 186);
1358 config
[GTP_ADDR_LENGTH
+ 227] = 0x01;
1361 tpd_x_line
= driver_num
;
1362 tpd_y_line
= sensor_num
;
1363 GTP_INFO("Driver * Sensor: %d * %d(Key: %d), X_MAX = %d, Y_MAX = %d, TRIGGER = 0x%02x",
1364 driver_num
, sensor_num
, have_key
, abs_x_max
,abs_y_max
,int_type
);
1369 #if GTP_DRIVER_SEND_CFG
1370 ret
= gtp_send_cfg(client
);
1373 GTP_ERROR("Send config error.");
1375 // set config version to CTP_CFG_GROUP
1376 // for resume to send config
1377 config
[GTP_ADDR_LENGTH
] = grp_cfg_version
;
1379 for (i
= GTP_ADDR_LENGTH
; i
< cfg_len
; i
++)
1381 check_sum
+= config
[i
];
1383 config
[cfg_len
] = (~check_sum
) + 1;
1385 GTP_INFO("X_MAX = %d, Y_MAX = %d, TRIGGER = 0x%02x",
1386 abs_x_max
,abs_y_max
,int_type
);
1393 static s8
gtp_i2c_test(struct i2c_client
*client
)
1404 ret
= i2c_read_bytes(client
, GTP_REG_HW_INFO
, (u8
*)&hw_info
, sizeof(hw_info
));
1406 if ((!ret
) && (hw_info
== 0x00900600)) //20121212
1411 GTP_ERROR("GTP_REG_HW_INFO : %08X", hw_info
);
1412 GTP_ERROR("GTP i2c test failed time %d.", retry
);
1421 /*******************************************************
1423 Set INT pin as input for FW sync.
1426 If the INT is high, It means there is pull up resistor attached on the INT pin.
1427 Pull low the INT pin manaully for FW sync.
1428 *******************************************************/
1429 void gtp_int_sync(s32 ms
)
1431 GTP_GPIO_OUTPUT(GTP_INT_PORT
, 0);
1433 GTP_GPIO_AS_INT(GTP_INT_PORT
);
1436 void gtp_reset_guitar(struct i2c_client
*client
, s32 ms
)
1438 GTP_INFO("GTP RESET!\n");
1439 GTP_GPIO_OUTPUT(GTP_RST_PORT
, 0);
1441 GTP_GPIO_OUTPUT(GTP_INT_PORT
, client
->addr
== 0x14);
1444 GTP_GPIO_OUTPUT(GTP_RST_PORT
, 1);
1446 msleep(6); //must >= 6ms
1448 #if GTP_COMPATIBLE_MODE
1449 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
1457 gtp_init_ext_watchdog(i2c_client_point
);
1461 static int tpd_power_on(struct i2c_client
*client
)
1464 int reset_count
= 0;
1467 GTP_GPIO_OUTPUT(GTP_RST_PORT
, 0);
1468 GTP_GPIO_OUTPUT(GTP_INT_PORT
, 0);
1473 mt_set_gpio_mode(GPIO_CTP_EN_PIN
, GPIO_CTP_EN_PIN_M_GPIO
);
1474 mt_set_gpio_dir(GPIO_CTP_EN_PIN
, GPIO_DIR_OUT
);
1475 mt_set_gpio_out(GPIO_CTP_EN_PIN
, GPIO_OUT_ONE
);
1477 #else // ( defined(MT6575) || defined(MT6577) || defined(MT6589) )
1479 #ifdef TPD_POWER_SOURCE_CUSTOM
1480 hwPowerOn(TPD_POWER_SOURCE_CUSTOM
, VOL_2800
, "TP");
1482 hwPowerOn(MT65XX_POWER_LDO_VGP2
, VOL_2800
, "TP");
1484 #ifdef TPD_POWER_SOURCE_1800
1485 hwPowerOn(TPD_POWER_SOURCE_1800
, VOL_1800
, "TP");
1490 gtp_reset_guitar(client
, 20);
1492 #if GTP_COMPATIBLE_MODE
1493 gtp_get_chip_type(client
);
1495 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
1497 ret
= gup_fw_download_proc(NULL
, GTP_FL_FW_BURN
);
1501 GTP_ERROR("[tpd_power_on]Download fw failed.");
1502 if(reset_count
++ < TPD_MAX_RESET_COUNT
)
1512 ret
= gtp_fw_startup(client
);
1515 GTP_ERROR("[tpd_power_on]Startup fw failed.");
1516 if(reset_count
++ < TPD_MAX_RESET_COUNT
)
1529 ret
= gtp_i2c_test(client
);
1533 GTP_ERROR("I2C communication ERROR!");
1535 if (reset_count
< TPD_MAX_RESET_COUNT
)
1545 //**************** For GT9XXF Start ********************//
1546 #if GTP_COMPATIBLE_MODE
1549 void gtp_get_chip_type(struct i2c_client
*client
)
1551 u8 opr_buf
[10] = {0x00};
1556 ret
= gtp_i2c_read_dbl_check(client
, GTP_REG_CHIP_TYPE
, opr_buf
, 10);
1560 GTP_ERROR("Failed to get chip-type, set chip type default: GOODIX_GT9");
1561 gtp_chip_type
= CHIP_TYPE_GT9
;
1565 if (!memcmp(opr_buf
, "GOODIX_GT9", 10))
1567 gtp_chip_type
= CHIP_TYPE_GT9
;
1571 gtp_chip_type
= CHIP_TYPE_GT9F
;
1573 GTP_INFO("Chip Type: %s", (gtp_chip_type
== CHIP_TYPE_GT9
) ? "GOODIX_GT9" : "GOODIX_GT9F");
1576 static u8
gtp_bak_ref_proc(struct i2c_client
*client
, u8 mode
)
1581 struct file
*flp
= NULL
;
1584 u32 ref_seg_len
= 0;
1589 GTP_DEBUG("[gtp_bak_ref_proc]Driver:%d,Sensor:%d.", driver_num
, sensor_num
);
1591 //check file-system mounted
1592 GTP_DEBUG("[gtp_bak_ref_proc]Waiting for FS %d", gtp_ref_retries
);
1593 if (/*gup_check_fs_mounted("/data") == FAIL*/!is_data_mounted
)/*[PLATFORM]-MOD by falin.luo@tcl.com 2015/4/29*/
1595 GTP_DEBUG("[gtp_bak_ref_proc]/data not mounted");
1596 if(gtp_ref_retries
++ < GTP_CHK_FS_MNT_MAX
)
1598 msleep(100);/*[PLATFORM]-ADD by falin.luo@tcl.com 2015/4/29*/
1604 GTP_DEBUG("[gtp_bak_ref_proc]/data mounted !!!!");
1609 ref_seg_len
= (driver_num
* (sensor_num
- 1) + 2) * 2;
1611 ref_len
= ref_seg_len
* 6; // for GT950, backup-reference for six segments
1615 ref_len
= driver_num
*(sensor_num
-2)*2 + 4;
1616 ref_seg_len
= ref_len
;
1620 refp
= (u8
*)kzalloc(ref_len
, GFP_KERNEL
);
1623 GTP_ERROR("Failed to allocate memory for reference buffer!");
1626 memset(refp
, 0, ref_len
);
1629 flp
= filp_open(GTP_BAK_REF_PATH
, O_RDWR
| O_CREAT
, 0666);
1632 GTP_ERROR("Failed to open/create %s.", GTP_BAK_REF_PATH
);
1633 if (GTP_BAK_REF_SEND
== mode
)
1635 goto default_bak_ref
;
1645 case GTP_BAK_REF_SEND
:
1647 flp
->f_op
->llseek(flp
, 0, SEEK_SET
);
1648 ret
= flp
->f_op
->read(flp
, (char *)refp
, ref_len
, &flp
->f_pos
);
1651 GTP_ERROR("Read ref file failed, send default bak ref.");
1652 goto default_bak_ref
;
1655 for (j
= 0; j
< ref_grps
; ++j
)
1658 for(i
=0; i
<ref_seg_len
-2; i
+=2)
1660 ref_chksum
+= ((refp
[i
+ j
* ref_seg_len
]<<8) + refp
[i
+ 1 + j
* ref_seg_len
]);
1663 GTP_DEBUG("Reference chksum:0x%04X", ref_chksum
&0xFF);
1664 tmp
= ref_chksum
+ (refp
[ref_seg_len
+ j
* ref_seg_len
-2]<<8) + refp
[ref_seg_len
+ j
* ref_seg_len
-1];
1667 GTP_DEBUG("Invalid checksum for reference, reset reference.");
1668 memset(&refp
[j
* ref_seg_len
], 0, ref_seg_len
);
1669 refp
[ref_seg_len
- 1 + j
* ref_seg_len
] = 0x01;
1673 if (j
== (ref_grps
- 1))
1675 GTP_INFO("Reference data in %s used.", GTP_BAK_REF_PATH
);
1680 ret
= i2c_write_bytes(client
, GTP_REG_BAK_REF
, refp
, ref_len
);
1683 GTP_ERROR("Write ref i2c error.");
1690 case GTP_BAK_REF_STORE
:
1692 ret
= i2c_read_bytes(client
, GTP_REG_BAK_REF
, refp
, ref_len
);
1695 GTP_ERROR("Read ref i2c error.");
1699 flp
->f_op
->llseek(flp
, 0, SEEK_SET
);
1700 flp
->f_op
->write(flp
, (char *)refp
, ref_len
, &flp
->f_pos
);
1705 GTP_ERROR("Invalid Argument(%d) for backup reference", mode
);
1714 for (j
= 0; j
< ref_grps
; ++j
)
1716 memset(&refp
[j
* ref_seg_len
], 0, ref_seg_len
);
1717 refp
[j
* ref_seg_len
+ ref_seg_len
- 1] = 0x01; // checksum = 1
1719 ret
= i2c_write_bytes(client
, GTP_REG_BAK_REF
, refp
, ref_len
);
1720 if (flp
&& !IS_ERR(flp
))
1722 GTP_INFO("Write backup-reference data into %s", GTP_BAK_REF_PATH
);
1723 flp
->f_op
->llseek(flp
, 0, SEEK_SET
);
1724 flp
->f_op
->write(flp
, (char*)refp
, ref_len
, &flp
->f_pos
);
1728 GTP_ERROR("Failed to load the default backup reference");
1740 if (flp
&& !IS_ERR(flp
))
1742 filp_close(flp
, NULL
);
1747 u8
gtp_fw_startup(struct i2c_client
*client
)
1754 ret
= i2c_write_bytes(client
, 0x8041, wr_buf
, 1);
1757 GTP_ERROR("I2C error to firmware startup.");
1760 //release SS51 & DSP
1762 i2c_write_bytes(client
, 0x4180, wr_buf
, 1);
1767 //check fw run status
1768 i2c_read_bytes(client
, 0x8041, wr_buf
, 1);
1769 if(0xAA == wr_buf
[0])
1771 GTP_ERROR("IC works abnormally,startup failed.");
1776 GTP_DEBUG("IC works normally,Startup success.");
1778 i2c_write_bytes(client
, 0x8041, wr_buf
, 1);
1784 static void gtp_recovery_reset(struct i2c_client
*client
)
1787 gtp_esd_switch(client
, SWITCH_OFF
);
1789 force_reset_guitar(0);
1791 gtp_esd_switch(client
, SWITCH_ON
);
1795 static u8
gtp_check_clk_legality(u8
*p_clk_buf
)
1798 u8 clk_chksum
= p_clk_buf
[5];
1800 for(i
= 0; i
< 5; i
++)
1802 if((p_clk_buf
[i
] < 50) || (p_clk_buf
[i
] > 120) ||
1803 (p_clk_buf
[i
] != p_clk_buf
[0]))
1807 clk_chksum
+= p_clk_buf
[i
];
1810 if((i
== 5) && (clk_chksum
== 0))
1812 GTP_DEBUG("Valid main clock data.");
1815 GTP_ERROR("Invalid main clock data.");
1819 static u8
gtp_main_clk_proc(struct i2c_client
*client
)
1823 u8 clk_cal_result
= 0;
1825 u8 gtp_clk_buf
[6] = {0};
1826 struct file
*flp
= NULL
;
1828 GTP_DEBUG("[gtp_main_clk_proc]Waiting for FS %d", gtp_clk_retries
);/*[PLATFORM]-MOD by falin.luo@tcl.com 2015/4/29*/
1829 if (/*gup_check_fs_mounted("/data") == FAIL*/!is_data_mounted
)/*[PLATFORM]-MOD by falin.luo@tcl.com 2015/4/29*/
1831 GTP_DEBUG("[gtp_main_clk_proc]/data not mounted");
1832 if(gtp_clk_retries
++ < GTP_CHK_FS_MNT_MAX
)
1834 msleep(100);/*[PLATFORM]-ADD by falin.luo@tcl.com 2015/4/29*/
1839 GTP_ERROR("[gtp_main_clk_proc]Wait for file system timeout,need cal clk");
1844 GTP_DEBUG("[gtp_main_clk_proc]/data mounted !!!!");
1845 flp
= filp_open(GTP_MAIN_CLK_PATH
, O_RDWR
| O_CREAT
, 0666);
1848 flp
->f_op
->llseek(flp
, 0, SEEK_SET
);
1849 ret
= flp
->f_op
->read(flp
, (char *)gtp_clk_buf
, 6, &flp
->f_pos
);
1852 ret
= gtp_check_clk_legality(gtp_clk_buf
);
1855 GTP_DEBUG("[gtp_main_clk_proc]Open & read & check clk file success.");
1860 GTP_ERROR("[gtp_main_clk_proc]Check clk file failed,need cal clk");
1865 gtp_esd_switch(client
, SWITCH_OFF
);
1867 clk_cal_result
= gup_clk_calibration();
1868 force_reset_guitar(0);
1869 GTP_DEBUG("&&&&&&&&&&clk cal result:%d", clk_cal_result
);
1872 gtp_esd_switch(client
, SWITCH_ON
);
1875 if(clk_cal_result
< 50 || clk_cal_result
> 120)
1877 GTP_ERROR("Invalid main clock: %d", clk_cal_result
);
1882 for(i
= 0;i
< 5; i
++)
1884 gtp_clk_buf
[i
] = clk_cal_result
;
1885 clk_chksum
+= gtp_clk_buf
[i
];
1887 gtp_clk_buf
[5] = 0 - clk_chksum
;
1891 ret
= i2c_write_bytes(client
, 0x8020, gtp_clk_buf
, 6);
1893 if (flp
&& !IS_ERR(flp
))
1895 flp
->f_op
->llseek(flp
, 0, SEEK_SET
);
1896 flp
->f_op
->write(flp
, (char *)gtp_clk_buf
, 6, &flp
->f_pos
);
1901 GTP_ERROR("[gtp_main_clk_proc]send main clk i2c error!");
1910 if (flp
&& !IS_ERR(flp
))
1912 filp_close(flp
, NULL
);
1917 u8
gtp_verify_hopping_buf(struct i2c_client
*client
)
1922 for (i
= 0; i
< 6; i
+= 2)
1924 checksum
+= (gtp_hopping_buf
[i
] << 8) + gtp_hopping_buf
[i
+1];
1926 if ((checksum
+ ((u16
)(gtp_hopping_buf
[6] << 8) + (u16
)gtp_hopping_buf
[7])) & 0xFFFF)
1928 GTP_ERROR("Wrong checksum for hopping buffer, get hopping data from config instead!");
1929 goto get_config_hopping
;
1932 for (i
= 0; i
< 8; i
++)
1934 if (gtp_hopping_buf
[i
] != gtp_hopping_buf
[i
+8])
1936 GTP_ERROR("Hopping buffer is not identical, get data from config instead!");
1937 goto get_config_hopping
;
1940 GTP_DEBUG("Hopping buffer is okay");
1944 memcpy(gtp_hopping_buf
, &config
[2 + 0x8065 - GTP_REG_CONFIG_DATA
], 4);
1945 gtp_hopping_buf
[4] = 0xAA;
1946 gtp_hopping_buf
[5] = 0x55;
1949 for (i
= 0; i
< 6; i
+= 2)
1951 checksum
+= (gtp_hopping_buf
[i
] << 8) + gtp_hopping_buf
[i
+1];
1953 checksum
= 0 - checksum
;
1954 gtp_hopping_buf
[6] = (u8
)(checksum
>> 8);
1955 gtp_hopping_buf
[7] = (u8
)(checksum
& 0xFF);
1957 for (i
= 0; i
< 8; i
++)
1959 gtp_hopping_buf
[i
+8] = gtp_hopping_buf
[i
];
1964 u8
gtp_hopping_proc(struct i2c_client
*client
, s32 mode
)
1968 GTP_DEBUG("Store hopping data, wait for /data mounted.");
1969 /*[PLATFORM]-MOD-BEGIN by falin.luo@tcl.com 2015/4/29*/
1970 // ret = gup_check_fs_mounted("/data");
1971 ret
= is_data_mounted
? SUCCESS
: FAIL
;
1972 /*[PLATFORM]-MOD-END by falin.luo@tcl.com 2015/4/29*/
1976 GTP_DEBUG("/data not mounted.");
1979 GTP_DEBUG("/data Mounted!");
1981 if (GTP_HOPPING_SEND
== mode
)
1983 gtp_verify_hopping_buf(client
);
1985 ret
= i2c_write_bytes(client
, 0x8030, gtp_hopping_buf
, 16);
1997 ret
= i2c_read_bytes(client
, 0x8030, gtp_hopping_buf
, 16);
2001 GTP_ERROR("Failed to read hopping data from hopping buffer, get from config instead.");
2004 return gtp_verify_hopping_buf(client
);
2008 #if GTP_FL_LITTLE_SYSTEM
2009 s32
gtp_resume_timeout(void *none
)
2012 GTP_DEBUG("Resume timeout thread kicks off.");
2014 while (timeout
++ < (10 * 10))
2017 if (!little_fw_mode
)
2019 GTP_DEBUG("Resume timeout thread terminated while counting.");
2026 GTP_INFO("Download big ss51 firmware timeout, process esd reset.");
2028 gtp_recovery_reset(i2c_client_point
);
2034 u8
gtp_get_state1(struct i2c_client
*client
)
2039 ret
= i2c_read_bytes(client
, GTP_REG_STATE1
, &state1
, 1);
2043 GTP_ERROR("Failed to get state1!");
2049 u8
gtp_get_state2(struct i2c_client
*client
)
2054 ret
= i2c_read_bytes(client
, GTP_REG_STATE2
, &state2
, 1);
2058 GTP_ERROR("Failed to get state2!");
2065 u8
gtp_send_check_info(struct i2c_client
*client
, u16 fw_chksum
)
2072 u16 start_addr
= 0x0000;
2073 u8 checkinfo_buf
[10] = {0};
2087 state1
= BUFFER_FULL
;
2089 start_addr
= (0xC000 + (fw_block
- 1) * 1024 * 2);
2094 state1
= BUFFER_FULL
;
2096 start_addr
= 0xF800;
2101 state1
= BUFFER_FULL
;
2103 start_addr
= 0xF000;
2108 state1
= BUFFER_FULL
;
2109 state2
= IS_B_SEG_FIRST
;
2110 start_addr
= 0xE800;
2115 state1
= WAIT_CHECK
;
2116 state2
= IS_B_SEG_LAST
;
2117 start_addr
= 0xC000;
2121 GTP_ERROR("Invalid firmware block(%d) for checkinfo.", fw_block
);
2125 checkinfo_buf
[3] = bank
;
2126 checkinfo_buf
[4] = (u8
)(start_addr
>> 8);
2127 checkinfo_buf
[5] = (u8
)(start_addr
& 0xFF);
2128 checkinfo_buf
[7] = state2
;
2129 checkinfo_buf
[8] = state1
;
2131 GTP_DEBUG("fw_block: %d, fw_chksum: 0x%04X", fw_block
, fw_chksum
);
2134 checkinfo_buf
[6] = 80;
2138 checkinfo_buf
[6] = 16;
2141 checkinfo_buf
[0] = (u8
)(fw_chksum
>> 8);
2142 checkinfo_buf
[1] = (u8
)(fw_chksum
& 0xFF);
2145 for (ret
= 0; ret
< 6; ret
++)
2147 checksum
+= checkinfo_buf
[3 + ret
];
2149 checkinfo_buf
[2] = 1 - checksum
;
2151 ret
= i2c_write_bytes(client
, GTP_REG_CHECKINFO
, checkinfo_buf
, 9);
2154 GTP_ERROR("Failed to send checkinfo!");
2159 GTP_DEBUG("Send checkinfo successfully!");
2166 u8
gtp_resume_fw_startup(struct i2c_client
*client
)
2172 GTP_INFO("Big ss51 firmware startup.");
2174 while (retry
++ < 10)
2177 ret
= i2c_write_bytes(client
, 0x4180, &buf
, 1); // hold ss51 & dsp
2180 GTP_ERROR("Failed to hold ss51 & dsp.");
2185 ret
= i2c_read_bytes(client
, 0x4180, &buf
, 1);
2188 GTP_ERROR("Failed to get hold ss51 & dsp status.");
2194 GTP_DEBUG("SS51 & Dsp confirm hold!");
2201 GTP_ERROR("Hold ss51 & dsp retry exhausted.");
2206 i2c_write_bytes(client
, 0x4048, &buf
, 1); // select bank3
2209 i2c_write_bytes(client
, 0x4049, &buf
, 1);
2211 return gtp_fw_startup(client
);
2214 u8
gtp_download_seg_b(struct i2c_client
*client
)
2220 if (block_section
!= 10)
2223 i2c_write_bytes(client
, 0x4048, &state1
, 1); // select bank0
2225 ret
= gup_burn_ss51_seg_b(client
, 10, &fw_chksum
);
2229 GTP_ERROR("Failed to burn ss51 seg B, process reburn.");
2233 ret
= gtp_send_check_info(i2c_client_point
, fw_chksum
);
2236 GTP_ERROR("Send checkinfo failed, process resend.");
2242 state1
= gtp_get_state1(client
);
2244 if (CHECK_COMPLETE
== state1
)
2246 GTP_INFO("Burn ss51 Block12 successfully");
2248 else if (CHECK_ERROR
== state1
)
2250 GTP_DEBUG("Big SS51 Seg B check error, process reburn!");
2255 GTP_ERROR("Big SS51 Seg B check imcomplete(state1:%s), process recheck.", symbolic_state1
[state1
&0x07]);
2259 ret
= gtp_resume_fw_startup(client
);
2264 GTP_ERROR("Big ss51 firmware startup failed, process esd reset.");
2267 gtp_recovery_reset(i2c_client_point
);
2272 GTP_INFO("Switch to big ss51 firmware successfully!");
2277 gtp_esd_switch(client
, SWITCH_ON
);
2284 u8
gtp_download_big_ss51(struct i2c_client
*client
)
2289 static u16 fw_chksum
= 0x0000;
2291 //GTP_DEBUG("Block: %d, Block Section: %d", fw_block, block_section);
2292 if (!little_fw_mode
)
2294 GTP_ERROR("Download big ss51 timeout!");
2298 if (block_section
== 10) // one firmware block burned
2305 state1
= gtp_get_state1(i2c_client_point
);
2306 state2
= gtp_get_state2(i2c_client_point
);
2308 GTP_DEBUG("state1: %02X (%s), state2: %02X (%s)", state1
, symbolic_state1
[state1
&0x07], state2
, symbolic_state2
[state2
&0x07]);
2310 if (CHECK_COMPLETE
== state1
)
2313 GTP_DEBUG("Burn ss51 Block%d successfully!", fw_block
);
2317 gtp_esd_switch(client
, SWITCH_OFF
);
2319 tpd_up(0, 0, 0); // release all
2320 input_sync(tpd
->dev
);
2321 GTP_DEBUG("Release touch manually.");
2323 for (i
= 0; i
< 5; i
++)
2325 if (!little_fw_mode
|| (fw_block
!= 12))
2327 GTP_ERROR("Download big ss51 timeout!");
2330 ret
= gtp_download_seg_b(client
);
2340 else if (CHECK_ERROR
== state1
)
2342 GTP_ERROR("Block%d check error, process reburn.", fw_block
);
2348 GTP_DEBUG("Block%d check incomplete, process recheck.", fw_block
);
2352 if (block_section
< 9)
2354 ret
= gup_burn_ss51_block(i2c_client_point
, block_section
, fw_block
+1, &fw_chksum
);
2357 GTP_ERROR("Burn block%d section%d failed, reburn block%d", fw_block
+1, block_section
, fw_block
+1);
2363 if (block_section
== 9) // one firmware block downloaded
2367 ret
= gtp_send_check_info(i2c_client_point
, fw_chksum
);
2375 //************* For GT9XXF End **********************//
2378 static void gtp_pen_init(void)
2382 pen_dev
= input_allocate_device();
2383 if (pen_dev
== NULL
)
2385 GTP_ERROR("Failed to allocate input device for pen/stylus.");
2389 pen_dev
->evbit
[0] = BIT_MASK(EV_SYN
) | BIT_MASK(EV_KEY
) | BIT_MASK(EV_ABS
) ;
2390 pen_dev
->keybit
[BIT_WORD(BTN_TOUCH
)] = BIT_MASK(BTN_TOUCH
);
2392 set_bit(BTN_TOOL_PEN
, pen_dev
->keybit
);
2393 set_bit(INPUT_PROP_DIRECT
, pen_dev
->propbit
);
2394 //set_bit(INPUT_PROP_POINTER, pen_dev->propbit);
2396 #if GTP_PEN_HAVE_BUTTON
2397 input_set_capability(pen_dev
, EV_KEY
, BTN_STYLUS
);
2398 input_set_capability(pen_dev
, EV_KEY
, BTN_STYLUS2
);
2401 input_set_abs_params(pen_dev
, ABS_MT_POSITION_X
, 0, TPD_RES_X
, 0, 0);
2402 input_set_abs_params(pen_dev
, ABS_MT_POSITION_Y
, 0, TPD_RES_Y
, 0, 0);
2403 input_set_abs_params(pen_dev
, ABS_MT_PRESSURE
, 0, 255, 0, 0);
2404 input_set_abs_params(pen_dev
, ABS_MT_TOUCH_MAJOR
, 0, 255, 0, 0);
2405 input_set_abs_params(pen_dev
, ABS_MT_TRACKING_ID
, 0, 255, 0, 0);
2407 pen_dev
->name
= "mtk-pen";
2408 pen_dev
->phys
= "input/ts";
2409 pen_dev
->id
.bustype
= BUS_I2C
;
2411 ret
= input_register_device(pen_dev
);
2414 GTP_ERROR("Register %s input device failed", pen_dev
->name
);
2419 static void gtp_pen_down(s32 x
, s32 y
, s32 size
, s32 id
)
2421 input_report_key(pen_dev
, BTN_TOOL_PEN
, 1);
2422 input_report_key(pen_dev
, BTN_TOUCH
, 1);
2423 input_report_abs(pen_dev
, ABS_MT_POSITION_X
, x
);
2424 input_report_abs(pen_dev
, ABS_MT_POSITION_Y
, y
);
2425 if ((!size
) && (!id
))
2427 input_report_abs(pen_dev
, ABS_MT_PRESSURE
, 100);
2428 input_report_abs(pen_dev
, ABS_MT_TOUCH_MAJOR
, 100);
2432 input_report_abs(pen_dev
, ABS_MT_PRESSURE
, size
);
2433 input_report_abs(pen_dev
, ABS_MT_TOUCH_MAJOR
, size
);
2434 input_report_abs(pen_dev
, ABS_MT_TRACKING_ID
, id
);
2436 input_mt_sync(pen_dev
);
2439 static void gtp_pen_up(void)
2441 input_report_key(pen_dev
, BTN_TOOL_PEN
, 0);
2442 input_report_key(pen_dev
, BTN_TOUCH
, 0);
2447 static s32
tpd_i2c_probe_next(struct i2c_client
*client
)
2455 ret
= tpd_power_on(client
);
2459 GTP_ERROR("I2C communication ERROR!");
2462 ret
= gtp_read_version(client
, &version_info
);
2466 GTP_ERROR("Read version failed.");
2469 ret
= gtp_init_panel(client
);
2473 GTP_ERROR("GTP init panel failed.");
2476 #if GTP_CREATE_WR_NODE
2477 init_wr_node(client
);
2479 thread
= kthread_run(touch_event_handler
, 0, TPD_DEVICE
);
2484 err
= PTR_ERR(thread
);
2485 GTP_ERROR(TPD_DEVICE
" failed to create kernel thread: %d\n", err
);
2488 mt_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM
);
2491 ret
= gup_init_update_proc(client
);
2495 GTP_ERROR("Create update thread error.");
2500 gtp_esd_switch(client
, SWITCH_ON
);
2507 static ssize_t
cfg_load_enable_store(struct device
*dev
,
2508 struct device_attribute
*attr
,
2509 const char *buf
, size_t count
)
2511 tpd_i2c_probe_next(i2c_client_point
);
2514 static ssize_t
cfg_load_enable_show(struct device
*dev
,
2515 struct device_attribute
*attr
,
2516 const char *buf
, size_t count
)
2520 static DEVICE_ATTR(cfg_load_enable
, S_IRUGO
|S_IWUSR
, cfg_load_enable_show
, cfg_load_enable_store
);
2522 /*[PLATFORM]-Add-BEGIN by falin.luo@tcl.com 2015/4/29*/
2523 /*sys interface to get and set the data partition mount status*/
2524 #ifdef GTP_COMPATIBLE_MODE
2526 static ssize_t
data_is_mount_store(struct device
*dev
,
2527 struct device_attribute
*attr
,
2528 const char *buf
, size_t count
)
2530 GTP_INFO("enter %s", __func__
);
2533 is_data_mounted
= ((buf
[0] == '1') ? 1 : 0);
2535 GTP_INFO("is_data_mount = %d, buf = %s", is_data_mounted
, buf
);
2539 static ssize_t
data_is_mount_show(struct device
*dev
,
2540 struct device_attribute
*attr
,
2541 char *buf
, size_t count
)
2543 return snprintf(buf
, PAGE_SIZE
, "is_data_mounted = %d\n", is_data_mounted
);
2546 static DEVICE_ATTR(data_is_mount
, 0644, data_is_mount_show
, data_is_mount_store
);
2550 /*[PLATFORM]-Add-END by falin.luo@tcl.com 2015/4/29*/
2553 static struct miscdevice cfg_misc_device
=
2555 .minor
= MISC_DYNAMIC_MINOR
,
2557 // .fops = &tpd_fops,
2561 static void buttons_timer_function(unsigned long data
)
2563 printk(KERN_ERR
"caoyang1\n");
2564 input_report_key(tpd
->dev
, KEY_POWER
, 1);
2565 input_sync(tpd
->dev
);
2566 input_report_key(tpd
->dev
, KEY_POWER
, 0);
2567 input_sync(tpd
->dev
);
2573 static s32
tpd_i2c_probe(struct i2c_client
*client
, const struct i2c_device_id
*id
)
2579 #if GTP_HAVE_TOUCH_KEY
2582 #ifdef TPD_PROXIMITY
2583 struct hwmsen_object obj_ps
;
2586 i2c_client_point
= client
;
2587 //add by caoyang for ·À¶¶
2588 //do not use the timer because it cause bug
2590 init_timer(&buttons_timer
);
2591 buttons_timer
.function
= buttons_timer_function
;
2592 add_timer(&buttons_timer
);
2595 ret
= tpd_power_on(client
);
2599 GTP_ERROR("I2C communication ERROR!");
2602 #ifdef VELOCITY_CUSTOM
2604 if ((err
= misc_register(&tpd_misc_device
)))
2606 printk("mtk_tpd: tpd_misc_device register failed\n");
2611 ret
= gtp_read_version(client
, &version_info
);
2615 GTP_ERROR("Read version failed.");
2618 ret
= gtp_init_panel(client
);
2622 GTP_ERROR("GTP init panel failed.");
2625 // Create proc file system
2626 gt91xx_config_proc
= proc_create(GT91XX_CONFIG_PROC_FILE
, 0666, NULL
, &config_proc_ops
);
2627 if (gt91xx_config_proc
== NULL
)
2629 GTP_ERROR("create_proc_entry %s failed\n", GT91XX_CONFIG_PROC_FILE
);
2633 GTP_INFO("create proc entry %s success", GT91XX_CONFIG_PROC_FILE
);
2636 #if GTP_CREATE_WR_NODE
2637 init_wr_node(client
);
2640 thread
= kthread_run(touch_event_handler
, 0, TPD_DEVICE
);
2645 err
= PTR_ERR(thread
);
2646 GTP_ERROR(TPD_DEVICE
" failed to create kernel thread: %d\n", err
);
2651 #if GTP_HAVE_TOUCH_KEY
2653 for (idx
= 0; idx
< GTP_MAX_KEY_NUM
; idx
++)
2655 input_set_capability(tpd
->dev
, EV_KEY
, touch_key_array
[idx
]);
2659 input_set_capability(tpd
->dev
, EV_KEY
, KEY_POWER
);
2665 mt_set_gpio_mode(GPIO_CTP_EINT_PIN
, GPIO_CTP_EINT_PIN_M_EINT
);
2666 mt_set_gpio_dir(GPIO_CTP_EINT_PIN
, GPIO_DIR_IN
);
2667 mt_set_gpio_pull_enable(GPIO_CTP_EINT_PIN
, GPIO_PULL_DISABLE
);
2672 if (!int_type
) //EINTF_TRIGGER
2674 mt_eint_registration(CUST_EINT_TOUCH_PANEL_NUM
, EINTF_TRIGGER_RISING
, tpd_eint_interrupt_handler
, 1);
2678 mt_eint_registration(CUST_EINT_TOUCH_PANEL_NUM
, EINTF_TRIGGER_FALLING
, tpd_eint_interrupt_handler
, 1);
2684 mt_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM
);
2687 ret
= gup_init_update_proc(client
);
2691 GTP_ERROR("Create update thread error.");
2695 #ifdef TPD_PROXIMITY
2696 //obj_ps.self = cm3623_obj;
2697 obj_ps
.polling
= 0; //0--interrupt mode;1--polling mode;
2698 obj_ps
.sensor_operate
= tpd_ps_operate
;
2700 if ((err
= hwmsen_attach(ID_PROXIMITY
, &obj_ps
)))
2702 GTP_ERROR("hwmsen attach fail, return:%d.", err
);
2708 gtp_esd_switch(client
, SWITCH_ON
);
2711 tpd_load_status
= 1;
2713 misc_register(&cfg_misc_device
);
2714 /*[PLATFORM]-Add-BEGIN by falin.luo@tcl.com 2015/4/29*/
2715 #ifdef GTP_COMPATIBLE_MODE
2716 device_create_file(cfg_misc_device
.this_device
, &dev_attr_data_is_mount
);
2718 /*[PLATFORM]-Add-END by falin.luo@tcl.com 2015/4/29*/
2720 device_create_file(cfg_misc_device
.this_device
, &dev_attr_cfg_load_enable
);
2721 tpd_load_status
= 1;
2726 static void tpd_eint_interrupt_handler(void)
2728 TPD_DEBUG_PRINT_INT
;
2732 wake_up_interruptible(&waiter
);
2734 static int tpd_i2c_remove(struct i2c_client
*client
)
2736 #if GTP_CREATE_WR_NODE
2741 destroy_workqueue(gtp_esd_check_workqueue
);
2746 #if (GTP_ESD_PROTECT || GTP_COMPATIBLE_MODE)
2747 static s32
force_reset_guitar(s32 resume
)
2754 GTP_INFO("Force_reset_guitar");
2758 GTP_INFO("Download little system.");
2761 mt_eint_mask(CUST_EINT_TOUCH_PANEL_NUM
);
2763 GTP_GPIO_OUTPUT(GTP_RST_PORT
, 0);
2764 GTP_GPIO_OUTPUT(GTP_INT_PORT
, 0);
2767 mt_set_gpio_mode(GPIO_CTP_EN_PIN
, GPIO_CTP_EN_PIN_M_GPIO
);
2768 mt_set_gpio_dir(GPIO_CTP_EN_PIN
, GPIO_DIR_OUT
);
2769 mt_set_gpio_out(GPIO_CTP_EN_PIN
, GPIO_OUT_ZERO
);
2772 mt_set_gpio_out(GPIO_CTP_EN_PIN
, GPIO_OUT_ONE
);
2774 #else // ( defined(MT6575) || defined(MT6577) || defined(MT6589) )
2776 #ifdef TPD_POWER_SOURCE_CUSTOM
2777 hwPowerDown(TPD_POWER_SOURCE_CUSTOM
, "TP");
2779 hwPowerDown(MT65XX_POWER_LDO_VGP2
, "TP");
2784 #ifdef TPD_POWER_SOURCE_CUSTOM
2785 hwPowerOn(TPD_POWER_SOURCE_CUSTOM
, VOL_2800
, "TP");
2787 hwPowerOn(MT65XX_POWER_LDO_VGP2
, VOL_2800
, "TP");
2793 for (i
= 0; i
< 5; i
++)
2795 #if GTP_COMPATIBLE_MODE
2796 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
2798 #if GTP_FL_LITTLE_SYSTEM
2800 if (resume
) // poweroff resume
2802 ret
= gup_fw_download_proc(NULL
, GTP_FL_PWR_RESUME_BURN
);
2805 GTP_ERROR("Failed to download little system.");
2812 ret
= gup_fw_download_proc(NULL
, GTP_FL_ESD_RECOVERY
);
2816 GTP_ERROR("[force_reset_guitar]Check & repair fw failed.");
2820 ret
= gtp_fw_startup(i2c_client_point
);
2825 GTP_ERROR("Failed to startup little system.");
2829 GTP_ERROR("GT9XXF start up failed.");
2839 gtp_reset_guitar(i2c_client_point
, 20);
2842 ret
= gtp_send_cfg(i2c_client_point
);
2856 GTP_ERROR("Failed to download little system.");
2860 GTP_ERROR("Failed to reset guitar.");
2862 mt_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM
);
2865 #if (GTP_COMPATIBLE_MODE && GTP_FL_LITTLE_SYSTEM)
2866 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
2875 gtp_main_clk_proc(i2c_client_point
);
2876 gtp_hopping_proc(i2c_client_point
, GTP_HOPPING_SEND
);
2877 gtp_bak_ref_proc(i2c_client_point
, GTP_BAK_REF_SEND
);
2888 mt_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM
);
2894 static s32
gtp_init_ext_watchdog(struct i2c_client
*client
)
2896 u8 opr_buffer
[2] = {0xAA};
2897 GTP_DEBUG("Init external watchdog.");
2898 return i2c_write_bytes(client
, 0x8041, opr_buffer
, 1);
2901 void gtp_esd_switch(struct i2c_client
*client
, s32 on
)
2903 spin_lock(&esd_lock
);
2904 if (SWITCH_ON
== on
) // switch on esd
2909 spin_unlock(&esd_lock
);
2910 GTP_INFO("Esd started");
2911 queue_delayed_work(gtp_esd_check_workqueue
, >p_esd_check_work
, clk_tick_cnt
);
2915 spin_unlock(&esd_lock
);
2918 else // switch off esd
2923 spin_unlock(&esd_lock
);
2924 GTP_INFO("Esd cancelled");
2925 cancel_delayed_work_sync(>p_esd_check_work
);
2929 spin_unlock(&esd_lock
);
2934 static s32
gtp_check_fw(void)
2936 u8 versionBuff
[4] = {0};
2941 ret
= i2c_read_bytes_non_dma(i2c_client_point
, 0x8140, versionBuff
, sizeof(versionBuff
));
2946 if( memcmp(versionBuff
, >p_default_FW_fl
[4], 4) !=0 )
2954 GTP_ERROR("Check running fw version error!");
2958 static void gtp_esd_check_func(struct work_struct
*work
)
2962 u8 esd_buf
[3] = {0x00};
2966 GTP_INFO("Esd suspended!");
2969 for (i
= 0; i
< 3; i
++)
2971 ret
= i2c_read_bytes_non_dma(i2c_client_point
, 0x8040, esd_buf
, 2);
2973 GTP_DEBUG("[Esd]0x8040 = 0x%02X, 0x8041 = 0x%02X", esd_buf
[0], esd_buf
[1]);
2976 // IIC communication problem
2981 if ((esd_buf
[0] == 0xAA) || (esd_buf
[1] != 0xAA))
2983 u8 chk_buf
[2] = {0x00};
2984 i2c_read_bytes_non_dma(i2c_client_point
, 0x8040, chk_buf
, 2);
2986 GTP_DEBUG("[Check]0x8040 = 0x%02X, 0x8041 = 0x%02X", chk_buf
[0], chk_buf
[1]);
2988 if ( (chk_buf
[0] == 0xAA) || (chk_buf
[1] != 0xAA) )
2990 i
= 3; // jump to reset guitar
3000 // IC works normally, Write 0x8040 0xAA, feed the watchdog
3002 i2c_write_bytes_non_dma(i2c_client_point
, 0x8040, esd_buf
, 1);
3009 if (i
>= 3 || !gtp_check_fw())
3011 #if GTP_COMPATIBLE_MODE
3012 if ((CHIP_TYPE_GT9F
== gtp_chip_type
) && (1 == rqst_processing
))
3014 GTP_INFO("Request Processing, no reset guitar.");
3019 GTP_INFO("IC works abnormally! Process reset guitar.");
3023 i2c_write_bytes(i2c_client_point
, 0x4226, esd_buf
, 3);
3025 force_reset_guitar(0);
3031 queue_delayed_work(gtp_esd_check_workqueue
, >p_esd_check_work
, clk_tick_cnt
);
3035 GTP_INFO("Esd suspended!");
3042 static void tpd_down(s32 x
, s32 y
, s32 size
, s32 id
)
3044 if ((!size
) && (!id
))
3046 input_report_abs(tpd
->dev
, ABS_MT_PRESSURE
, 100);
3047 input_report_abs(tpd
->dev
, ABS_MT_TOUCH_MAJOR
, 100);
3051 input_report_abs(tpd
->dev
, ABS_MT_PRESSURE
, size
);
3052 input_report_abs(tpd
->dev
, ABS_MT_TOUCH_MAJOR
, size
);
3053 /* track id Start 0 */
3054 input_report_abs(tpd
->dev
, ABS_MT_TRACKING_ID
, id
);
3057 input_report_key(tpd
->dev
, BTN_TOUCH
, 1);
3058 input_report_abs(tpd
->dev
, ABS_MT_POSITION_X
, x
);
3059 input_report_abs(tpd
->dev
, ABS_MT_POSITION_Y
, y
);
3060 input_mt_sync(tpd
->dev
);
3061 TPD_EM_PRINT(x
, y
, x
, y
, id
, 1);
3063 #if (defined(MT6575)||defined(MT6577))
3065 if (FACTORY_BOOT
== get_boot_mode() || RECOVERY_BOOT
== get_boot_mode())
3067 tpd_button(x
, y
, 1);
3073 static void tpd_up(s32 x
, s32 y
, s32 id
)
3075 input_report_key(tpd
->dev
, BTN_TOUCH
, 0);
3076 input_mt_sync(tpd
->dev
);
3077 TPD_EM_PRINT(x
, y
, x
, y
, id
, 0);
3079 #if (defined(MT6575) || defined(MT6577))
3081 if (FACTORY_BOOT
== get_boot_mode() || RECOVERY_BOOT
== get_boot_mode())
3083 tpd_button(x
, y
, 0);
3088 #if GTP_CHARGER_SWITCH
3089 static void gtp_charger_switch(s32 dir_update
)
3092 u8 chr_cmd
[3] = {0x80, 0x40};
3093 static u8 chr_pluggedin
= 0;
3097 chr_status
= *(volatile u32
*)CHR_CON0
;
3098 chr_status
&= (1 << 13);
3099 #else // ( defined(MT6575) || defined(MT6577) || defined(MT6589) )
3100 chr_status
= upmu_is_chr_det();
3103 if (chr_status
) // charger plugged in
3105 if (!chr_pluggedin
|| dir_update
)
3108 ret
= gtp_i2c_write(i2c_client_point
, chr_cmd
, 3);
3111 GTP_INFO("Update status for Charger Plugin");
3116 else // charger plugged out
3118 if (chr_pluggedin
|| dir_update
)
3121 ret
= gtp_i2c_write(i2c_client_point
, chr_cmd
, 3);
3124 GTP_INFO("Update status for Charger Plugout");
3132 static int touch_event_handler(void *unused
)
3134 struct sched_param param
= { .sched_priority
= RTPM_PRIO_TPD
};
3135 u8 end_cmd
[3] = {GTP_READ_COOR_ADDR
>> 8, GTP_READ_COOR_ADDR
& 0xFF, 0};
3136 u8 point_data
[2 + 1 + 8 * GTP_MAX_TOUCH
+ 1] = {GTP_READ_COOR_ADDR
>> 8, GTP_READ_COOR_ADDR
& 0xFF};
3139 static u8 pre_touch
= 0;
3140 static u8 pre_key
= 0;
3143 static u8 pre_pen
= 0;
3146 u8
*coor_data
= NULL
;
3154 #if GTP_COMPATIBLE_MODE
3155 u8 rqst_data
[3] = {(u8
)(GTP_REG_RQST
>> 8), (u8
)(GTP_REG_RQST
& 0xFF), 0};
3158 #ifdef TPD_PROXIMITY
3160 hwm_sensor_data sensor_data
;
3161 u8 proximity_status
;
3163 u8 proximity_status
; //add by caoyang
3164 u8 doze_buf
[3] = {0x81, 0x4B};
3166 sched_setscheduler(current
, SCHED_RR
, ¶m
);
3169 set_current_state(TASK_INTERRUPTIBLE
);
3173 //#if GTP_GESTURE_WAKEUP
3174 if(gesture_value
> 0){
3175 if (DOZE_ENABLED
== doze_status
)
3185 wait_event_interruptible(waiter
, tpd_flag
!= 0);
3188 set_current_state(TASK_RUNNING
);
3190 #if GTP_CHARGER_SWITCH
3191 gtp_charger_switch(0);
3194 if(gesture_value
> 0){
3195 //#if GTP_GESTURE_WAKEUP
3196 if (DOZE_ENABLED
== doze_status
)
3198 ret
= gtp_i2c_read(i2c_client_point
, doze_buf
, 3);
3199 GTP_DEBUG("0x814B = 0x%02X", doze_buf
[2]);
3202 if ((doze_buf
[2] == 'a') || (doze_buf
[2] == 'b') || (doze_buf
[2] == 'c') ||
3203 (doze_buf
[2] == 'd') || (doze_buf
[2] == 'e') || (doze_buf
[2] == 'g') ||
3204 (doze_buf
[2] == 'h') || (doze_buf
[2] == 'm') || (doze_buf
[2] == 'o') ||
3205 (doze_buf
[2] == 'q') || (doze_buf
[2] == 's') || (doze_buf
[2] == 'v') ||
3206 (doze_buf
[2] == 'w') || (doze_buf
[2] == 'y') || (doze_buf
[2] == 'z') ||
3207 (doze_buf
[2] == 0x5E) /* ^ */
3210 if (doze_buf
[2] != 0x5E)
3212 GTP_INFO("Wakeup by gesture(%c), light up the screen!", doze_buf
[2]);
3216 GTP_INFO("Wakeup by gesture(^), light up the screen!");
3219 doze_status
= DOZE_WAKEUP
;
3220 input_report_key(tpd
->dev
, KEY_POWER
, 1);
3221 input_sync(tpd
->dev
);
3222 input_report_key(tpd
->dev
, KEY_POWER
, 0);
3223 input_sync(tpd
->dev
);
3226 gtp_i2c_write(i2c_client_point
, doze_buf
, 3);
3228 else if ( (doze_buf
[2] == 0xAA) || (doze_buf
[2] == 0xBB) ||
3229 (doze_buf
[2] == 0xAB) || (doze_buf
[2] == 0xBA) )
3231 char *direction
[4] = {"Right", "Down", "Up", "Left"};
3232 u8 type
= ((doze_buf
[2] & 0x0F) - 0x0A) + (((doze_buf
[2] >> 4) & 0x0F) - 0x0A) * 2;
3234 GTP_INFO("%s slide to light up the screen!", direction
[type
]);
3235 doze_status
= DOZE_WAKEUP
;
3236 input_report_key(tpd
->dev
, KEY_POWER
, 1);
3237 input_sync(tpd
->dev
);
3238 input_report_key(tpd
->dev
, KEY_POWER
, 0);
3239 input_sync(tpd
->dev
);
3242 gtp_i2c_write(i2c_client_point
, doze_buf
, 3);
3244 else if (0xCC == doze_buf
[2])
3246 GTP_INFO("Double click to light up the screen!");
3247 doze_status
= DOZE_WAKEUP
;
3248 input_report_key(tpd
->dev
, KEY_POWER
, 1);
3249 input_sync(tpd
->dev
);
3250 input_report_key(tpd
->dev
, KEY_POWER
, 0);
3251 input_sync(tpd
->dev
);
3254 gtp_i2c_write(i2c_client_point
, doze_buf
, 3);
3260 gtp_i2c_write(i2c_client_point
, doze_buf
, 3);
3261 gtp_enter_doze(i2c_client_point
);
3268 ret
= gtp_i2c_read(i2c_client_point
, point_data
, 12);
3271 GTP_ERROR("I2C transfer error. errno:%d\n ", ret
);
3274 finger
= point_data
[GTP_ADDR_LENGTH
];
3276 #if GTP_COMPATIBLE_MODE
3277 if ((finger
== 0x00) && (CHIP_TYPE_GT9F
== gtp_chip_type
))
3279 ret
= gtp_i2c_read(i2c_client_point
, rqst_data
, 3);
3283 GTP_ERROR("I2C transfer error. errno:%d\n ", ret
);
3286 switch (rqst_data
[2])
3288 case GTP_RQST_BAK_REF
:
3289 GTP_INFO("Request Ref.");
3290 rqst_processing
= 1;
3291 ret
= gtp_bak_ref_proc(i2c_client_point
, GTP_BAK_REF_SEND
);
3294 GTP_INFO("Send ref success.");
3295 rqst_data
[2] = GTP_RQST_RESPONDED
;
3296 gtp_i2c_write(i2c_client_point
, rqst_data
, 3);
3297 rqst_processing
= 0;
3299 goto exit_work_func
;
3301 case GTP_RQST_CONFIG
:
3302 GTP_INFO("Request Config.");
3303 ret
= gtp_send_cfg(i2c_client_point
);
3306 GTP_ERROR("Send config error.");
3310 GTP_INFO("Send config success.");
3311 rqst_data
[2] = GTP_RQST_RESPONDED
;
3312 gtp_i2c_write(i2c_client_point
, rqst_data
, 3);
3314 goto exit_work_func
;
3316 case GTP_RQST_MAIN_CLOCK
:
3317 GTP_INFO("Request main clock.");
3318 rqst_processing
= 1;
3319 ret
= gtp_main_clk_proc(i2c_client_point
);
3322 GTP_INFO("Send main clk success.");
3323 #if GTP_POWER_CTRL_SLEEP
3325 ret
= gtp_hopping_proc(i2c_client_point
, GTP_HOPPING_SEND
);
3328 GTP_ERROR("Failed to send hopping data.");
3329 goto exit_work_func
;
3333 GTP_INFO("Send hopping data success.");
3337 rqst_data
[2] = GTP_RQST_RESPONDED
;
3338 gtp_i2c_write(i2c_client_point
, rqst_data
, 3);
3339 rqst_processing
= 0;
3341 goto exit_work_func
;
3343 case GTP_RQST_RESET
:
3344 //#if GTP_GESTURE_WAKEUP
3345 if(gesture_value
> 0){
3346 if (DOZE_ENABLED
== doze_status
) {
3347 u8 reg_data
[3] = {(u8
)(0x801F >> 8), (u8
)(0x801F & 0xFF), 0};
3348 gtp_i2c_write(i2c_client_point
, reg_data
, 3);
3349 gtp_recovery_reset(i2c_client_point
);
3350 gtp_enter_doze(i2c_client_point
);
3355 gtp_recovery_reset(i2c_client_point
);
3357 GTP_INFO("Request Reset.");
3358 goto exit_work_func
;
3360 #if GTP_POWER_CTRL_SLEEP
3361 case GTP_RQST_STORE_HOPPING
:
3362 GTP_INFO("Request store hopping data.");
3363 ret
= gtp_hopping_proc(i2c_client_point
, GTP_HOPPING_STORE
);
3366 GTP_ERROR("Failed to store hopping data.");
3370 GTP_INFO("Hopping data stored.");
3371 rqst_data
[2] = GTP_RQST_RESPONDED
;
3372 gtp_i2c_write(i2c_client_point
, rqst_data
, 3);
3374 goto exit_work_func
;
3376 case GTP_RQST_STORE_BAK_REF
:
3377 GTP_INFO("Request store backup reference.");
3378 ret
= gtp_bak_ref_proc(i2c_client_point
, GTP_BAK_REF_STORE
);
3381 GTP_ERROR("Failed to store backup reference data.");
3385 GTP_INFO("Backup reference data stored.");
3386 rqst_data
[2] = GTP_RQST_RESPONDED
;
3387 gtp_i2c_write(i2c_client_point
, rqst_data
, 3);
3389 goto exit_work_func
;
3393 GTP_INFO("Undefined request code: 0x%02X", rqst_data
[2]);
3394 rqst_data
[2] = GTP_RQST_RESPONDED
;
3395 gtp_i2c_write(i2c_client_point
, rqst_data
, 3);
3406 if ((finger
& 0x80) == 0)
3408 goto exit_work_func
;
3410 if((gtp_autotool_setting
== 1) && !(point_data
[GTP_ADDR_LENGTH
] & 0x40)){
3411 gtp_autotool_setting
= 0;
3414 if(gesture_value
> 0){
3415 proximity_status
= point_data
[GTP_ADDR_LENGTH
];
3416 GTP_DEBUG("REG INDEX[0x814E]:0x%02X\n", proximity_status
);
3417 if(tpd_sleep_flag
== 1){
3418 goto exit_work_func
;
3420 if (proximity_status
& 0x40) //proximity or large touch detect,enable hwm_sensor.
3422 printk(KERN_ERR
"caoyang0 test for xipin\n");
3423 //mod_timer(&buttons_timer, jiffies+HZ/50);
3424 if(gtp_autotool_setting
== 1){
3425 gtp_autotool_setting
= 0;
3426 goto exit_work_func
;
3429 input_report_key(tpd
->dev
, KEY_POWER
, 1);
3430 input_sync(tpd
->dev
);
3431 input_report_key(tpd
->dev
, KEY_POWER
, 0);
3432 input_sync(tpd
->dev
);
3435 goto exit_work_func
;
3439 #ifdef TPD_PROXIMITY
3440 if (tpd_proximity_flag
== 1)
3442 proximity_status
= point_data
[GTP_ADDR_LENGTH
];
3443 GTP_DEBUG("REG INDEX[0x814E]:0x%02X\n", proximity_status
);
3445 if (proximity_status
& 0x60) //proximity or large touch detect,enable hwm_sensor.
3447 tpd_proximity_detect
= 0;
3448 //sensor_data.values[0] = 0;
3452 tpd_proximity_detect
= 1;
3453 //sensor_data.values[0] = 1;
3457 GTP_DEBUG(" ps change\n");
3458 GTP_DEBUG("PROXIMITY STATUS:0x%02X\n", tpd_proximity_detect
);
3459 //map and store data to hwm_sensor_data
3460 sensor_data
.values
[0] = tpd_get_ps_value();
3461 sensor_data
.value_divide
= 1;
3462 sensor_data
.status
= SENSOR_STATUS_ACCURACY_MEDIUM
;
3463 //report to the up-layer
3464 ret
= hwmsen_get_interrupt_data(ID_PROXIMITY
, &sensor_data
);
3468 GTP_ERROR("Call hwmsen_get_interrupt_data fail = %d\n", err
);
3474 touch_num
= finger
& 0x0f;
3476 if (touch_num
> GTP_MAX_TOUCH
)
3478 goto exit_work_func
;
3483 u8 buf
[8 * GTP_MAX_TOUCH
] = {(GTP_READ_COOR_ADDR
+ 10) >> 8, (GTP_READ_COOR_ADDR
+ 10) & 0xff};
3485 ret
= gtp_i2c_read(i2c_client_point
, buf
, 2 + 8 * (touch_num
- 1));
3486 memcpy(&point_data
[12], &buf
[2], 8 * (touch_num
- 1));
3489 #if (GTP_HAVE_TOUCH_KEY || GTP_PEN_HAVE_BUTTON)
3490 key_value
= point_data
[3 + 8 * touch_num
];
3492 if (key_value
|| pre_key
)
3494 #if GTP_PEN_HAVE_BUTTON
3495 if (key_value
== 0x40)
3497 GTP_DEBUG("BTN_STYLUS & BTN_STYLUS2 Down.");
3498 input_report_key(pen_dev
, BTN_STYLUS
, 1);
3499 input_report_key(pen_dev
, BTN_STYLUS2
, 1);
3502 else if (key_value
== 0x10)
3504 GTP_DEBUG("BTN_STYLUS Down, BTN_STYLUS2 Up.");
3505 input_report_key(pen_dev
, BTN_STYLUS
, 1);
3506 input_report_key(pen_dev
, BTN_STYLUS2
, 0);
3509 else if (key_value
== 0x20)
3511 GTP_DEBUG("BTN_STYLUS Up, BTN_STYLUS2 Down.");
3512 input_report_key(pen_dev
, BTN_STYLUS
, 0);
3513 input_report_key(pen_dev
, BTN_STYLUS2
, 1);
3518 GTP_DEBUG("BTN_STYLUS & BTN_STYLUS2 Up.");
3519 input_report_key(pen_dev
, BTN_STYLUS
, 0);
3520 input_report_key(pen_dev
, BTN_STYLUS2
, 0);
3521 if ( (pre_key
== 0x40) || (pre_key
== 0x20) ||
3530 touch_num
= 0; // shield pen point
3531 //pre_touch = 0; // clear last pen status
3534 #if GTP_HAVE_TOUCH_KEY
3537 for (i
= 0; i
< GTP_MAX_KEY_NUM
; i
++)
3539 input_report_key(tpd
->dev
, touch_key_array
[i
], key_value
& (0x01 << i
));
3541 touch_num
= 0; // shiled fingers
3546 pre_key
= key_value
;
3548 GTP_DEBUG("pre_touch:%02x, finger:%02x.", pre_touch
, finger
);
3552 for (i
= 0; i
< touch_num
; i
++)
3554 coor_data
= &point_data
[i
* 8 + 3];
3556 id
= coor_data
[0] & 0x0F;
3557 input_x
= coor_data
[1] | coor_data
[2] << 8;
3558 input_y
= coor_data
[3] | coor_data
[4] << 8;
3559 input_w
= coor_data
[5] | coor_data
[6] << 8;
3561 // input_y=abs_y_max-input_y;
3562 // input_x=abs_x_max-input_x;
3563 // s32 temp_input_x=input_x;
3565 // input_y=temp_input_x;
3569 input_x
= TPD_WARP_X(abs_x_max
, input_x
);
3570 input_y
= TPD_WARP_Y(abs_y_max
, input_y
);
3574 if ((id
& 0x80)) // pen/stylus is activated
3576 GTP_DEBUG("Pen touch DOWN!");
3580 GTP_DEBUG("(%d)(%d, %d)[%d]", id
, input_x
, input_y
, input_w
);
3581 gtp_pen_down(input_x
, input_y
, input_w
, id
);
3587 GTP_DEBUG(" (%d)(%d, %d)[%d]", id
, input_x
, input_y
, input_w
);
3588 tpd_down(input_x
, input_y
, input_w
, id
);
3599 GTP_DEBUG("Pen touch UP!");
3607 GTP_DEBUG("Touch Release!");
3612 pre_touch
= touch_num
;
3618 input_sync(pen_dev
);
3623 input_sync(tpd
->dev
);
3628 if (!gtp_rawdiff_mode
)
3630 ret
= gtp_i2c_write(i2c_client_point
, end_cmd
, 3);
3634 GTP_ERROR("I2C write end_cmd error!");
3637 #if (GTP_COMPATIBLE_MODE && GTP_FL_LITTLE_SYSTEM)
3638 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
3642 if ((fw_block
== 0) && (block_section
== 1))
3644 GTP_INFO("Begin downloading big ss51 firmware");
3646 gtp_download_big_ss51(i2c_client_point
);
3650 } while (!kthread_should_stop());
3655 static int tpd_local_init(void)
3658 clk_tick_cnt
= 2 * HZ
; // HZ: clock ticks in 1 second generated by system
3659 GTP_DEBUG("Clock ticks for an esd cycle: %d", clk_tick_cnt
);
3660 INIT_DELAYED_WORK(>p_esd_check_work
, gtp_esd_check_func
);
3661 gtp_esd_check_workqueue
= create_workqueue("gtp_esd_check");
3662 spin_lock_init(&esd_lock
); // 2.6.39 & later
3663 // esd_lock = SPIN_LOCK_UNLOCKED; // 2.6.39 & before
3666 #if GTP_SUPPORT_I2C_DMA
3667 gpDMABuf_va
= (u8
*)dma_alloc_coherent(NULL
, GTP_DMA_MAX_TRANSACTION_LENGTH
, &gpDMABuf_pa
, GFP_KERNEL
);
3669 GTP_ERROR("[Error] Allocate DMA I2C Buffer failed!\n");
3671 memset(gpDMABuf_va
, 0, GTP_DMA_MAX_TRANSACTION_LENGTH
);
3673 if (i2c_add_driver(&tpd_i2c_driver
) != 0)
3675 GTP_ERROR("unable to add i2c driver.\n");
3679 if (tpd_load_status
== 0) //if(tpd_load_status == 0) // disable auto load touch driver for linux3.0 porting
3681 GTP_ERROR("add error touch panel driver.\n");
3682 i2c_del_driver(&tpd_i2c_driver
);
3686 input_set_abs_params(tpd
->dev
, ABS_MT_TRACKING_ID
, 0, (GTP_MAX_TOUCH
- 1), 0, 0);
3687 #ifdef TPD_HAVE_BUTTON
3688 tpd_button_setting(TPD_KEY_COUNT
, tpd_keys_local
, tpd_keys_dim_local
);// initialize tpd button data
3691 #if (defined(TPD_WARP_START) && defined(TPD_WARP_END))
3693 memcpy(tpd_wb_start
, tpd_wb_start_local
, TPD_WARP_CNT
* 4);
3694 memcpy(tpd_wb_end
, tpd_wb_start_local
, TPD_WARP_CNT
* 4);
3697 #if (defined(TPD_HAVE_CALIBRATION) && !defined(TPD_CUSTOM_CALIBRATION))
3698 memcpy(tpd_calmat
, tpd_def_calmat_local
, 8 * 4);
3699 memcpy(tpd_def_calmat
, tpd_def_calmat_local
, 8 * 4);
3702 // set vendor string
3703 tpd
->dev
->id
.vendor
= 0x00;
3704 tpd
->dev
->id
.product
= tpd_info
.pid
;
3705 tpd
->dev
->id
.version
= tpd_info
.vid
;
3707 GTP_DEBUG("end %s, %d\n", __FUNCTION__
, __LINE__
);
3713 static s8
gtp_enter_doze(struct i2c_client
*client
)
3717 u8 i2c_control_buf
[3] = {(u8
)(GTP_REG_SLEEP
>> 8), (u8
)GTP_REG_SLEEP
, 8};
3721 GTP_DEBUG("Entering gesture mode...");
3724 i2c_control_buf
[0] = 0x80;
3725 i2c_control_buf
[1] = 0x46;
3726 ret
= gtp_i2c_write(client
, i2c_control_buf
, 3);
3729 GTP_DEBUG("Failed to set gesture flag into 0x8046, %d", retry
);
3732 i2c_control_buf
[0] = 0x80;
3733 i2c_control_buf
[1] = 0x40;
3734 ret
= gtp_i2c_write(client
, i2c_control_buf
, 3);
3737 doze_status
= DOZE_ENABLED
;
3738 GTP_INFO("Gesture mode enabled.");
3743 GTP_ERROR("GTP send gesture cmd failed.");
3747 /*******************************************************
3749 Eter sleep function.
3755 Executive outcomes.0--success,non-0--fail.
3756 *******************************************************/
3757 static s8
gtp_enter_sleep(struct i2c_client
*client
)
3759 #if (GTP_COMPATIBLE_MODE && !GTP_POWER_CTRL_SLEEP)
3760 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
3762 u8 i2c_status_buf
[3] = {0x80, 0x44, 0x00};
3765 ret
= gtp_i2c_read(client
, i2c_status_buf
, 3);
3768 GTP_ERROR("[gtp_enter_sleep]Read ref status reg error.");
3771 if (i2c_status_buf
[2] & 0x80)
3774 ret
= gtp_bak_ref_proc(client
, GTP_BAK_REF_STORE
);
3777 GTP_ERROR("[gtp_enter_sleep]Store bak ref failed.");
3782 #if GTP_POWER_CTRL_SLEEP
3784 GTP_GPIO_OUTPUT(GTP_RST_PORT
, 0);
3785 GTP_GPIO_OUTPUT(GTP_INT_PORT
, 0);
3789 mt_set_gpio_mode(GPIO_CTP_EN_PIN
, GPIO_CTP_EN_PIN_M_GPIO
);
3790 mt_set_gpio_dir(GPIO_CTP_EN_PIN
, GPIO_DIR_OUT
);
3791 mt_set_gpio_out(GPIO_CTP_EN_PIN
, GPIO_OUT_ZERO
);
3793 #else // ( defined(MT6575) || defined(MT6577) || defined(MT6589) )
3795 #ifdef TPD_POWER_SOURCE_1800
3796 hwPowerDown(TPD_POWER_SOURCE_1800
, "TP");
3799 #ifdef TPD_POWER_SOURCE_CUSTOM
3800 hwPowerDown(TPD_POWER_SOURCE_CUSTOM
, "TP");
3802 hwPowerDown(MT65XX_POWER_LDO_VGP2
, "TP");
3806 GTP_INFO("GTP enter sleep by poweroff!");
3813 u8 i2c_control_buf
[3] = {(u8
)(GTP_REG_SLEEP
>> 8), (u8
)GTP_REG_SLEEP
, 5};
3816 GTP_GPIO_OUTPUT(GTP_INT_PORT
, 0);
3821 ret
= gtp_i2c_write(client
, i2c_control_buf
, 3);
3825 GTP_INFO("GTP enter sleep!");
3833 GTP_ERROR("GTP send sleep cmd failed.");
3839 /*******************************************************
3841 Wakeup from sleep mode Function.
3847 Executive outcomes.0--success,non-0--fail.
3848 *******************************************************/
3849 static s8
gtp_wakeup_sleep(struct i2c_client
*client
)
3854 GTP_DEBUG("GTP wakeup begin.");
3856 #if GTP_POWER_CTRL_SLEEP
3857 #if (GTP_COMPATIBLE_MODE && GTP_FL_LITTLE_SYSTEM)
3858 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
3862 kthread_run(gtp_resume_timeout
, (void*)NULL
, "resume_timeout");
3864 ret
= force_reset_guitar(1);
3868 gtp_recovery_reset(client
);
3870 if (!gtp_check_fw()) {
3872 gtp_recovery_reset(client
);
3876 #endif // end compatible mode & fl little system
3880 ret
= tpd_power_on(client
);
3884 GTP_ERROR("I2C Power on ERROR!");
3887 GTP_INFO("Ic wakeup by poweron");
3890 #else // esle PowerCtrlSleep
3891 while (retry
++ < 5) {
3892 //#if GTP_GESTURE_WAKEUP
3893 if(gesture_value
> 0){
3894 if (DOZE_WAKEUP
!= doze_status
)
3896 GTP_INFO("Powerkey wakeup.");
3900 GTP_INFO("Gesture wakeup.");
3902 doze_status
= DOZE_DISABLED
;
3904 mt_eint_mask(CUST_EINT_TOUCH_PANEL_NUM
);
3905 gtp_reset_guitar(client
, 20);
3906 ret
= gup_reload_fw_dsp(NULL
, GTP_FL_READ_REPAIR
);
3907 mt_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM
);
3909 GTP_ERROR("[gtp_wakeup_sleep]Reload dsp code failed.");
3912 ret
= gtp_fw_startup(client
);
3914 GTP_ERROR("[gtp_wakeup_sleep]Startup fw failed.");
3917 if (!gtp_check_fw()) {
3918 gtp_recovery_reset(client
);
3920 return 0; // succeed
3921 //#else // else gesture wakeup
3923 GTP_GPIO_OUTPUT(GTP_INT_PORT
, 1); //wake up by int gpio
3926 #if GTP_COMPATIBLE_MODE
3927 if (CHIP_TYPE_GT9F
== gtp_chip_type
) {
3928 u8 opr_buf
[2] = {0};
3930 ret
= gtp_i2c_test(client
);
3934 ret
= i2c_write_bytes(client
, 0x4180, opr_buf
, 1);
3936 GTP_DEBUG("Hold ss51 & dsp I2C error,retry:%d", retry
);
3942 ret
= i2c_read_bytes(client
, 0x4180, opr_buf
, 1);
3944 GTP_DEBUG("confirm ss51 & dsp hold, I2C error,retry:%d", retry
);
3947 if (0x0C != opr_buf
[0]) {
3948 GTP_DEBUG("ss51 & dsp not hold, val: %d, retry: %d", opr_buf
[0], retry
);
3951 GTP_DEBUG("ss51 & dsp has been hold");
3953 ret
= gtp_fw_startup(client
);
3955 GTP_ERROR("[gtp_wakeup_sleep]Startup fw failed.");
3958 GTP_INFO("flashless wakeup sleep success");
3961 force_reset_guitar(0);
3965 //#endif // end compatible mode
3967 ret
= gtp_i2c_test(client
);
3970 GTP_INFO("GTP wakeup sleep.");
3971 //#if (!GTP_GESTURE_WAKEUP)
3972 if(!(gesture_value
> 0))
3979 gtp_reset_guitar(client
, 20);
3980 #endif // end gesture wakeup
3984 GTP_ERROR("wakeup retry timeout, process esd reset");
3985 force_reset_guitar(0);
3987 #endif // end PowerCtrlSleep
3988 GTP_ERROR("GTP wakeup sleep failed.");
3992 /* Function to manage low power suspend */
3993 static void tpd_suspend(struct early_suspend
*h
)
3997 GTP_INFO("System suspend.");
3999 #ifdef TPD_PROXIMITY
4001 if (tpd_proximity_flag
== 1)
4007 #if (GTP_COMPATIBLE_MODE && GTP_FL_LITTLE_SYSTEM)
4014 gtp_esd_switch(i2c_client_point
, SWITCH_OFF
);
4016 //#if GTP_GESTURE_WAKEUP
4017 if(gesture_value
> 0){
4018 ret
= gtp_enter_doze(i2c_client_point
);
4021 mt_eint_mask(CUST_EINT_TOUCH_PANEL_NUM
);
4022 ret
= gtp_enter_sleep(i2c_client_point
);
4027 GTP_ERROR("GTP early suspend failed.");
4029 // to avoid waking up while not sleeping, delay 48 + 10ms to ensure reliability
4033 /* Function to manage power-on resume */
4034 static void tpd_resume(struct early_suspend
*h
)
4038 GTP_INFO("System resume.");
4040 #ifdef TPD_PROXIMITY
4042 if (tpd_proximity_flag
== 1)
4049 ret
= gtp_wakeup_sleep(i2c_client_point
);
4053 GTP_ERROR("GTP later resume failed.");
4056 #if GTP_COMPATIBLE_MODE
4057 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
4064 gtp_send_cfg(i2c_client_point
);
4067 #if GTP_CHARGER_SWITCH
4068 gtp_charger_switch(1); // force update
4072 //#if GTP_GESTURE_WAKEUP
4073 if(gesture_value
> 0){
4074 doze_status
= DOZE_DISABLED
;
4077 mt_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM
);
4082 gtp_init_ext_watchdog(i2c_client_point
);
4083 gtp_esd_switch(i2c_client_point
, SWITCH_ON
);
4088 static struct tpd_driver_t tpd_device_driver
=
4090 .tpd_device_name
= "gt9xx",
4091 .tpd_local_init
= tpd_local_init
,
4092 .suspend
= tpd_suspend
,
4093 .resume
= tpd_resume
,
4094 #ifdef TPD_HAVE_BUTTON
4095 .tpd_have_button
= 1,
4097 .tpd_have_button
= 0,
4101 /* called when loaded into kernel */
4102 static int __init
tpd_driver_init(void)
4104 if(g_boot_mode
== KERNEL_POWER_OFF_CHARGING_BOOT
|| g_boot_mode
== LOW_POWER_OFF_CHARGING_BOOT
) //add by zero
4106 GTP_INFO("MediaTek gt91xx touch panel driver init\n");
4107 #ifdef I2C_BUS_NUMBER
4108 i2c_register_board_info(I2C_BUS_NUMBER
, &i2c_tpd
, 1);
4110 i2c_register_board_info(0, &i2c_tpd
, 1);
4112 if (tpd_driver_add(&tpd_device_driver
) < 0)
4113 GTP_INFO("add generic driver failed\n");
4118 /* should never be called */
4119 static void __exit
tpd_driver_exit(void)
4121 GTP_INFO("MediaTek gt91xx touch panel driver exit\n");
4122 tpd_driver_remove(&tpd_device_driver
);
4125 module_init(tpd_driver_init
);
4126 module_exit(tpd_driver_exit
);