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 extern u8 tpd_sensor_id
;
98 int gtp_autotool_setting
;
99 EXPORT_SYMBOL(gtp_autotool_setting
);
100 extern struct tpd_device
*tpd
;
102 static int tpd_sleep_flag
= 0;
103 static int tpd_flag
= 0;
105 static struct task_struct
*thread
= NULL
;
106 static DECLARE_WAIT_QUEUE_HEAD(waiter
);
108 #ifdef TPD_HAVE_BUTTON
109 static int tpd_keys_local
[TPD_KEY_COUNT
] = TPD_KEYS
;
110 static int tpd_keys_dim_local
[TPD_KEY_COUNT
][4] = TPD_KEYS_DIM
;
119 static DOZE_T doze_status
= DOZE_DISABLED
;
120 static s8
gtp_enter_doze(struct i2c_client
*client
);
122 #if GTP_CHARGER_SWITCH
124 #define CHR_CON0 (0xF7000000+0x2FA00)
126 extern kal_bool
upmu_is_chr_det(void);
128 static void gtp_charger_switch(s32 dir_update
);
131 #if GTP_HAVE_TOUCH_KEY
132 const u16 touch_key_array
[] = GTP_KEY_TAB
;
133 #define GTP_MAX_KEY_NUM ( sizeof( touch_key_array )/sizeof( touch_key_array[0] ) )
136 #if (defined(TPD_WARP_START) && defined(TPD_WARP_END))
137 static int tpd_wb_start_local
[TPD_WARP_CNT
] = TPD_WARP_START
;
138 static int tpd_wb_end_local
[TPD_WARP_CNT
] = TPD_WARP_END
;
141 #if (defined(TPD_HAVE_CALIBRATION) && !defined(TPD_CUSTOM_CALIBRATION))
142 //static int tpd_calmat_local[8] = TPD_CALIBRATION_MATRIX;
143 static int tpd_def_calmat_local
[8] = TPD_CALIBRATION_MATRIX
;
146 #if GTP_SUPPORT_I2C_DMA
147 s32
i2c_dma_write(struct i2c_client
*client
, u16 addr
, u8
*txbuf
, s32 len
);
148 s32
i2c_dma_read(struct i2c_client
*client
, u16 addr
, u8
*rxbuf
, s32 len
);
150 static u8
*gpDMABuf_va
= NULL
;
151 static u32 gpDMABuf_pa
= 0;
154 s32
gtp_send_cfg(struct i2c_client
*client
);
155 void gtp_reset_guitar(struct i2c_client
*client
, s32 ms
);
156 static void tpd_eint_interrupt_handler(void);
157 static int touch_event_handler(void *unused
);
158 static int tpd_i2c_probe(struct i2c_client
*client
, const struct i2c_device_id
*id
);
159 static int tpd_i2c_detect(struct i2c_client
*client
, struct i2c_board_info
*info
);
160 static int tpd_i2c_remove(struct i2c_client
*client
);
161 s32
gtp_i2c_read_dbl_check(struct i2c_client
*client
, u16 addr
, u8
*rxbuf
, int len
);
162 extern void mt_eint_unmask(unsigned int line
);
163 extern void mt_eint_mask(unsigned int line
);
165 #if GTP_CREATE_WR_NODE
166 extern s32
init_wr_node(struct i2c_client
*);
167 extern void uninit_wr_node(void);
170 #if (GTP_ESD_PROTECT || GTP_COMPATIBLE_MODE)
171 static s32
force_reset_guitar(s32
);
175 static int clk_tick_cnt
= 200;
178 extern unsigned char gtp_default_FW_fl
[];
179 static struct delayed_work gtp_esd_check_work
;
180 static struct workqueue_struct
*gtp_esd_check_workqueue
= NULL
;
181 static s32
gtp_init_ext_watchdog(struct i2c_client
*client
);
182 static void gtp_esd_check_func(struct work_struct
*);
183 void gtp_esd_switch(struct i2c_client
*client
, s32 on
);
187 #define TPD_PROXIMITY_VALID_REG 0x814E
188 #define TPD_PROXIMITY_ENABLE_REG 0x8042
189 static u8 tpd_proximity_flag
= 0;
190 static u8 tpd_proximity_detect
= 1;//0-->close ; 1--> far away
193 struct i2c_client
*i2c_client_point
= NULL
;
194 static const struct i2c_device_id tpd_i2c_id
[] = {{"gt9xx", 0}, {}};
195 static unsigned short force
[] = {0, 0xBA, I2C_CLIENT_END
, I2C_CLIENT_END
};
196 static const unsigned short *const forces
[] = { force
, NULL
};
197 //static struct i2c_client_address_data addr_data = { .forces = forces,};
198 static struct i2c_board_info __initdata i2c_tpd
= { I2C_BOARD_INFO("gt9xx", (0xBA >> 1))};
199 static struct i2c_driver tpd_i2c_driver
=
201 .probe
= tpd_i2c_probe
,
202 .remove
= tpd_i2c_remove
,
203 .detect
= tpd_i2c_detect
,
204 .driver
.name
= "gt9xx",
205 .id_table
= tpd_i2c_id
,
206 .address_list
= (const unsigned short *) forces
,
209 static u8 config
[GTP_CONFIG_MAX_LENGTH
+ GTP_ADDR_LENGTH
]
210 = {GTP_REG_CONFIG_DATA
>> 8, GTP_REG_CONFIG_DATA
& 0xff};
215 u16 pid
; //product id //
216 u16 vid
; //version id //
220 st_tpd_info tpd_info
;
224 u8 gtp_rawdiff_mode
= 0;
226 u8 grp_cfg_version
= 0;
228 u8 pnl_init_error
= 0;
231 struct input_dev
*pen_dev
;
234 #if GTP_COMPATIBLE_MODE
237 /*[PLATFORM]-Add-BEGIN by falin.luo@tcl.com 2015/4/29*/
238 /*change counter data type to u16, because GTP_CHK_FS_MNT_MAX is 300 */
239 u16 gtp_ref_retries
= 0;
240 u16 gtp_clk_retries
= 0;
241 static u16 is_data_mounted
= 0;
242 /*[PLATFORM]-Add-NED by falin.luo@tcl.com 2015/4/29*/
243 CHIP_TYPE_T gtp_chip_type
= CHIP_TYPE_GT9
;
244 u8 rqst_processing
= 0;
246 u8 after_912_1020
= 0;
249 //add by caoyang for ·À¶¶
250 //static struct timer_list buttons_timer;
251 //static DECLARE_WAIT_QUEUE_HEAD(button_waitq);
254 extern u8
gup_check_fs_mounted(char *path_name
);
255 extern u8
gup_clk_calibration(void);
256 extern int gup_reload_fw_dsp(void *dir
, u8 dwn_mode
);
257 extern s32
gup_fw_download_proc(void *dir
, u8 dwn_mode
);
258 void gtp_get_chip_type(struct i2c_client
*client
);
259 u8
gtp_fw_startup(struct i2c_client
*client
);
260 static u8
gtp_bak_ref_proc(struct i2c_client
*client
, u8 mode
);
261 static u8
gtp_main_clk_proc(struct i2c_client
*client
);
262 static void gtp_recovery_reset(struct i2c_client
*client
);
264 #if GTP_COMPATIBLE_MODE
265 u8 gtp_hopping_buf
[16] = {0};
268 #if GTP_FL_LITTLE_SYSTEM
269 u8 power_is_down
= 0;
270 u8 little_fw_mode
= 0;
271 u8 fw_block
= 0; // 0: not started, 1 ~ 11/12 ss51 seg a/b each 2K, 13: ss51 seg b, 10K/12K
272 u8 block_section
= 1; // 1 ~ 8, 2K total, 256 Bytes each
274 char symbolic_state1
[][20] = {"OTHERS", "BUFFER_FULL", "CHECK_COMPLETE", "CHECK_ERROR", "WAIT_CHECK", "OTHERS", "OTHERS", "OTHERS"};
275 char symbolic_state2
[][20] = {"OTHERS", "IS_A_SEG", "IS_B_SEG_FIRST", "IS_B_SEG_OTHER", "IS_B_SEG_LAST", "OTHERS", "OTHERS", "OTHERS"};
277 static void tpd_up(s32 x
, s32 y
, s32 id
);
278 extern u8
gup_burn_ss51_block(struct i2c_client
*client
, s32 block_section
, s32 fw_block
, u16
*fw_chksum
);
279 extern u8
gup_burn_ss51_seg_b(struct i2c_client
*client
, s32 size
, u16
*fw_chksum
);
284 /* proc file system */
285 s32
i2c_read_bytes(struct i2c_client
*client
, u16 addr
, u8
*rxbuf
, int len
);
286 s32
i2c_write_bytes(struct i2c_client
*client
, u16 addr
, u8
*txbuf
, int len
);
288 static ssize_t
gt91xx_config_read_proc(struct file
*, char __user
*, size_t, loff_t
*);
289 static ssize_t
gt91xx_config_write_proc(struct file
*, const char __user
*, size_t, loff_t
*);
291 static struct proc_dir_entry
*gt91xx_config_proc
= NULL
;
292 static const struct file_operations config_proc_ops
= {
293 .owner
= THIS_MODULE
,
294 .read
= gt91xx_config_read_proc
,
295 .write
= gt91xx_config_write_proc
,
298 #define VELOCITY_CUSTOM
299 #ifdef VELOCITY_CUSTOM
300 #include <linux/device.h>
301 #include <linux/miscdevice.h>
302 #include <asm/uaccess.h>
304 #ifndef TPD_VELOCITY_CUSTOM_X
305 #define TPD_VELOCITY_CUSTOM_X 10
307 #ifndef TPD_VELOCITY_CUSTOM_Y
308 #define TPD_VELOCITY_CUSTOM_Y 10
311 // for magnify velocity********************************************
312 #define TOUCH_IOC_MAGIC 'A'
314 #define TPD_GET_VELOCITY_CUSTOM_X _IO(TOUCH_IOC_MAGIC,0)
315 #define TPD_GET_VELOCITY_CUSTOM_Y _IO(TOUCH_IOC_MAGIC,1)
317 int g_v_magnify_x
= TPD_VELOCITY_CUSTOM_X
;
318 int g_v_magnify_y
= TPD_VELOCITY_CUSTOM_Y
;
319 static int tpd_misc_open(struct inode
*inode
, struct file
*file
)
321 return nonseekable_open(inode
, file
);
324 static int tpd_misc_release(struct inode
*inode
, struct file
*file
)
329 static long tpd_unlocked_ioctl(struct file
*file
, unsigned int cmd
,
337 if (_IOC_DIR(cmd
) & _IOC_READ
)
339 err
= !access_ok(VERIFY_WRITE
, (void __user
*)arg
, _IOC_SIZE(cmd
));
341 else if (_IOC_DIR(cmd
) & _IOC_WRITE
)
343 err
= !access_ok(VERIFY_READ
, (void __user
*)arg
, _IOC_SIZE(cmd
));
348 printk("tpd: access error: %08X, (%2d, %2d)\n", cmd
, _IOC_DIR(cmd
), _IOC_SIZE(cmd
));
354 case TPD_GET_VELOCITY_CUSTOM_X
:
355 data
= (void __user
*) arg
;
363 if (copy_to_user(data
, &g_v_magnify_x
, sizeof(g_v_magnify_x
)))
371 case TPD_GET_VELOCITY_CUSTOM_Y
:
372 data
= (void __user
*) arg
;
380 if (copy_to_user(data
, &g_v_magnify_y
, sizeof(g_v_magnify_y
)))
389 printk("tpd: unknown IOCTL: 0x%08x\n", cmd
);
399 static struct file_operations tpd_fops
=
401 // .owner = THIS_MODULE,
402 .open
= tpd_misc_open
,
403 .release
= tpd_misc_release
,
404 .unlocked_ioctl
= tpd_unlocked_ioctl
,
406 /*----------------------------------------------------------------------------*/
407 static struct miscdevice tpd_misc_device
=
409 .minor
= MISC_DYNAMIC_MINOR
,
410 .name
= "gt9xx_touch",
414 //**********************************************
417 static int tpd_i2c_detect(struct i2c_client
*client
, struct i2c_board_info
*info
)
419 strcpy(info
->type
, "mtk-tpd");
424 static s32
tpd_get_ps_value(void)
426 return tpd_proximity_detect
;
429 static s32
tpd_enable_ps(s32 enable
)
437 tpd_proximity_flag
= 1;
438 GTP_INFO("TPD proximity function to be on.");
443 tpd_proximity_flag
= 0;
444 GTP_INFO("TPD proximity function to be off.");
447 ret
= i2c_write_bytes(i2c_client_point
, TPD_PROXIMITY_ENABLE_REG
, &state
, 1);
451 GTP_ERROR("TPD %s proximity cmd failed.", state
? "enable" : "disable");
455 GTP_INFO("TPD proximity function %s success.", state
? "enable" : "disable");
459 s32
tpd_ps_operate(void *self
, u32 command
, void *buff_in
, s32 size_in
,
460 void *buff_out
, s32 size_out
, s32
*actualout
)
464 hwm_sensor_data
*sensor_data
;
469 if ((buff_in
== NULL
) || (size_in
< sizeof(int)))
471 GTP_ERROR("Set delay parameter error!");
479 if ((buff_in
== NULL
) || (size_in
< sizeof(int)))
481 GTP_ERROR("Enable sensor parameter error!");
486 value
= *(int *)buff_in
;
487 err
= tpd_enable_ps(value
);
492 case SENSOR_GET_DATA
:
493 if ((buff_out
== NULL
) || (size_out
< sizeof(hwm_sensor_data
)))
495 GTP_ERROR("Get sensor data parameter error!");
500 sensor_data
= (hwm_sensor_data
*)buff_out
;
501 sensor_data
->values
[0] = tpd_get_ps_value();
502 sensor_data
->value_divide
= 1;
503 sensor_data
->status
= SENSOR_STATUS_ACCURACY_MEDIUM
;
509 GTP_ERROR("proxmy sensor operate function no this parameter %d!\n", command
);
519 static ssize_t
gt91xx_config_read_proc(struct file
*file
, char __user
*page
, size_t size
, loff_t
*ppos
)
522 char temp_data
[GTP_CONFIG_MAX_LENGTH
+ 2] = {0};
525 if (*ppos
) // CMD call again
530 ptr
+= sprintf(ptr
, "==== GT9XX config init value====\n");
532 for (i
= 0 ; i
< GTP_CONFIG_MAX_LENGTH
; i
++)
534 ptr
+= sprintf(ptr
, "0x%02X ", config
[i
+ 2]);
537 ptr
+= sprintf(ptr
, "\n");
540 ptr
+= sprintf(ptr
, "\n");
542 ptr
+= sprintf(ptr
, "==== GT9XX config real value====\n");
543 i2c_read_bytes(i2c_client_point
, GTP_REG_CONFIG_DATA
, temp_data
, GTP_CONFIG_MAX_LENGTH
);
545 for (i
= 0 ; i
< GTP_CONFIG_MAX_LENGTH
; i
++)
547 ptr
+= sprintf(ptr
, "0x%02X ", temp_data
[i
]);
550 ptr
+= sprintf(ptr
, "\n");
556 static ssize_t
gt91xx_config_write_proc(struct file
*filp
, const char __user
*buffer
, size_t count
, loff_t
*off
)
560 GTP_DEBUG("write count %d\n", count
);
562 if (count
> GTP_CONFIG_MAX_LENGTH
)
564 GTP_ERROR("size not match [%d:%d]\n", GTP_CONFIG_MAX_LENGTH
, count
);
568 if (copy_from_user(&config
[2], buffer
, count
))
570 GTP_ERROR("copy from user fail\n");
574 ret
= gtp_send_cfg(i2c_client_point
);
575 abs_x_max
= (config
[RESOLUTION_LOC
+ 1] << 8) + config
[RESOLUTION_LOC
];
576 abs_y_max
= (config
[RESOLUTION_LOC
+ 3] << 8) + config
[RESOLUTION_LOC
+ 2];
577 int_type
= (config
[TRIGGER_LOC
]) & 0x03;
581 GTP_ERROR("send config failed.");
587 #if GTP_SUPPORT_I2C_DMA
588 s32
i2c_dma_read(struct i2c_client
*client
, u16 addr
, u8
*rxbuf
, s32 len
)
594 struct i2c_msg msg
[2] =
597 .addr
= (client
->addr
& I2C_MASK_FLAG
),
601 .timing
= I2C_MASTER_CLOCK
604 .addr
= (client
->addr
& I2C_MASK_FLAG
),
605 .ext_flag
= (client
->ext_flag
| I2C_ENEXT_FLAG
| I2C_DMA_FLAG
),
607 .buf
= (u8
*)gpDMABuf_pa
,
609 .timing
= I2C_MASTER_CLOCK
613 buffer
[0] = (addr
>> 8) & 0xFF;
614 buffer
[1] = addr
& 0xFF;
619 //GTP_DEBUG("dma i2c read: 0x%04X, %d bytes(s)", addr, len);
620 for (retry
= 0; retry
< 5; ++retry
)
622 ret
= i2c_transfer(client
->adapter
, &msg
[0], 2);
627 memcpy(rxbuf
, gpDMABuf_va
, len
);
630 GTP_ERROR("Dma I2C Read Error: 0x%04X, %d byte(s), err-code: %d", addr
, len
, ret
);
635 s32
i2c_dma_write(struct i2c_client
*client
, u16 addr
, u8
*txbuf
, s32 len
)
639 u8
*wr_buf
= gpDMABuf_va
;
643 .addr
= (client
->addr
& I2C_MASK_FLAG
),
644 .ext_flag
= (client
->ext_flag
| I2C_ENEXT_FLAG
| I2C_DMA_FLAG
),
646 .buf
= (u8
*)gpDMABuf_pa
,
648 .timing
= I2C_MASTER_CLOCK
651 wr_buf
[0] = (u8
)((addr
>> 8) & 0xFF);
652 wr_buf
[1] = (u8
)(addr
& 0xFF);
657 //GTP_DEBUG("dma i2c write: 0x%04X, %d bytes(s)", addr, len);
658 memcpy(wr_buf
+2, txbuf
, len
);
659 for (retry
= 0; retry
< 5; ++retry
)
661 ret
= i2c_transfer(client
->adapter
, &msg
, 1);
668 GTP_ERROR("Dma I2C Write Error: 0x%04X, %d byte(s), err-code: %d", addr
, len
, ret
);
672 s32
i2c_read_bytes_dma(struct i2c_client
*client
, u16 addr
, u8
*rxbuf
, s32 len
)
679 //GTP_DEBUG("Read bytes dma: 0x%04X, %d byte(s)", addr, len);
682 if (left
> GTP_DMA_MAX_TRANSACTION_LENGTH
)
684 read_len
= GTP_DMA_MAX_TRANSACTION_LENGTH
;
690 ret
= i2c_dma_read(client
, addr
, rd_buf
, read_len
);
693 GTP_ERROR("dma read failed");
704 s32
i2c_write_bytes_dma(struct i2c_client
*client
, u16 addr
, u8
*txbuf
, s32 len
)
712 //GTP_DEBUG("Write bytes dma: 0x%04X, %d byte(s)", addr, len);
715 if (left
> GTP_DMA_MAX_I2C_TRANSFER_SIZE
)
717 write_len
= GTP_DMA_MAX_I2C_TRANSFER_SIZE
;
723 ret
= i2c_dma_write(client
, addr
, wr_buf
, write_len
);
727 GTP_ERROR("dma i2c write failed!");
740 int i2c_read_bytes_non_dma(struct i2c_client
*client
, u16 addr
, u8
*rxbuf
, int len
)
742 u8 buffer
[GTP_ADDR_LENGTH
];
747 struct i2c_msg msg
[2] =
750 //.addr = ((client->addr &I2C_MASK_FLAG) | (I2C_ENEXT_FLAG)),
751 .addr
= ((client
->addr
&I2C_MASK_FLAG
) | (I2C_PUSHPULL_FLAG
)),
754 .len
= GTP_ADDR_LENGTH
,
755 .timing
= I2C_MASTER_CLOCK
758 //.addr = ((client->addr &I2C_MASK_FLAG) | (I2C_ENEXT_FLAG)),
759 .addr
= ((client
->addr
&I2C_MASK_FLAG
) | (I2C_PUSHPULL_FLAG
)),
761 .timing
= I2C_MASTER_CLOCK
768 //GTP_DEBUG("i2c_read_bytes to device %02X address %04X len %d\n", client->addr, addr, len);
772 buffer
[0] = ((addr
+ offset
) >> 8) & 0xFF;
773 buffer
[1] = (addr
+ offset
) & 0xFF;
775 msg
[1].buf
= &rxbuf
[offset
];
777 if (left
> MAX_TRANSACTION_LENGTH
)
779 msg
[1].len
= MAX_TRANSACTION_LENGTH
;
780 left
-= MAX_TRANSACTION_LENGTH
;
781 offset
+= MAX_TRANSACTION_LENGTH
;
791 while (i2c_transfer(client
->adapter
, &msg
[0], 2) != 2)
798 GTP_ERROR("I2C read 0x%X length=%d failed\n", addr
+ offset
, len
);
808 int i2c_read_bytes(struct i2c_client
*client
, u16 addr
, u8
*rxbuf
, int len
)
810 #if GTP_SUPPORT_I2C_DMA
811 return i2c_read_bytes_dma(client
, addr
, rxbuf
, len
);
813 return i2c_read_bytes_non_dma(client
, addr
, rxbuf
, len
);
817 s32
gtp_i2c_read(struct i2c_client
*client
, u8
*buf
, s32 len
)
820 u16 addr
= (buf
[0] << 8) + buf
[1];
822 ret
= i2c_read_bytes_non_dma(client
, addr
, &buf
[2], len
- 2);
830 //#if GTP_GESTURE_WAKEUP
831 if(gesture_value
> 0){
832 if (DOZE_ENABLED
== doze_status
)
838 #if GTP_COMPATIBLE_MODE
839 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
841 #if GTP_FL_LITTLE_SYSTEM
845 GTP_INFO("Little fw enabled, no esd reset.");
850 gtp_recovery_reset(client
);
856 gtp_reset_guitar(client
, 20);
863 s32
gtp_i2c_read_dbl_check(struct i2c_client
*client
, u16 addr
, u8
*rxbuf
, int len
)
866 u8 confirm_buf
[16] = {0};
871 memset(buf
, 0xAA, 16);
872 buf
[0] = (u8
)(addr
>> 8);
873 buf
[1] = (u8
)(addr
& 0xFF);
874 gtp_i2c_read(client
, buf
, len
+ 2);
876 memset(confirm_buf
, 0xAB, 16);
877 confirm_buf
[0] = (u8
)(addr
>> 8);
878 confirm_buf
[1] = (u8
)(addr
& 0xFF);
879 gtp_i2c_read(client
, confirm_buf
, len
+ 2);
881 if (!memcmp(buf
, confirm_buf
, len
+2))
883 memcpy(rxbuf
, confirm_buf
+2, len
);
887 GTP_ERROR("i2c read 0x%04X, %d bytes, double check failed!", addr
, len
);
891 int i2c_write_bytes_non_dma(struct i2c_client
*client
, u16 addr
, u8
*txbuf
, int len
)
893 u8 buffer
[MAX_TRANSACTION_LENGTH
];
900 //.addr = ((client->addr &I2C_MASK_FLAG) | (I2C_ENEXT_FLAG)),
901 .addr
= ((client
->addr
&I2C_MASK_FLAG
) | (I2C_PUSHPULL_FLAG
)),
904 .timing
= I2C_MASTER_CLOCK
,
911 //GTP_DEBUG("i2c_write_bytes to device %02X address %04X len %d\n", client->addr, addr, len);
917 buffer
[0] = ((addr
+ offset
) >> 8) & 0xFF;
918 buffer
[1] = (addr
+ offset
) & 0xFF;
920 if (left
> MAX_I2C_TRANSFER_SIZE
)
922 memcpy(&buffer
[GTP_ADDR_LENGTH
], &txbuf
[offset
], MAX_I2C_TRANSFER_SIZE
);
923 msg
.len
= MAX_TRANSACTION_LENGTH
;
924 left
-= MAX_I2C_TRANSFER_SIZE
;
925 offset
+= MAX_I2C_TRANSFER_SIZE
;
929 memcpy(&buffer
[GTP_ADDR_LENGTH
], &txbuf
[offset
], left
);
930 msg
.len
= left
+ GTP_ADDR_LENGTH
;
934 //GTP_DEBUG("byte left %d offset %d\n", left, offset);
936 while (i2c_transfer(client
->adapter
, &msg
, 1) != 1)
944 GTP_ERROR("I2C write 0x%X%X length=%d failed\n", buffer
[0], buffer
[1], len
);
953 int i2c_write_bytes(struct i2c_client
*client
, u16 addr
, u8
*txbuf
, int len
)
955 #if GTP_SUPPORT_I2C_DMA
956 return i2c_write_bytes_dma(client
, addr
, txbuf
, len
);
958 return i2c_write_bytes_non_dma(client
, addr
, txbuf
, len
);
962 s32
gtp_i2c_write(struct i2c_client
*client
, u8
*buf
, s32 len
)
965 u16 addr
= (buf
[0] << 8) + buf
[1];
967 ret
= i2c_write_bytes_non_dma(client
, addr
, &buf
[2], len
- 2);
975 //#if GTP_GESTURE_WAKEUP
976 if(gesture_value
> 0){
977 if (DOZE_ENABLED
== doze_status
)
983 #if GTP_COMPATIBLE_MODE
984 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
986 #if GTP_FL_LITTLE_SYSTEM
990 GTP_INFO("Little fw enabled, no esd reset.");
995 gtp_recovery_reset(client
);
1001 gtp_reset_guitar(client
, 20);
1009 /*******************************************************
1011 Send config Function.
1017 Executive outcomes.0--success,non-0--fail.
1018 *******************************************************/
1019 s32
gtp_send_cfg(struct i2c_client
*client
)
1023 #if GTP_DRIVER_SEND_CFG
1027 GTP_INFO("Ic fixed config, no config sent!");
1030 else if (pnl_init_error
)
1032 GTP_INFO("Error occurred in init_panel, no config sent!");
1036 GTP_INFO("Driver Send Config");
1037 for (retry
= 0; retry
< 5; retry
++)
1039 ret
= gtp_i2c_write(client
, config
, GTP_CONFIG_MAX_LENGTH
+ GTP_ADDR_LENGTH
);
1051 /*******************************************************
1053 Read goodix touchscreen version function.
1056 client: i2c client struct.
1057 version:address to store version info
1060 Executive outcomes.0---succeed.
1061 *******************************************************/
1062 s32
gtp_read_version(struct i2c_client
*client
, u16
*version
)
1066 u8 buf
[8] = {GTP_REG_VERSION
>> 8, GTP_REG_VERSION
& 0xff};
1070 ret
= gtp_i2c_read(client
, buf
, sizeof(buf
));
1074 GTP_ERROR("GTP read version failed");
1080 *version
= (buf
[7] << 8) | buf
[6];
1083 tpd_info
.vid
= *version
;
1084 tpd_info
.pid
= 0x00;
1086 for (i
= 0; i
< 4; i
++)
1088 if (buf
[i
+ 2] < 0x30)break;
1090 tpd_info
.pid
|= ((buf
[i
+ 2] - 0x30) << ((3 - i
) * 4));
1095 GTP_INFO("IC VERSION: %c%c%c_%02x%02x",
1096 buf
[2], buf
[3], buf
[4], buf
[7], buf
[6]);
1100 GTP_INFO("IC VERSION:%c%c%c%c_%02x%02x",
1101 buf
[2], buf
[3], buf
[4], buf
[5], buf
[7], buf
[6]);
1103 sprintf(tpd_firmware_version_val
,"%02x%02x",buf
[7], buf
[6]);
1104 tpd_firmware_version_val
[4] = '\0';
1105 printk(KERN_ERR
"caoyang test tpd_firmware_version_val:%s",tpd_firmware_version_val
);
1109 #if GTP_DRIVER_SEND_CFG
1110 /*******************************************************
1112 Get information from ic, such as resolution and
1115 client: i2c client private struct.
1118 FAIL: i2c failed, SUCCESS: i2c ok
1119 *******************************************************/
1120 static s32
gtp_get_info(struct i2c_client
*client
)
1122 u8 opr_buf
[6] = {0};
1125 opr_buf
[0] = (u8
)((GTP_REG_CONFIG_DATA
+1) >> 8);
1126 opr_buf
[1] = (u8
)((GTP_REG_CONFIG_DATA
+1) & 0xFF);
1128 ret
= gtp_i2c_read(client
, opr_buf
, 6);
1134 abs_x_max
= (opr_buf
[3] << 8) + opr_buf
[2];
1135 abs_y_max
= (opr_buf
[5] << 8) + opr_buf
[4];
1137 opr_buf
[0] = (u8
)((GTP_REG_CONFIG_DATA
+6) >> 8);
1138 opr_buf
[1] = (u8
)((GTP_REG_CONFIG_DATA
+6) & 0xFF);
1140 ret
= gtp_i2c_read(client
, opr_buf
, 3);
1145 int_type
= opr_buf
[2] & 0x03;
1147 GTP_INFO("X_MAX = %d, Y_MAX = %d, TRIGGER = 0x%02x",
1148 abs_x_max
,abs_y_max
, int_type
);
1155 /*******************************************************
1157 GTP initialize function.
1160 client: i2c client private struct.
1163 Executive outcomes.0---succeed.
1164 *******************************************************/
1165 static s32
gtp_init_panel(struct i2c_client
*client
)
1169 #if GTP_DRIVER_SEND_CFG
1175 u8 cfg_info_group1
[] = CTP_CFG_GROUP1
;
1176 u8 cfg_info_group2
[] = CTP_CFG_GROUP2
;
1177 u8 cfg_info_group3
[] = CTP_CFG_GROUP3
;
1178 u8 cfg_info_group4
[] = CTP_CFG_GROUP4
;
1179 u8 cfg_info_group5
[] = CTP_CFG_GROUP5
;
1180 u8 cfg_info_group6
[] = CTP_CFG_GROUP6
;
1181 u8
*send_cfg_buf
[] = {cfg_info_group1
, cfg_info_group2
, cfg_info_group3
,
1182 cfg_info_group4
, cfg_info_group5
, cfg_info_group6
};
1183 u8 cfg_info_len
[] = { CFG_GROUP_LEN(cfg_info_group1
),
1184 CFG_GROUP_LEN(cfg_info_group2
),
1185 CFG_GROUP_LEN(cfg_info_group3
),
1186 CFG_GROUP_LEN(cfg_info_group4
),
1187 CFG_GROUP_LEN(cfg_info_group5
),
1188 CFG_GROUP_LEN(cfg_info_group6
)};
1190 GTP_DEBUG("Config Groups\' Lengths: %d, %d, %d, %d, %d, %d",
1191 cfg_info_len
[0], cfg_info_len
[1], cfg_info_len
[2], cfg_info_len
[3],
1192 cfg_info_len
[4], cfg_info_len
[5]);
1194 if ((!cfg_info_len
[1]) && (!cfg_info_len
[2]) &&
1195 (!cfg_info_len
[3]) && (!cfg_info_len
[4]) &&
1202 #if GTP_COMPATIBLE_MODE
1203 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
1208 ret
= gtp_i2c_read_dbl_check(client
, GTP_REG_SENSOR_ID
, &sensor_id
, 1);
1211 if (sensor_id
>= 0x06)
1213 GTP_ERROR("Invalid sensor_id(0x%02X), No Config Sent!", sensor_id
);
1220 GTP_ERROR("Failed to get sensor_id, No config sent!");
1224 GTP_INFO("Sensor_ID: %d", sensor_id
);
1227 cfg_len
= cfg_info_len
[sensor_id
];
1228 tpd_config_version
= send_cfg_buf
[sensor_id
][0];
1229 tpd_sensor_id
= sensor_id
;
1230 GTP_INFO("CTP_CONFIG_GROUP%d used, config length: %d", sensor_id
+ 1, cfg_len
);
1232 if (cfg_len
< GTP_CONFIG_MIN_LENGTH
)
1234 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);
1239 #if GTP_COMPATIBLE_MODE
1240 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
1247 ret
= gtp_i2c_read_dbl_check(client
, GTP_REG_CONFIG_DATA
, &opr_buf
[0], 1);
1251 GTP_DEBUG("CFG_CONFIG_GROUP%d Config Version: %d, 0x%02X; IC Config Version: %d, 0x%02X", sensor_id
+1,
1252 send_cfg_buf
[sensor_id
][0], send_cfg_buf
[sensor_id
][0], opr_buf
[0], opr_buf
[0]);
1254 if (opr_buf
[0] < 90)
1256 grp_cfg_version
= send_cfg_buf
[sensor_id
][0]; // backup group config version
1257 send_cfg_buf
[sensor_id
][0] = 0x00;
1260 else // treated as fixed config, not send config
1262 GTP_INFO("Ic fixed config with config version(%d)", opr_buf
[0]);
1264 gtp_get_info(client
);
1270 GTP_ERROR("Failed to get ic config version!No config sent!");
1275 memset(&config
[GTP_ADDR_LENGTH
], 0, GTP_CONFIG_MAX_LENGTH
);
1276 memcpy(&config
[GTP_ADDR_LENGTH
], send_cfg_buf
[sensor_id
], cfg_len
);
1279 config
[RESOLUTION_LOC
] = (u8
)GTP_MAX_WIDTH
;
1280 config
[RESOLUTION_LOC
+ 1] = (u8
)(GTP_MAX_WIDTH
>>8);
1281 config
[RESOLUTION_LOC
+ 2] = (u8
)GTP_MAX_HEIGHT
;
1282 config
[RESOLUTION_LOC
+ 3] = (u8
)(GTP_MAX_HEIGHT
>>8);
1284 if (GTP_INT_TRIGGER
== 0) //RISING
1286 config
[TRIGGER_LOC
] &= 0xfe;
1288 else if (GTP_INT_TRIGGER
== 1) //FALLING
1290 config
[TRIGGER_LOC
] |= 0x01;
1292 #endif // GTP_CUSTOM_CFG
1295 for (i
= GTP_ADDR_LENGTH
; i
< cfg_len
; i
++)
1297 check_sum
+= config
[i
];
1299 config
[cfg_len
] = (~check_sum
) + 1;
1301 #else // DRIVER NOT SEND CONFIG
1302 cfg_len
= GTP_CONFIG_MAX_LENGTH
;
1303 ret
= gtp_i2c_read(client
, config
, cfg_len
+ GTP_ADDR_LENGTH
);
1306 GTP_ERROR("Read Config Failed, Using DEFAULT Resolution & INT Trigger!");
1307 abs_x_max
= GTP_MAX_WIDTH
;
1308 abs_y_max
= GTP_MAX_HEIGHT
;
1309 int_type
= GTP_INT_TRIGGER
;
1311 #endif // GTP_DRIVER_SEND_CFG
1314 if ((abs_x_max
== 0) && (abs_y_max
== 0))
1316 abs_x_max
= (config
[RESOLUTION_LOC
+ 1] << 8) + config
[RESOLUTION_LOC
];
1317 abs_y_max
= (config
[RESOLUTION_LOC
+ 3] << 8) + config
[RESOLUTION_LOC
+ 2];
1318 int_type
= (config
[TRIGGER_LOC
]) & 0x03;
1321 #if GTP_COMPATIBLE_MODE
1322 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
1327 driver_num
= config
[GTP_REG_MATRIX_DRVNUM
- GTP_REG_CONFIG_DATA
+ 2];
1328 sensor_num
= config
[GTP_REG_MATRIX_SENNUM
- GTP_REG_CONFIG_DATA
+ 2];
1332 driver_num
= (config
[CFG_LOC_DRVA_NUM
]&0x1F) + (config
[CFG_LOC_DRVB_NUM
]&0x1F);
1333 sensor_num
= (config
[CFG_LOC_SENS_NUM
]&0x0F) + ((config
[CFG_LOC_SENS_NUM
]>>4)&0x0F);
1336 have_key
= config
[GTP_REG_HAVE_KEY
- GTP_REG_CONFIG_DATA
+ 2] & 0x01; // have key or not
1342 if ((cfg_len
== 186) && after_912_1020
)
1344 GTP_DEBUG("Firmware after 912_1020, set config length to 228.");
1348 config
[GTP_ADDR_LENGTH
+ 226] = config
[GTP_ADDR_LENGTH
+ 184];
1350 memset(&config
[GTP_ADDR_LENGTH
+ 184], 0x00, 228 - 186);
1352 config
[GTP_ADDR_LENGTH
+ 227] = 0x01;
1355 tpd_x_line
= driver_num
;
1356 tpd_y_line
= sensor_num
;
1357 GTP_INFO("Driver * Sensor: %d * %d(Key: %d), X_MAX = %d, Y_MAX = %d, TRIGGER = 0x%02x",
1358 driver_num
, sensor_num
, have_key
, abs_x_max
,abs_y_max
,int_type
);
1363 #if GTP_DRIVER_SEND_CFG
1364 ret
= gtp_send_cfg(client
);
1367 GTP_ERROR("Send config error.");
1369 // set config version to CTP_CFG_GROUP
1370 // for resume to send config
1371 config
[GTP_ADDR_LENGTH
] = grp_cfg_version
;
1373 for (i
= GTP_ADDR_LENGTH
; i
< cfg_len
; i
++)
1375 check_sum
+= config
[i
];
1377 config
[cfg_len
] = (~check_sum
) + 1;
1379 GTP_INFO("X_MAX = %d, Y_MAX = %d, TRIGGER = 0x%02x",
1380 abs_x_max
,abs_y_max
,int_type
);
1387 static s8
gtp_i2c_test(struct i2c_client
*client
)
1398 ret
= i2c_read_bytes(client
, GTP_REG_HW_INFO
, (u8
*)&hw_info
, sizeof(hw_info
));
1400 if ((!ret
) && (hw_info
== 0x00900600)) //20121212
1405 GTP_ERROR("GTP_REG_HW_INFO : %08X", hw_info
);
1406 GTP_ERROR("GTP i2c test failed time %d.", retry
);
1415 /*******************************************************
1417 Set INT pin as input for FW sync.
1420 If the INT is high, It means there is pull up resistor attached on the INT pin.
1421 Pull low the INT pin manaully for FW sync.
1422 *******************************************************/
1423 void gtp_int_sync(s32 ms
)
1425 GTP_GPIO_OUTPUT(GTP_INT_PORT
, 0);
1427 GTP_GPIO_AS_INT(GTP_INT_PORT
);
1430 void gtp_reset_guitar(struct i2c_client
*client
, s32 ms
)
1432 GTP_INFO("GTP RESET!\n");
1433 GTP_GPIO_OUTPUT(GTP_RST_PORT
, 0);
1435 GTP_GPIO_OUTPUT(GTP_INT_PORT
, client
->addr
== 0x14);
1438 GTP_GPIO_OUTPUT(GTP_RST_PORT
, 1);
1440 msleep(6); //must >= 6ms
1442 #if GTP_COMPATIBLE_MODE
1443 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
1451 gtp_init_ext_watchdog(i2c_client_point
);
1455 static int tpd_power_on(struct i2c_client
*client
)
1458 int reset_count
= 0;
1461 GTP_GPIO_OUTPUT(GTP_RST_PORT
, 0);
1462 GTP_GPIO_OUTPUT(GTP_INT_PORT
, 0);
1467 mt_set_gpio_mode(GPIO_CTP_EN_PIN
, GPIO_CTP_EN_PIN_M_GPIO
);
1468 mt_set_gpio_dir(GPIO_CTP_EN_PIN
, GPIO_DIR_OUT
);
1469 mt_set_gpio_out(GPIO_CTP_EN_PIN
, GPIO_OUT_ONE
);
1471 #else // ( defined(MT6575) || defined(MT6577) || defined(MT6589) )
1473 #ifdef TPD_POWER_SOURCE_CUSTOM
1474 hwPowerOn(TPD_POWER_SOURCE_CUSTOM
, VOL_2800
, "TP");
1476 hwPowerOn(MT65XX_POWER_LDO_VGP2
, VOL_2800
, "TP");
1478 #ifdef TPD_POWER_SOURCE_1800
1479 hwPowerOn(TPD_POWER_SOURCE_1800
, VOL_1800
, "TP");
1484 gtp_reset_guitar(client
, 20);
1486 #if GTP_COMPATIBLE_MODE
1487 gtp_get_chip_type(client
);
1489 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
1491 ret
= gup_fw_download_proc(NULL
, GTP_FL_FW_BURN
);
1495 GTP_ERROR("[tpd_power_on]Download fw failed.");
1496 if(reset_count
++ < TPD_MAX_RESET_COUNT
)
1506 ret
= gtp_fw_startup(client
);
1509 GTP_ERROR("[tpd_power_on]Startup fw failed.");
1510 if(reset_count
++ < TPD_MAX_RESET_COUNT
)
1523 ret
= gtp_i2c_test(client
);
1527 GTP_ERROR("I2C communication ERROR!");
1529 if (reset_count
< TPD_MAX_RESET_COUNT
)
1539 //**************** For GT9XXF Start ********************//
1540 #if GTP_COMPATIBLE_MODE
1543 void gtp_get_chip_type(struct i2c_client
*client
)
1545 u8 opr_buf
[10] = {0x00};
1550 ret
= gtp_i2c_read_dbl_check(client
, GTP_REG_CHIP_TYPE
, opr_buf
, 10);
1554 GTP_ERROR("Failed to get chip-type, set chip type default: GOODIX_GT9");
1555 gtp_chip_type
= CHIP_TYPE_GT9
;
1559 if (!memcmp(opr_buf
, "GOODIX_GT9", 10))
1561 gtp_chip_type
= CHIP_TYPE_GT9
;
1565 gtp_chip_type
= CHIP_TYPE_GT9F
;
1567 GTP_INFO("Chip Type: %s", (gtp_chip_type
== CHIP_TYPE_GT9
) ? "GOODIX_GT9" : "GOODIX_GT9F");
1570 static u8
gtp_bak_ref_proc(struct i2c_client
*client
, u8 mode
)
1575 struct file
*flp
= NULL
;
1578 u32 ref_seg_len
= 0;
1583 GTP_DEBUG("[gtp_bak_ref_proc]Driver:%d,Sensor:%d.", driver_num
, sensor_num
);
1585 //check file-system mounted
1586 GTP_DEBUG("[gtp_bak_ref_proc]Waiting for FS %d", gtp_ref_retries
);
1587 if (/*gup_check_fs_mounted("/data") == FAIL*/!is_data_mounted
)/*[PLATFORM]-MOD by falin.luo@tcl.com 2015/4/29*/
1589 GTP_DEBUG("[gtp_bak_ref_proc]/data not mounted");
1590 if(gtp_ref_retries
++ < GTP_CHK_FS_MNT_MAX
)
1592 msleep(100);/*[PLATFORM]-ADD by falin.luo@tcl.com 2015/4/29*/
1598 GTP_DEBUG("[gtp_bak_ref_proc]/data mounted !!!!");
1603 ref_seg_len
= (driver_num
* (sensor_num
- 1) + 2) * 2;
1605 ref_len
= ref_seg_len
* 6; // for GT950, backup-reference for six segments
1609 ref_len
= driver_num
*(sensor_num
-2)*2 + 4;
1610 ref_seg_len
= ref_len
;
1614 refp
= (u8
*)kzalloc(ref_len
, GFP_KERNEL
);
1617 GTP_ERROR("Failed to allocate memory for reference buffer!");
1620 memset(refp
, 0, ref_len
);
1623 flp
= filp_open(GTP_BAK_REF_PATH
, O_RDWR
| O_CREAT
, 0666);
1626 GTP_ERROR("Failed to open/create %s.", GTP_BAK_REF_PATH
);
1627 if (GTP_BAK_REF_SEND
== mode
)
1629 goto default_bak_ref
;
1639 case GTP_BAK_REF_SEND
:
1641 flp
->f_op
->llseek(flp
, 0, SEEK_SET
);
1642 ret
= flp
->f_op
->read(flp
, (char *)refp
, ref_len
, &flp
->f_pos
);
1645 GTP_ERROR("Read ref file failed, send default bak ref.");
1646 goto default_bak_ref
;
1649 for (j
= 0; j
< ref_grps
; ++j
)
1652 for(i
=0; i
<ref_seg_len
-2; i
+=2)
1654 ref_chksum
+= ((refp
[i
+ j
* ref_seg_len
]<<8) + refp
[i
+ 1 + j
* ref_seg_len
]);
1657 GTP_DEBUG("Reference chksum:0x%04X", ref_chksum
&0xFF);
1658 tmp
= ref_chksum
+ (refp
[ref_seg_len
+ j
* ref_seg_len
-2]<<8) + refp
[ref_seg_len
+ j
* ref_seg_len
-1];
1661 GTP_DEBUG("Invalid checksum for reference, reset reference.");
1662 memset(&refp
[j
* ref_seg_len
], 0, ref_seg_len
);
1663 refp
[ref_seg_len
- 1 + j
* ref_seg_len
] = 0x01;
1667 if (j
== (ref_grps
- 1))
1669 GTP_INFO("Reference data in %s used.", GTP_BAK_REF_PATH
);
1674 ret
= i2c_write_bytes(client
, GTP_REG_BAK_REF
, refp
, ref_len
);
1677 GTP_ERROR("Write ref i2c error.");
1684 case GTP_BAK_REF_STORE
:
1686 ret
= i2c_read_bytes(client
, GTP_REG_BAK_REF
, refp
, ref_len
);
1689 GTP_ERROR("Read ref i2c error.");
1693 flp
->f_op
->llseek(flp
, 0, SEEK_SET
);
1694 flp
->f_op
->write(flp
, (char *)refp
, ref_len
, &flp
->f_pos
);
1699 GTP_ERROR("Invalid Argument(%d) for backup reference", mode
);
1708 for (j
= 0; j
< ref_grps
; ++j
)
1710 memset(&refp
[j
* ref_seg_len
], 0, ref_seg_len
);
1711 refp
[j
* ref_seg_len
+ ref_seg_len
- 1] = 0x01; // checksum = 1
1713 ret
= i2c_write_bytes(client
, GTP_REG_BAK_REF
, refp
, ref_len
);
1714 if (flp
&& !IS_ERR(flp
))
1716 GTP_INFO("Write backup-reference data into %s", GTP_BAK_REF_PATH
);
1717 flp
->f_op
->llseek(flp
, 0, SEEK_SET
);
1718 flp
->f_op
->write(flp
, (char*)refp
, ref_len
, &flp
->f_pos
);
1722 GTP_ERROR("Failed to load the default backup reference");
1734 if (flp
&& !IS_ERR(flp
))
1736 filp_close(flp
, NULL
);
1741 u8
gtp_fw_startup(struct i2c_client
*client
)
1748 ret
= i2c_write_bytes(client
, 0x8041, wr_buf
, 1);
1751 GTP_ERROR("I2C error to firmware startup.");
1754 //release SS51 & DSP
1756 i2c_write_bytes(client
, 0x4180, wr_buf
, 1);
1761 //check fw run status
1762 i2c_read_bytes(client
, 0x8041, wr_buf
, 1);
1763 if(0xAA == wr_buf
[0])
1765 GTP_ERROR("IC works abnormally,startup failed.");
1770 GTP_DEBUG("IC works normally,Startup success.");
1772 i2c_write_bytes(client
, 0x8041, wr_buf
, 1);
1778 static void gtp_recovery_reset(struct i2c_client
*client
)
1781 gtp_esd_switch(client
, SWITCH_OFF
);
1783 force_reset_guitar(0);
1785 gtp_esd_switch(client
, SWITCH_ON
);
1789 static u8
gtp_check_clk_legality(u8
*p_clk_buf
)
1792 u8 clk_chksum
= p_clk_buf
[5];
1794 for(i
= 0; i
< 5; i
++)
1796 if((p_clk_buf
[i
] < 50) || (p_clk_buf
[i
] > 120) ||
1797 (p_clk_buf
[i
] != p_clk_buf
[0]))
1801 clk_chksum
+= p_clk_buf
[i
];
1804 if((i
== 5) && (clk_chksum
== 0))
1806 GTP_DEBUG("Valid main clock data.");
1809 GTP_ERROR("Invalid main clock data.");
1813 static u8
gtp_main_clk_proc(struct i2c_client
*client
)
1817 u8 clk_cal_result
= 0;
1819 u8 gtp_clk_buf
[6] = {0};
1820 struct file
*flp
= NULL
;
1822 GTP_DEBUG("[gtp_main_clk_proc]Waiting for FS %d", gtp_clk_retries
);/*[PLATFORM]-MOD by falin.luo@tcl.com 2015/4/29*/
1823 if (/*gup_check_fs_mounted("/data") == FAIL*/!is_data_mounted
)/*[PLATFORM]-MOD by falin.luo@tcl.com 2015/4/29*/
1825 GTP_DEBUG("[gtp_main_clk_proc]/data not mounted");
1826 if(gtp_clk_retries
++ < GTP_CHK_FS_MNT_MAX
)
1828 msleep(100);/*[PLATFORM]-ADD by falin.luo@tcl.com 2015/4/29*/
1833 GTP_ERROR("[gtp_main_clk_proc]Wait for file system timeout,need cal clk");
1838 GTP_DEBUG("[gtp_main_clk_proc]/data mounted !!!!");
1839 flp
= filp_open(GTP_MAIN_CLK_PATH
, O_RDWR
| O_CREAT
, 0666);
1842 flp
->f_op
->llseek(flp
, 0, SEEK_SET
);
1843 ret
= flp
->f_op
->read(flp
, (char *)gtp_clk_buf
, 6, &flp
->f_pos
);
1846 ret
= gtp_check_clk_legality(gtp_clk_buf
);
1849 GTP_DEBUG("[gtp_main_clk_proc]Open & read & check clk file success.");
1854 GTP_ERROR("[gtp_main_clk_proc]Check clk file failed,need cal clk");
1859 gtp_esd_switch(client
, SWITCH_OFF
);
1861 clk_cal_result
= gup_clk_calibration();
1862 force_reset_guitar(0);
1863 GTP_DEBUG("&&&&&&&&&&clk cal result:%d", clk_cal_result
);
1866 gtp_esd_switch(client
, SWITCH_ON
);
1869 if(clk_cal_result
< 50 || clk_cal_result
> 120)
1871 GTP_ERROR("Invalid main clock: %d", clk_cal_result
);
1876 for(i
= 0;i
< 5; i
++)
1878 gtp_clk_buf
[i
] = clk_cal_result
;
1879 clk_chksum
+= gtp_clk_buf
[i
];
1881 gtp_clk_buf
[5] = 0 - clk_chksum
;
1885 ret
= i2c_write_bytes(client
, 0x8020, gtp_clk_buf
, 6);
1887 if (flp
&& !IS_ERR(flp
))
1889 flp
->f_op
->llseek(flp
, 0, SEEK_SET
);
1890 flp
->f_op
->write(flp
, (char *)gtp_clk_buf
, 6, &flp
->f_pos
);
1895 GTP_ERROR("[gtp_main_clk_proc]send main clk i2c error!");
1904 if (flp
&& !IS_ERR(flp
))
1906 filp_close(flp
, NULL
);
1911 u8
gtp_verify_hopping_buf(struct i2c_client
*client
)
1916 for (i
= 0; i
< 6; i
+= 2)
1918 checksum
+= (gtp_hopping_buf
[i
] << 8) + gtp_hopping_buf
[i
+1];
1920 if ((checksum
+ ((u16
)(gtp_hopping_buf
[6] << 8) + (u16
)gtp_hopping_buf
[7])) & 0xFFFF)
1922 GTP_ERROR("Wrong checksum for hopping buffer, get hopping data from config instead!");
1923 goto get_config_hopping
;
1926 for (i
= 0; i
< 8; i
++)
1928 if (gtp_hopping_buf
[i
] != gtp_hopping_buf
[i
+8])
1930 GTP_ERROR("Hopping buffer is not identical, get data from config instead!");
1931 goto get_config_hopping
;
1934 GTP_DEBUG("Hopping buffer is okay");
1938 memcpy(gtp_hopping_buf
, &config
[2 + 0x8065 - GTP_REG_CONFIG_DATA
], 4);
1939 gtp_hopping_buf
[4] = 0xAA;
1940 gtp_hopping_buf
[5] = 0x55;
1943 for (i
= 0; i
< 6; i
+= 2)
1945 checksum
+= (gtp_hopping_buf
[i
] << 8) + gtp_hopping_buf
[i
+1];
1947 checksum
= 0 - checksum
;
1948 gtp_hopping_buf
[6] = (u8
)(checksum
>> 8);
1949 gtp_hopping_buf
[7] = (u8
)(checksum
& 0xFF);
1951 for (i
= 0; i
< 8; i
++)
1953 gtp_hopping_buf
[i
+8] = gtp_hopping_buf
[i
];
1958 u8
gtp_hopping_proc(struct i2c_client
*client
, s32 mode
)
1962 GTP_DEBUG("Store hopping data, wait for /data mounted.");
1963 /*[PLATFORM]-MOD-BEGIN by falin.luo@tcl.com 2015/4/29*/
1964 // ret = gup_check_fs_mounted("/data");
1965 ret
= is_data_mounted
? SUCCESS
: FAIL
;
1966 /*[PLATFORM]-MOD-END by falin.luo@tcl.com 2015/4/29*/
1970 GTP_DEBUG("/data not mounted.");
1973 GTP_DEBUG("/data Mounted!");
1975 if (GTP_HOPPING_SEND
== mode
)
1977 gtp_verify_hopping_buf(client
);
1979 ret
= i2c_write_bytes(client
, 0x8030, gtp_hopping_buf
, 16);
1991 ret
= i2c_read_bytes(client
, 0x8030, gtp_hopping_buf
, 16);
1995 GTP_ERROR("Failed to read hopping data from hopping buffer, get from config instead.");
1998 return gtp_verify_hopping_buf(client
);
2002 #if GTP_FL_LITTLE_SYSTEM
2003 s32
gtp_resume_timeout(void *none
)
2006 GTP_DEBUG("Resume timeout thread kicks off.");
2008 while (timeout
++ < (10 * 10))
2011 if (!little_fw_mode
)
2013 GTP_DEBUG("Resume timeout thread terminated while counting.");
2020 GTP_INFO("Download big ss51 firmware timeout, process esd reset.");
2022 gtp_recovery_reset(i2c_client_point
);
2028 u8
gtp_get_state1(struct i2c_client
*client
)
2033 ret
= i2c_read_bytes(client
, GTP_REG_STATE1
, &state1
, 1);
2037 GTP_ERROR("Failed to get state1!");
2043 u8
gtp_get_state2(struct i2c_client
*client
)
2048 ret
= i2c_read_bytes(client
, GTP_REG_STATE2
, &state2
, 1);
2052 GTP_ERROR("Failed to get state2!");
2059 u8
gtp_send_check_info(struct i2c_client
*client
, u16 fw_chksum
)
2066 u16 start_addr
= 0x0000;
2067 u8 checkinfo_buf
[10] = {0};
2081 state1
= BUFFER_FULL
;
2083 start_addr
= (0xC000 + (fw_block
- 1) * 1024 * 2);
2088 state1
= BUFFER_FULL
;
2090 start_addr
= 0xF800;
2095 state1
= BUFFER_FULL
;
2097 start_addr
= 0xF000;
2102 state1
= BUFFER_FULL
;
2103 state2
= IS_B_SEG_FIRST
;
2104 start_addr
= 0xE800;
2109 state1
= WAIT_CHECK
;
2110 state2
= IS_B_SEG_LAST
;
2111 start_addr
= 0xC000;
2115 GTP_ERROR("Invalid firmware block(%d) for checkinfo.", fw_block
);
2119 checkinfo_buf
[3] = bank
;
2120 checkinfo_buf
[4] = (u8
)(start_addr
>> 8);
2121 checkinfo_buf
[5] = (u8
)(start_addr
& 0xFF);
2122 checkinfo_buf
[7] = state2
;
2123 checkinfo_buf
[8] = state1
;
2125 GTP_DEBUG("fw_block: %d, fw_chksum: 0x%04X", fw_block
, fw_chksum
);
2128 checkinfo_buf
[6] = 80;
2132 checkinfo_buf
[6] = 16;
2135 checkinfo_buf
[0] = (u8
)(fw_chksum
>> 8);
2136 checkinfo_buf
[1] = (u8
)(fw_chksum
& 0xFF);
2139 for (ret
= 0; ret
< 6; ret
++)
2141 checksum
+= checkinfo_buf
[3 + ret
];
2143 checkinfo_buf
[2] = 1 - checksum
;
2145 ret
= i2c_write_bytes(client
, GTP_REG_CHECKINFO
, checkinfo_buf
, 9);
2148 GTP_ERROR("Failed to send checkinfo!");
2153 GTP_DEBUG("Send checkinfo successfully!");
2160 u8
gtp_resume_fw_startup(struct i2c_client
*client
)
2166 GTP_INFO("Big ss51 firmware startup.");
2168 while (retry
++ < 10)
2171 ret
= i2c_write_bytes(client
, 0x4180, &buf
, 1); // hold ss51 & dsp
2174 GTP_ERROR("Failed to hold ss51 & dsp.");
2179 ret
= i2c_read_bytes(client
, 0x4180, &buf
, 1);
2182 GTP_ERROR("Failed to get hold ss51 & dsp status.");
2188 GTP_DEBUG("SS51 & Dsp confirm hold!");
2195 GTP_ERROR("Hold ss51 & dsp retry exhausted.");
2200 i2c_write_bytes(client
, 0x4048, &buf
, 1); // select bank3
2203 i2c_write_bytes(client
, 0x4049, &buf
, 1);
2205 return gtp_fw_startup(client
);
2208 u8
gtp_download_seg_b(struct i2c_client
*client
)
2214 if (block_section
!= 10)
2217 i2c_write_bytes(client
, 0x4048, &state1
, 1); // select bank0
2219 ret
= gup_burn_ss51_seg_b(client
, 10, &fw_chksum
);
2223 GTP_ERROR("Failed to burn ss51 seg B, process reburn.");
2227 ret
= gtp_send_check_info(i2c_client_point
, fw_chksum
);
2230 GTP_ERROR("Send checkinfo failed, process resend.");
2236 state1
= gtp_get_state1(client
);
2238 if (CHECK_COMPLETE
== state1
)
2240 GTP_INFO("Burn ss51 Block12 successfully");
2242 else if (CHECK_ERROR
== state1
)
2244 GTP_DEBUG("Big SS51 Seg B check error, process reburn!");
2249 GTP_ERROR("Big SS51 Seg B check imcomplete(state1:%s), process recheck.", symbolic_state1
[state1
&0x07]);
2253 ret
= gtp_resume_fw_startup(client
);
2258 GTP_ERROR("Big ss51 firmware startup failed, process esd reset.");
2261 gtp_recovery_reset(i2c_client_point
);
2266 GTP_INFO("Switch to big ss51 firmware successfully!");
2271 gtp_esd_switch(client
, SWITCH_ON
);
2278 u8
gtp_download_big_ss51(struct i2c_client
*client
)
2283 static u16 fw_chksum
= 0x0000;
2285 //GTP_DEBUG("Block: %d, Block Section: %d", fw_block, block_section);
2286 if (!little_fw_mode
)
2288 GTP_ERROR("Download big ss51 timeout!");
2292 if (block_section
== 10) // one firmware block burned
2299 state1
= gtp_get_state1(i2c_client_point
);
2300 state2
= gtp_get_state2(i2c_client_point
);
2302 GTP_DEBUG("state1: %02X (%s), state2: %02X (%s)", state1
, symbolic_state1
[state1
&0x07], state2
, symbolic_state2
[state2
&0x07]);
2304 if (CHECK_COMPLETE
== state1
)
2307 GTP_DEBUG("Burn ss51 Block%d successfully!", fw_block
);
2311 gtp_esd_switch(client
, SWITCH_OFF
);
2313 tpd_up(0, 0, 0); // release all
2314 input_sync(tpd
->dev
);
2315 GTP_DEBUG("Release touch manually.");
2317 for (i
= 0; i
< 5; i
++)
2319 if (!little_fw_mode
|| (fw_block
!= 12))
2321 GTP_ERROR("Download big ss51 timeout!");
2324 ret
= gtp_download_seg_b(client
);
2334 else if (CHECK_ERROR
== state1
)
2336 GTP_ERROR("Block%d check error, process reburn.", fw_block
);
2342 GTP_DEBUG("Block%d check incomplete, process recheck.", fw_block
);
2346 if (block_section
< 9)
2348 ret
= gup_burn_ss51_block(i2c_client_point
, block_section
, fw_block
+1, &fw_chksum
);
2351 GTP_ERROR("Burn block%d section%d failed, reburn block%d", fw_block
+1, block_section
, fw_block
+1);
2357 if (block_section
== 9) // one firmware block downloaded
2361 ret
= gtp_send_check_info(i2c_client_point
, fw_chksum
);
2369 //************* For GT9XXF End **********************//
2372 static void gtp_pen_init(void)
2376 pen_dev
= input_allocate_device();
2377 if (pen_dev
== NULL
)
2379 GTP_ERROR("Failed to allocate input device for pen/stylus.");
2383 pen_dev
->evbit
[0] = BIT_MASK(EV_SYN
) | BIT_MASK(EV_KEY
) | BIT_MASK(EV_ABS
) ;
2384 pen_dev
->keybit
[BIT_WORD(BTN_TOUCH
)] = BIT_MASK(BTN_TOUCH
);
2386 set_bit(BTN_TOOL_PEN
, pen_dev
->keybit
);
2387 set_bit(INPUT_PROP_DIRECT
, pen_dev
->propbit
);
2388 //set_bit(INPUT_PROP_POINTER, pen_dev->propbit);
2390 #if GTP_PEN_HAVE_BUTTON
2391 input_set_capability(pen_dev
, EV_KEY
, BTN_STYLUS
);
2392 input_set_capability(pen_dev
, EV_KEY
, BTN_STYLUS2
);
2395 input_set_abs_params(pen_dev
, ABS_MT_POSITION_X
, 0, TPD_RES_X
, 0, 0);
2396 input_set_abs_params(pen_dev
, ABS_MT_POSITION_Y
, 0, TPD_RES_Y
, 0, 0);
2397 input_set_abs_params(pen_dev
, ABS_MT_PRESSURE
, 0, 255, 0, 0);
2398 input_set_abs_params(pen_dev
, ABS_MT_TOUCH_MAJOR
, 0, 255, 0, 0);
2399 input_set_abs_params(pen_dev
, ABS_MT_TRACKING_ID
, 0, 255, 0, 0);
2401 pen_dev
->name
= "mtk-pen";
2402 pen_dev
->phys
= "input/ts";
2403 pen_dev
->id
.bustype
= BUS_I2C
;
2405 ret
= input_register_device(pen_dev
);
2408 GTP_ERROR("Register %s input device failed", pen_dev
->name
);
2413 static void gtp_pen_down(s32 x
, s32 y
, s32 size
, s32 id
)
2415 input_report_key(pen_dev
, BTN_TOOL_PEN
, 1);
2416 input_report_key(pen_dev
, BTN_TOUCH
, 1);
2417 input_report_abs(pen_dev
, ABS_MT_POSITION_X
, x
);
2418 input_report_abs(pen_dev
, ABS_MT_POSITION_Y
, y
);
2419 if ((!size
) && (!id
))
2421 input_report_abs(pen_dev
, ABS_MT_PRESSURE
, 100);
2422 input_report_abs(pen_dev
, ABS_MT_TOUCH_MAJOR
, 100);
2426 input_report_abs(pen_dev
, ABS_MT_PRESSURE
, size
);
2427 input_report_abs(pen_dev
, ABS_MT_TOUCH_MAJOR
, size
);
2428 input_report_abs(pen_dev
, ABS_MT_TRACKING_ID
, id
);
2430 input_mt_sync(pen_dev
);
2433 static void gtp_pen_up(void)
2435 input_report_key(pen_dev
, BTN_TOOL_PEN
, 0);
2436 input_report_key(pen_dev
, BTN_TOUCH
, 0);
2441 static s32
tpd_i2c_probe_next(struct i2c_client
*client
)
2449 ret
= tpd_power_on(client
);
2453 GTP_ERROR("I2C communication ERROR!");
2456 ret
= gtp_read_version(client
, &version_info
);
2460 GTP_ERROR("Read version failed.");
2463 ret
= gtp_init_panel(client
);
2467 GTP_ERROR("GTP init panel failed.");
2470 #if GTP_CREATE_WR_NODE
2471 init_wr_node(client
);
2473 thread
= kthread_run(touch_event_handler
, 0, TPD_DEVICE
);
2478 err
= PTR_ERR(thread
);
2479 GTP_ERROR(TPD_DEVICE
" failed to create kernel thread: %d\n", err
);
2482 mt_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM
);
2485 ret
= gup_init_update_proc(client
);
2489 GTP_ERROR("Create update thread error.");
2494 gtp_esd_switch(client
, SWITCH_ON
);
2501 static ssize_t
cfg_load_enable_store(struct device
*dev
,
2502 struct device_attribute
*attr
,
2503 const char *buf
, size_t count
)
2505 tpd_i2c_probe_next(i2c_client_point
);
2508 static ssize_t
cfg_load_enable_show(struct device
*dev
,
2509 struct device_attribute
*attr
,
2514 static DEVICE_ATTR(cfg_load_enable
, S_IRUGO
|S_IWUSR
, cfg_load_enable_show
, cfg_load_enable_store
);
2516 /*[PLATFORM]-Add-BEGIN by falin.luo@tcl.com 2015/4/29*/
2517 /*sys interface to get and set the data partition mount status*/
2518 #ifdef GTP_COMPATIBLE_MODE
2520 static ssize_t
data_is_mount_store(struct device
*dev
,
2521 struct device_attribute
*attr
,
2522 const char *buf
, size_t count
)
2524 GTP_INFO("enter %s", __func__
);
2527 is_data_mounted
= ((buf
[0] == '1') ? 1 : 0);
2529 GTP_INFO("is_data_mount = %d, buf = %s", is_data_mounted
, buf
);
2533 static ssize_t
data_is_mount_show(struct device
*dev
,
2534 struct device_attribute
*attr
,
2537 return snprintf(buf
, PAGE_SIZE
, "is_data_mounted = %d\n", is_data_mounted
);
2540 static DEVICE_ATTR(data_is_mount
, 0644, data_is_mount_show
, data_is_mount_store
);
2544 /*[PLATFORM]-Add-END by falin.luo@tcl.com 2015/4/29*/
2547 static struct miscdevice cfg_misc_device
=
2549 .minor
= MISC_DYNAMIC_MINOR
,
2551 // .fops = &tpd_fops,
2555 static void buttons_timer_function(unsigned long data
)
2557 printk(KERN_ERR
"caoyang1\n");
2558 input_report_key(tpd
->dev
, KEY_POWER
, 1);
2559 input_sync(tpd
->dev
);
2560 input_report_key(tpd
->dev
, KEY_POWER
, 0);
2561 input_sync(tpd
->dev
);
2567 static s32
tpd_i2c_probe(struct i2c_client
*client
, const struct i2c_device_id
*id
)
2574 #if GTP_HAVE_TOUCH_KEY
2577 #ifdef TPD_PROXIMITY
2578 struct hwmsen_object obj_ps
;
2581 i2c_client_point
= client
;
2582 //add by caoyang for ·À¶¶
2583 //do not use the timer because it cause bug
2585 init_timer(&buttons_timer
);
2586 buttons_timer
.function
= buttons_timer_function
;
2587 add_timer(&buttons_timer
);
2590 ret
= tpd_power_on(client
);
2594 GTP_ERROR("I2C communication ERROR!");
2597 #ifdef VELOCITY_CUSTOM
2599 if ((err
= misc_register(&tpd_misc_device
)))
2601 printk("mtk_tpd: tpd_misc_device register failed\n");
2606 ret
= gtp_read_version(client
, &version_info
);
2610 GTP_ERROR("Read version failed.");
2613 ret
= gtp_init_panel(client
);
2617 GTP_ERROR("GTP init panel failed.");
2620 // Create proc file system
2621 gt91xx_config_proc
= proc_create(GT91XX_CONFIG_PROC_FILE
, 0666, NULL
, &config_proc_ops
);
2622 if (gt91xx_config_proc
== NULL
)
2624 GTP_ERROR("create_proc_entry %s failed\n", GT91XX_CONFIG_PROC_FILE
);
2628 GTP_INFO("create proc entry %s success", GT91XX_CONFIG_PROC_FILE
);
2631 #if GTP_CREATE_WR_NODE
2632 init_wr_node(client
);
2635 thread
= kthread_run(touch_event_handler
, 0, TPD_DEVICE
);
2640 err
= PTR_ERR(thread
);
2641 GTP_ERROR(TPD_DEVICE
" failed to create kernel thread: %d\n", err
);
2646 #if GTP_HAVE_TOUCH_KEY
2648 for (idx
= 0; idx
< GTP_MAX_KEY_NUM
; idx
++)
2650 input_set_capability(tpd
->dev
, EV_KEY
, touch_key_array
[idx
]);
2654 input_set_capability(tpd
->dev
, EV_KEY
, KEY_POWER
);
2660 mt_set_gpio_mode(GPIO_CTP_EINT_PIN
, GPIO_CTP_EINT_PIN_M_EINT
);
2661 mt_set_gpio_dir(GPIO_CTP_EINT_PIN
, GPIO_DIR_IN
);
2662 mt_set_gpio_pull_enable(GPIO_CTP_EINT_PIN
, GPIO_PULL_DISABLE
);
2667 if (!int_type
) //EINTF_TRIGGER
2669 mt_eint_registration(CUST_EINT_TOUCH_PANEL_NUM
, EINTF_TRIGGER_RISING
, tpd_eint_interrupt_handler
, 1);
2673 mt_eint_registration(CUST_EINT_TOUCH_PANEL_NUM
, EINTF_TRIGGER_FALLING
, tpd_eint_interrupt_handler
, 1);
2679 mt_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM
);
2682 ret
= gup_init_update_proc(client
);
2686 GTP_ERROR("Create update thread error.");
2690 #ifdef TPD_PROXIMITY
2691 //obj_ps.self = cm3623_obj;
2692 obj_ps
.polling
= 0; //0--interrupt mode;1--polling mode;
2693 obj_ps
.sensor_operate
= tpd_ps_operate
;
2695 if ((err
= hwmsen_attach(ID_PROXIMITY
, &obj_ps
)))
2697 GTP_ERROR("hwmsen attach fail, return:%d.", err
);
2703 gtp_esd_switch(client
, SWITCH_ON
);
2706 tpd_load_status
= 1;
2708 misc_register(&cfg_misc_device
);
2709 /*[PLATFORM]-Add-BEGIN by falin.luo@tcl.com 2015/4/29*/
2710 #ifdef GTP_COMPATIBLE_MODE
2711 device_create_file(cfg_misc_device
.this_device
, &dev_attr_data_is_mount
);
2713 /*[PLATFORM]-Add-END by falin.luo@tcl.com 2015/4/29*/
2715 device_create_file(cfg_misc_device
.this_device
, &dev_attr_cfg_load_enable
);
2716 tpd_load_status
= 1;
2721 static void tpd_eint_interrupt_handler(void)
2723 TPD_DEBUG_PRINT_INT
;
2727 wake_up_interruptible(&waiter
);
2729 static int tpd_i2c_remove(struct i2c_client
*client
)
2731 #if GTP_CREATE_WR_NODE
2736 destroy_workqueue(gtp_esd_check_workqueue
);
2741 #if (GTP_ESD_PROTECT || GTP_COMPATIBLE_MODE)
2742 static s32
force_reset_guitar(s32 resume
)
2749 GTP_INFO("Force_reset_guitar");
2753 GTP_INFO("Download little system.");
2756 mt_eint_mask(CUST_EINT_TOUCH_PANEL_NUM
);
2758 GTP_GPIO_OUTPUT(GTP_RST_PORT
, 0);
2759 GTP_GPIO_OUTPUT(GTP_INT_PORT
, 0);
2762 mt_set_gpio_mode(GPIO_CTP_EN_PIN
, GPIO_CTP_EN_PIN_M_GPIO
);
2763 mt_set_gpio_dir(GPIO_CTP_EN_PIN
, GPIO_DIR_OUT
);
2764 mt_set_gpio_out(GPIO_CTP_EN_PIN
, GPIO_OUT_ZERO
);
2767 mt_set_gpio_out(GPIO_CTP_EN_PIN
, GPIO_OUT_ONE
);
2769 #else // ( defined(MT6575) || defined(MT6577) || defined(MT6589) )
2771 #ifdef TPD_POWER_SOURCE_CUSTOM
2772 hwPowerDown(TPD_POWER_SOURCE_CUSTOM
, "TP");
2774 hwPowerDown(MT65XX_POWER_LDO_VGP2
, "TP");
2779 #ifdef TPD_POWER_SOURCE_CUSTOM
2780 hwPowerOn(TPD_POWER_SOURCE_CUSTOM
, VOL_2800
, "TP");
2782 hwPowerOn(MT65XX_POWER_LDO_VGP2
, VOL_2800
, "TP");
2788 for (i
= 0; i
< 5; i
++)
2790 #if GTP_COMPATIBLE_MODE
2791 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
2793 #if GTP_FL_LITTLE_SYSTEM
2795 if (resume
) // poweroff resume
2797 ret
= gup_fw_download_proc(NULL
, GTP_FL_PWR_RESUME_BURN
);
2800 GTP_ERROR("Failed to download little system.");
2807 ret
= gup_fw_download_proc(NULL
, GTP_FL_ESD_RECOVERY
);
2811 GTP_ERROR("[force_reset_guitar]Check & repair fw failed.");
2815 ret
= gtp_fw_startup(i2c_client_point
);
2820 GTP_ERROR("Failed to startup little system.");
2824 GTP_ERROR("GT9XXF start up failed.");
2834 gtp_reset_guitar(i2c_client_point
, 20);
2837 ret
= gtp_send_cfg(i2c_client_point
);
2851 GTP_ERROR("Failed to download little system.");
2855 GTP_ERROR("Failed to reset guitar.");
2857 mt_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM
);
2860 #if (GTP_COMPATIBLE_MODE && GTP_FL_LITTLE_SYSTEM)
2861 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
2870 gtp_main_clk_proc(i2c_client_point
);
2871 gtp_hopping_proc(i2c_client_point
, GTP_HOPPING_SEND
);
2872 gtp_bak_ref_proc(i2c_client_point
, GTP_BAK_REF_SEND
);
2883 mt_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM
);
2889 static s32
gtp_init_ext_watchdog(struct i2c_client
*client
)
2891 u8 opr_buffer
[2] = {0xAA};
2892 GTP_DEBUG("Init external watchdog.");
2893 return i2c_write_bytes(client
, 0x8041, opr_buffer
, 1);
2896 void gtp_esd_switch(struct i2c_client
*client
, s32 on
)
2898 spin_lock(&esd_lock
);
2899 if (SWITCH_ON
== on
) // switch on esd
2904 spin_unlock(&esd_lock
);
2905 GTP_INFO("Esd started");
2906 queue_delayed_work(gtp_esd_check_workqueue
, >p_esd_check_work
, clk_tick_cnt
);
2910 spin_unlock(&esd_lock
);
2913 else // switch off esd
2918 spin_unlock(&esd_lock
);
2919 GTP_INFO("Esd cancelled");
2920 cancel_delayed_work_sync(>p_esd_check_work
);
2924 spin_unlock(&esd_lock
);
2929 static s32
gtp_check_fw(void)
2931 u8 versionBuff
[4] = {0};
2936 ret
= i2c_read_bytes_non_dma(i2c_client_point
, 0x8140, versionBuff
, sizeof(versionBuff
));
2941 if( memcmp(versionBuff
, >p_default_FW_fl
[4], 4) !=0 )
2949 GTP_ERROR("Check running fw version error!");
2953 static void gtp_esd_check_func(struct work_struct
*work
)
2957 u8 esd_buf
[3] = {0x00};
2961 GTP_INFO("Esd suspended!");
2964 for (i
= 0; i
< 3; i
++)
2966 ret
= i2c_read_bytes_non_dma(i2c_client_point
, 0x8040, esd_buf
, 2);
2968 GTP_DEBUG("[Esd]0x8040 = 0x%02X, 0x8041 = 0x%02X", esd_buf
[0], esd_buf
[1]);
2971 // IIC communication problem
2976 if ((esd_buf
[0] == 0xAA) || (esd_buf
[1] != 0xAA))
2978 u8 chk_buf
[2] = {0x00};
2979 i2c_read_bytes_non_dma(i2c_client_point
, 0x8040, chk_buf
, 2);
2981 GTP_DEBUG("[Check]0x8040 = 0x%02X, 0x8041 = 0x%02X", chk_buf
[0], chk_buf
[1]);
2983 if ( (chk_buf
[0] == 0xAA) || (chk_buf
[1] != 0xAA) )
2985 i
= 3; // jump to reset guitar
2995 // IC works normally, Write 0x8040 0xAA, feed the watchdog
2997 i2c_write_bytes_non_dma(i2c_client_point
, 0x8040, esd_buf
, 1);
3004 if (i
>= 3 || !gtp_check_fw())
3006 #if GTP_COMPATIBLE_MODE
3007 if ((CHIP_TYPE_GT9F
== gtp_chip_type
) && (1 == rqst_processing
))
3009 GTP_INFO("Request Processing, no reset guitar.");
3014 GTP_INFO("IC works abnormally! Process reset guitar.");
3018 i2c_write_bytes(i2c_client_point
, 0x4226, esd_buf
, 3);
3020 force_reset_guitar(0);
3026 queue_delayed_work(gtp_esd_check_workqueue
, >p_esd_check_work
, clk_tick_cnt
);
3030 GTP_INFO("Esd suspended!");
3037 static void tpd_down(s32 x
, s32 y
, s32 size
, s32 id
)
3039 if ((!size
) && (!id
))
3041 input_report_abs(tpd
->dev
, ABS_MT_PRESSURE
, 100);
3042 input_report_abs(tpd
->dev
, ABS_MT_TOUCH_MAJOR
, 100);
3046 input_report_abs(tpd
->dev
, ABS_MT_PRESSURE
, size
);
3047 input_report_abs(tpd
->dev
, ABS_MT_TOUCH_MAJOR
, size
);
3048 /* track id Start 0 */
3049 input_report_abs(tpd
->dev
, ABS_MT_TRACKING_ID
, id
);
3052 input_report_key(tpd
->dev
, BTN_TOUCH
, 1);
3053 input_report_abs(tpd
->dev
, ABS_MT_POSITION_X
, x
);
3054 input_report_abs(tpd
->dev
, ABS_MT_POSITION_Y
, y
);
3055 input_mt_sync(tpd
->dev
);
3056 TPD_EM_PRINT(x
, y
, x
, y
, id
, 1);
3058 #if (defined(MT6575)||defined(MT6577))
3060 if (FACTORY_BOOT
== get_boot_mode() || RECOVERY_BOOT
== get_boot_mode())
3062 tpd_button(x
, y
, 1);
3068 static void tpd_up(s32 x
, s32 y
, s32 id
)
3070 input_report_key(tpd
->dev
, BTN_TOUCH
, 0);
3071 input_mt_sync(tpd
->dev
);
3072 TPD_EM_PRINT(x
, y
, x
, y
, id
, 0);
3074 #if (defined(MT6575) || defined(MT6577))
3076 if (FACTORY_BOOT
== get_boot_mode() || RECOVERY_BOOT
== get_boot_mode())
3078 tpd_button(x
, y
, 0);
3083 #if GTP_CHARGER_SWITCH
3084 static void gtp_charger_switch(s32 dir_update
)
3087 u8 chr_cmd
[3] = {0x80, 0x40};
3088 static u8 chr_pluggedin
= 0;
3092 chr_status
= *(volatile u32
*)CHR_CON0
;
3093 chr_status
&= (1 << 13);
3094 #else // ( defined(MT6575) || defined(MT6577) || defined(MT6589) )
3095 chr_status
= upmu_is_chr_det();
3098 if (chr_status
) // charger plugged in
3100 if (!chr_pluggedin
|| dir_update
)
3103 ret
= gtp_i2c_write(i2c_client_point
, chr_cmd
, 3);
3106 GTP_INFO("Update status for Charger Plugin");
3111 else // charger plugged out
3113 if (chr_pluggedin
|| dir_update
)
3116 ret
= gtp_i2c_write(i2c_client_point
, chr_cmd
, 3);
3119 GTP_INFO("Update status for Charger Plugout");
3127 static int touch_event_handler(void *unused
)
3129 struct sched_param param
= { .sched_priority
= RTPM_PRIO_TPD
};
3130 u8 end_cmd
[3] = {GTP_READ_COOR_ADDR
>> 8, GTP_READ_COOR_ADDR
& 0xFF, 0};
3131 u8 point_data
[2 + 1 + 8 * GTP_MAX_TOUCH
+ 1] = {GTP_READ_COOR_ADDR
>> 8, GTP_READ_COOR_ADDR
& 0xFF};
3134 static u8 pre_touch
= 0;
3135 static u8 pre_key
= 0;
3138 static u8 pre_pen
= 0;
3141 u8
*coor_data
= NULL
;
3149 #if GTP_COMPATIBLE_MODE
3150 u8 rqst_data
[3] = {(u8
)(GTP_REG_RQST
>> 8), (u8
)(GTP_REG_RQST
& 0xFF), 0};
3153 #ifdef TPD_PROXIMITY
3155 hwm_sensor_data sensor_data
;
3156 u8 proximity_status
;
3158 u8 proximity_status
; //add by caoyang
3159 u8 doze_buf
[3] = {0x81, 0x4B};
3161 sched_setscheduler(current
, SCHED_RR
, ¶m
);
3164 set_current_state(TASK_INTERRUPTIBLE
);
3168 //#if GTP_GESTURE_WAKEUP
3169 if(gesture_value
> 0){
3170 if (DOZE_ENABLED
== doze_status
)
3180 wait_event_interruptible(waiter
, tpd_flag
!= 0);
3183 set_current_state(TASK_RUNNING
);
3185 #if GTP_CHARGER_SWITCH
3186 gtp_charger_switch(0);
3189 if(gesture_value
> 0){
3190 //#if GTP_GESTURE_WAKEUP
3191 if (DOZE_ENABLED
== doze_status
)
3193 ret
= gtp_i2c_read(i2c_client_point
, doze_buf
, 3);
3194 GTP_DEBUG("0x814B = 0x%02X", doze_buf
[2]);
3197 if ((doze_buf
[2] == 'a') || (doze_buf
[2] == 'b') || (doze_buf
[2] == 'c') ||
3198 (doze_buf
[2] == 'd') || (doze_buf
[2] == 'e') || (doze_buf
[2] == 'g') ||
3199 (doze_buf
[2] == 'h') || (doze_buf
[2] == 'm') || (doze_buf
[2] == 'o') ||
3200 (doze_buf
[2] == 'q') || (doze_buf
[2] == 's') || (doze_buf
[2] == 'v') ||
3201 (doze_buf
[2] == 'w') || (doze_buf
[2] == 'y') || (doze_buf
[2] == 'z') ||
3202 (doze_buf
[2] == 0x5E) /* ^ */
3205 if (doze_buf
[2] != 0x5E)
3207 GTP_INFO("Wakeup by gesture(%c), light up the screen!", doze_buf
[2]);
3211 GTP_INFO("Wakeup by gesture(^), light up the screen!");
3214 doze_status
= DOZE_WAKEUP
;
3215 input_report_key(tpd
->dev
, KEY_POWER
, 1);
3216 input_sync(tpd
->dev
);
3217 input_report_key(tpd
->dev
, KEY_POWER
, 0);
3218 input_sync(tpd
->dev
);
3221 gtp_i2c_write(i2c_client_point
, doze_buf
, 3);
3223 else if ( (doze_buf
[2] == 0xAA) || (doze_buf
[2] == 0xBB) ||
3224 (doze_buf
[2] == 0xAB) || (doze_buf
[2] == 0xBA) )
3226 char *direction
[4] = {"Right", "Down", "Up", "Left"};
3227 u8 type
= ((doze_buf
[2] & 0x0F) - 0x0A) + (((doze_buf
[2] >> 4) & 0x0F) - 0x0A) * 2;
3229 GTP_INFO("%s slide to light up the screen!", direction
[type
]);
3230 doze_status
= DOZE_WAKEUP
;
3231 input_report_key(tpd
->dev
, KEY_POWER
, 1);
3232 input_sync(tpd
->dev
);
3233 input_report_key(tpd
->dev
, KEY_POWER
, 0);
3234 input_sync(tpd
->dev
);
3237 gtp_i2c_write(i2c_client_point
, doze_buf
, 3);
3239 else if (0xCC == doze_buf
[2])
3241 GTP_INFO("Double click to light up the screen!");
3242 doze_status
= DOZE_WAKEUP
;
3243 input_report_key(tpd
->dev
, KEY_POWER
, 1);
3244 input_sync(tpd
->dev
);
3245 input_report_key(tpd
->dev
, KEY_POWER
, 0);
3246 input_sync(tpd
->dev
);
3249 gtp_i2c_write(i2c_client_point
, doze_buf
, 3);
3255 gtp_i2c_write(i2c_client_point
, doze_buf
, 3);
3256 gtp_enter_doze(i2c_client_point
);
3263 ret
= gtp_i2c_read(i2c_client_point
, point_data
, 12);
3266 GTP_ERROR("I2C transfer error. errno:%d\n ", ret
);
3269 finger
= point_data
[GTP_ADDR_LENGTH
];
3271 #if GTP_COMPATIBLE_MODE
3272 if ((finger
== 0x00) && (CHIP_TYPE_GT9F
== gtp_chip_type
))
3274 ret
= gtp_i2c_read(i2c_client_point
, rqst_data
, 3);
3278 GTP_ERROR("I2C transfer error. errno:%d\n ", ret
);
3281 switch (rqst_data
[2])
3283 case GTP_RQST_BAK_REF
:
3284 GTP_INFO("Request Ref.");
3285 rqst_processing
= 1;
3286 ret
= gtp_bak_ref_proc(i2c_client_point
, GTP_BAK_REF_SEND
);
3289 GTP_INFO("Send ref success.");
3290 rqst_data
[2] = GTP_RQST_RESPONDED
;
3291 gtp_i2c_write(i2c_client_point
, rqst_data
, 3);
3292 rqst_processing
= 0;
3294 goto exit_work_func
;
3296 case GTP_RQST_CONFIG
:
3297 GTP_INFO("Request Config.");
3298 ret
= gtp_send_cfg(i2c_client_point
);
3301 GTP_ERROR("Send config error.");
3305 GTP_INFO("Send config success.");
3306 rqst_data
[2] = GTP_RQST_RESPONDED
;
3307 gtp_i2c_write(i2c_client_point
, rqst_data
, 3);
3309 goto exit_work_func
;
3311 case GTP_RQST_MAIN_CLOCK
:
3312 GTP_INFO("Request main clock.");
3313 rqst_processing
= 1;
3314 ret
= gtp_main_clk_proc(i2c_client_point
);
3317 GTP_INFO("Send main clk success.");
3318 #if GTP_POWER_CTRL_SLEEP
3320 ret
= gtp_hopping_proc(i2c_client_point
, GTP_HOPPING_SEND
);
3323 GTP_ERROR("Failed to send hopping data.");
3324 goto exit_work_func
;
3328 GTP_INFO("Send hopping data success.");
3332 rqst_data
[2] = GTP_RQST_RESPONDED
;
3333 gtp_i2c_write(i2c_client_point
, rqst_data
, 3);
3334 rqst_processing
= 0;
3336 goto exit_work_func
;
3338 case GTP_RQST_RESET
:
3339 //#if GTP_GESTURE_WAKEUP
3340 if(gesture_value
> 0){
3341 if (DOZE_ENABLED
== doze_status
) {
3342 u8 reg_data
[3] = {(u8
)(0x801F >> 8), (u8
)(0x801F & 0xFF), 0};
3343 gtp_i2c_write(i2c_client_point
, reg_data
, 3);
3344 gtp_recovery_reset(i2c_client_point
);
3345 gtp_enter_doze(i2c_client_point
);
3350 gtp_recovery_reset(i2c_client_point
);
3352 GTP_INFO("Request Reset.");
3353 goto exit_work_func
;
3355 #if GTP_POWER_CTRL_SLEEP
3356 case GTP_RQST_STORE_HOPPING
:
3357 GTP_INFO("Request store hopping data.");
3358 ret
= gtp_hopping_proc(i2c_client_point
, GTP_HOPPING_STORE
);
3361 GTP_ERROR("Failed to store hopping data.");
3365 GTP_INFO("Hopping data stored.");
3366 rqst_data
[2] = GTP_RQST_RESPONDED
;
3367 gtp_i2c_write(i2c_client_point
, rqst_data
, 3);
3369 goto exit_work_func
;
3371 case GTP_RQST_STORE_BAK_REF
:
3372 GTP_INFO("Request store backup reference.");
3373 ret
= gtp_bak_ref_proc(i2c_client_point
, GTP_BAK_REF_STORE
);
3376 GTP_ERROR("Failed to store backup reference data.");
3380 GTP_INFO("Backup reference data stored.");
3381 rqst_data
[2] = GTP_RQST_RESPONDED
;
3382 gtp_i2c_write(i2c_client_point
, rqst_data
, 3);
3384 goto exit_work_func
;
3388 GTP_INFO("Undefined request code: 0x%02X", rqst_data
[2]);
3389 rqst_data
[2] = GTP_RQST_RESPONDED
;
3390 gtp_i2c_write(i2c_client_point
, rqst_data
, 3);
3401 if ((finger
& 0x80) == 0)
3403 goto exit_work_func
;
3405 if((gtp_autotool_setting
== 1) && !(point_data
[GTP_ADDR_LENGTH
] & 0x40)){
3406 gtp_autotool_setting
= 0;
3409 if(gesture_value
> 0){
3410 proximity_status
= point_data
[GTP_ADDR_LENGTH
];
3411 GTP_DEBUG("REG INDEX[0x814E]:0x%02X\n", proximity_status
);
3412 if(tpd_sleep_flag
== 1){
3413 goto exit_work_func
;
3415 if (proximity_status
& 0x40) //proximity or large touch detect,enable hwm_sensor.
3417 printk(KERN_ERR
"caoyang0 test for xipin\n");
3418 //mod_timer(&buttons_timer, jiffies+HZ/50);
3419 if(gtp_autotool_setting
== 1){
3420 gtp_autotool_setting
= 0;
3421 goto exit_work_func
;
3424 input_report_key(tpd
->dev
, KEY_POWER
, 1);
3425 input_sync(tpd
->dev
);
3426 input_report_key(tpd
->dev
, KEY_POWER
, 0);
3427 input_sync(tpd
->dev
);
3430 goto exit_work_func
;
3434 #ifdef TPD_PROXIMITY
3435 if (tpd_proximity_flag
== 1)
3437 proximity_status
= point_data
[GTP_ADDR_LENGTH
];
3438 GTP_DEBUG("REG INDEX[0x814E]:0x%02X\n", proximity_status
);
3440 if (proximity_status
& 0x60) //proximity or large touch detect,enable hwm_sensor.
3442 tpd_proximity_detect
= 0;
3443 //sensor_data.values[0] = 0;
3447 tpd_proximity_detect
= 1;
3448 //sensor_data.values[0] = 1;
3452 GTP_DEBUG(" ps change\n");
3453 GTP_DEBUG("PROXIMITY STATUS:0x%02X\n", tpd_proximity_detect
);
3454 //map and store data to hwm_sensor_data
3455 sensor_data
.values
[0] = tpd_get_ps_value();
3456 sensor_data
.value_divide
= 1;
3457 sensor_data
.status
= SENSOR_STATUS_ACCURACY_MEDIUM
;
3458 //report to the up-layer
3459 ret
= hwmsen_get_interrupt_data(ID_PROXIMITY
, &sensor_data
);
3463 GTP_ERROR("Call hwmsen_get_interrupt_data fail = %d\n", err
);
3469 touch_num
= finger
& 0x0f;
3471 if (touch_num
> GTP_MAX_TOUCH
)
3473 goto exit_work_func
;
3478 u8 buf
[8 * GTP_MAX_TOUCH
] = {(GTP_READ_COOR_ADDR
+ 10) >> 8, (GTP_READ_COOR_ADDR
+ 10) & 0xff};
3480 ret
= gtp_i2c_read(i2c_client_point
, buf
, 2 + 8 * (touch_num
- 1));
3481 memcpy(&point_data
[12], &buf
[2], 8 * (touch_num
- 1));
3484 #if (GTP_HAVE_TOUCH_KEY || GTP_PEN_HAVE_BUTTON)
3485 key_value
= point_data
[3 + 8 * touch_num
];
3487 if (key_value
|| pre_key
)
3489 #if GTP_PEN_HAVE_BUTTON
3490 if (key_value
== 0x40)
3492 GTP_DEBUG("BTN_STYLUS & BTN_STYLUS2 Down.");
3493 input_report_key(pen_dev
, BTN_STYLUS
, 1);
3494 input_report_key(pen_dev
, BTN_STYLUS2
, 1);
3497 else if (key_value
== 0x10)
3499 GTP_DEBUG("BTN_STYLUS Down, BTN_STYLUS2 Up.");
3500 input_report_key(pen_dev
, BTN_STYLUS
, 1);
3501 input_report_key(pen_dev
, BTN_STYLUS2
, 0);
3504 else if (key_value
== 0x20)
3506 GTP_DEBUG("BTN_STYLUS Up, BTN_STYLUS2 Down.");
3507 input_report_key(pen_dev
, BTN_STYLUS
, 0);
3508 input_report_key(pen_dev
, BTN_STYLUS2
, 1);
3513 GTP_DEBUG("BTN_STYLUS & BTN_STYLUS2 Up.");
3514 input_report_key(pen_dev
, BTN_STYLUS
, 0);
3515 input_report_key(pen_dev
, BTN_STYLUS2
, 0);
3516 if ( (pre_key
== 0x40) || (pre_key
== 0x20) ||
3525 touch_num
= 0; // shield pen point
3526 //pre_touch = 0; // clear last pen status
3529 #if GTP_HAVE_TOUCH_KEY
3532 for (i
= 0; i
< GTP_MAX_KEY_NUM
; i
++)
3534 input_report_key(tpd
->dev
, touch_key_array
[i
], key_value
& (0x01 << i
));
3536 touch_num
= 0; // shiled fingers
3541 pre_key
= key_value
;
3543 GTP_DEBUG("pre_touch:%02x, finger:%02x.", pre_touch
, finger
);
3547 for (i
= 0; i
< touch_num
; i
++)
3549 coor_data
= &point_data
[i
* 8 + 3];
3551 id
= coor_data
[0] & 0x0F;
3552 input_x
= coor_data
[1] | coor_data
[2] << 8;
3553 input_y
= coor_data
[3] | coor_data
[4] << 8;
3554 input_w
= coor_data
[5] | coor_data
[6] << 8;
3558 if ((id
& 0x80)) // pen/stylus is activated
3560 GTP_DEBUG("Pen touch DOWN!");
3564 GTP_DEBUG("(%d)(%d, %d)[%d]", id
, input_x
, input_y
, input_w
);
3565 gtp_pen_down(input_x
, input_y
, input_w
, id
);
3571 GTP_DEBUG(" (%d)(%d, %d)[%d]", id
, input_x
, input_y
, input_w
);
3572 tpd_down(input_x
, input_y
, input_w
, id
);
3583 GTP_DEBUG("Pen touch UP!");
3591 GTP_DEBUG("Touch Release!");
3596 pre_touch
= touch_num
;
3602 input_sync(pen_dev
);
3607 input_sync(tpd
->dev
);
3612 if (!gtp_rawdiff_mode
)
3614 ret
= gtp_i2c_write(i2c_client_point
, end_cmd
, 3);
3618 GTP_ERROR("I2C write end_cmd error!");
3621 #if (GTP_COMPATIBLE_MODE && GTP_FL_LITTLE_SYSTEM)
3622 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
3626 if ((fw_block
== 0) && (block_section
== 1))
3628 GTP_INFO("Begin downloading big ss51 firmware");
3630 gtp_download_big_ss51(i2c_client_point
);
3634 } while (!kthread_should_stop());
3639 static int tpd_local_init(void)
3642 clk_tick_cnt
= 2 * HZ
; // HZ: clock ticks in 1 second generated by system
3643 GTP_DEBUG("Clock ticks for an esd cycle: %d", clk_tick_cnt
);
3644 INIT_DELAYED_WORK(>p_esd_check_work
, gtp_esd_check_func
);
3645 gtp_esd_check_workqueue
= create_workqueue("gtp_esd_check");
3646 spin_lock_init(&esd_lock
); // 2.6.39 & later
3647 // esd_lock = SPIN_LOCK_UNLOCKED; // 2.6.39 & before
3650 #if GTP_SUPPORT_I2C_DMA
3651 gpDMABuf_va
= (u8
*)dma_alloc_coherent(NULL
, GTP_DMA_MAX_TRANSACTION_LENGTH
, &gpDMABuf_pa
, GFP_KERNEL
);
3653 GTP_ERROR("[Error] Allocate DMA I2C Buffer failed!\n");
3655 memset(gpDMABuf_va
, 0, GTP_DMA_MAX_TRANSACTION_LENGTH
);
3657 if (i2c_add_driver(&tpd_i2c_driver
) != 0)
3659 GTP_ERROR("unable to add i2c driver.\n");
3663 if (tpd_load_status
== 0) //if(tpd_load_status == 0) // disable auto load touch driver for linux3.0 porting
3665 GTP_ERROR("add error touch panel driver.\n");
3666 i2c_del_driver(&tpd_i2c_driver
);
3670 input_set_abs_params(tpd
->dev
, ABS_MT_TRACKING_ID
, 0, (GTP_MAX_TOUCH
- 1), 0, 0);
3671 #ifdef TPD_HAVE_BUTTON
3672 tpd_button_setting(TPD_KEY_COUNT
, tpd_keys_local
, tpd_keys_dim_local
);// initialize tpd button data
3675 #if (defined(TPD_WARP_START) && defined(TPD_WARP_END))
3677 memcpy(tpd_wb_start
, tpd_wb_start_local
, TPD_WARP_CNT
* 4);
3678 memcpy(tpd_wb_end
, tpd_wb_start_local
, TPD_WARP_CNT
* 4);
3681 #if (defined(TPD_HAVE_CALIBRATION) && !defined(TPD_CUSTOM_CALIBRATION))
3682 memcpy(tpd_calmat
, tpd_def_calmat_local
, 8 * 4);
3683 memcpy(tpd_def_calmat
, tpd_def_calmat_local
, 8 * 4);
3686 // set vendor string
3687 tpd
->dev
->id
.vendor
= 0x00;
3688 tpd
->dev
->id
.product
= tpd_info
.pid
;
3689 tpd
->dev
->id
.version
= tpd_info
.vid
;
3691 GTP_DEBUG("end %s, %d\n", __FUNCTION__
, __LINE__
);
3697 static s8
gtp_enter_doze(struct i2c_client
*client
)
3701 u8 i2c_control_buf
[3] = {(u8
)(GTP_REG_SLEEP
>> 8), (u8
)GTP_REG_SLEEP
, 8};
3705 GTP_DEBUG("Entering gesture mode...");
3708 i2c_control_buf
[0] = 0x80;
3709 i2c_control_buf
[1] = 0x46;
3710 ret
= gtp_i2c_write(client
, i2c_control_buf
, 3);
3713 GTP_DEBUG("Failed to set gesture flag into 0x8046, %d", retry
);
3716 i2c_control_buf
[0] = 0x80;
3717 i2c_control_buf
[1] = 0x40;
3718 ret
= gtp_i2c_write(client
, i2c_control_buf
, 3);
3721 doze_status
= DOZE_ENABLED
;
3722 GTP_INFO("Gesture mode enabled.");
3727 GTP_ERROR("GTP send gesture cmd failed.");
3731 /*******************************************************
3733 Eter sleep function.
3739 Executive outcomes.0--success,non-0--fail.
3740 *******************************************************/
3741 static s8
gtp_enter_sleep(struct i2c_client
*client
)
3743 #if (GTP_COMPATIBLE_MODE && !GTP_POWER_CTRL_SLEEP)
3744 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
3746 u8 i2c_status_buf
[3] = {0x80, 0x44, 0x00};
3749 ret
= gtp_i2c_read(client
, i2c_status_buf
, 3);
3752 GTP_ERROR("[gtp_enter_sleep]Read ref status reg error.");
3755 if (i2c_status_buf
[2] & 0x80)
3758 ret
= gtp_bak_ref_proc(client
, GTP_BAK_REF_STORE
);
3761 GTP_ERROR("[gtp_enter_sleep]Store bak ref failed.");
3766 #if GTP_POWER_CTRL_SLEEP
3768 GTP_GPIO_OUTPUT(GTP_RST_PORT
, 0);
3769 GTP_GPIO_OUTPUT(GTP_INT_PORT
, 0);
3773 mt_set_gpio_mode(GPIO_CTP_EN_PIN
, GPIO_CTP_EN_PIN_M_GPIO
);
3774 mt_set_gpio_dir(GPIO_CTP_EN_PIN
, GPIO_DIR_OUT
);
3775 mt_set_gpio_out(GPIO_CTP_EN_PIN
, GPIO_OUT_ZERO
);
3777 #else // ( defined(MT6575) || defined(MT6577) || defined(MT6589) )
3779 #ifdef TPD_POWER_SOURCE_1800
3780 hwPowerDown(TPD_POWER_SOURCE_1800
, "TP");
3783 #ifdef TPD_POWER_SOURCE_CUSTOM
3784 hwPowerDown(TPD_POWER_SOURCE_CUSTOM
, "TP");
3786 hwPowerDown(MT65XX_POWER_LDO_VGP2
, "TP");
3790 GTP_INFO("GTP enter sleep by poweroff!");
3797 u8 i2c_control_buf
[3] = {(u8
)(GTP_REG_SLEEP
>> 8), (u8
)GTP_REG_SLEEP
, 5};
3800 GTP_GPIO_OUTPUT(GTP_INT_PORT
, 0);
3805 ret
= gtp_i2c_write(client
, i2c_control_buf
, 3);
3809 GTP_INFO("GTP enter sleep!");
3817 GTP_ERROR("GTP send sleep cmd failed.");
3823 /*******************************************************
3825 Wakeup from sleep mode Function.
3831 Executive outcomes.0--success,non-0--fail.
3832 *******************************************************/
3833 static s8
gtp_wakeup_sleep(struct i2c_client
*client
)
3838 GTP_DEBUG("GTP wakeup begin.");
3840 #if GTP_POWER_CTRL_SLEEP
3841 #if (GTP_COMPATIBLE_MODE && GTP_FL_LITTLE_SYSTEM)
3842 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
3846 kthread_run(gtp_resume_timeout
, (void*)NULL
, "resume_timeout");
3848 ret
= force_reset_guitar(1);
3852 gtp_recovery_reset(client
);
3854 if (!gtp_check_fw()) {
3856 gtp_recovery_reset(client
);
3860 #endif // end compatible mode & fl little system
3864 ret
= tpd_power_on(client
);
3868 GTP_ERROR("I2C Power on ERROR!");
3871 GTP_INFO("Ic wakeup by poweron");
3874 #else // esle PowerCtrlSleep
3875 while (retry
++ < 5) {
3876 //#if GTP_GESTURE_WAKEUP
3877 if(gesture_value
> 0){
3878 if (DOZE_WAKEUP
!= doze_status
)
3880 GTP_INFO("Powerkey wakeup.");
3884 GTP_INFO("Gesture wakeup.");
3886 doze_status
= DOZE_DISABLED
;
3888 mt_eint_mask(CUST_EINT_TOUCH_PANEL_NUM
);
3889 gtp_reset_guitar(client
, 20);
3890 ret
= gup_reload_fw_dsp(NULL
, GTP_FL_READ_REPAIR
);
3891 mt_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM
);
3893 GTP_ERROR("[gtp_wakeup_sleep]Reload dsp code failed.");
3896 ret
= gtp_fw_startup(client
);
3898 GTP_ERROR("[gtp_wakeup_sleep]Startup fw failed.");
3901 if (!gtp_check_fw()) {
3902 gtp_recovery_reset(client
);
3904 return 0; // succeed
3905 //#else // else gesture wakeup
3907 GTP_GPIO_OUTPUT(GTP_INT_PORT
, 1); //wake up by int gpio
3910 #if GTP_COMPATIBLE_MODE
3911 if (CHIP_TYPE_GT9F
== gtp_chip_type
) {
3912 u8 opr_buf
[2] = {0};
3914 ret
= gtp_i2c_test(client
);
3918 ret
= i2c_write_bytes(client
, 0x4180, opr_buf
, 1);
3920 GTP_DEBUG("Hold ss51 & dsp I2C error,retry:%d", retry
);
3926 ret
= i2c_read_bytes(client
, 0x4180, opr_buf
, 1);
3928 GTP_DEBUG("confirm ss51 & dsp hold, I2C error,retry:%d", retry
);
3931 if (0x0C != opr_buf
[0]) {
3932 GTP_DEBUG("ss51 & dsp not hold, val: %d, retry: %d", opr_buf
[0], retry
);
3935 GTP_DEBUG("ss51 & dsp has been hold");
3937 ret
= gtp_fw_startup(client
);
3939 GTP_ERROR("[gtp_wakeup_sleep]Startup fw failed.");
3942 GTP_INFO("flashless wakeup sleep success");
3945 force_reset_guitar(0);
3949 //#endif // end compatible mode
3951 ret
= gtp_i2c_test(client
);
3954 GTP_INFO("GTP wakeup sleep.");
3955 //#if (!GTP_GESTURE_WAKEUP)
3956 if(!(gesture_value
> 0))
3963 gtp_reset_guitar(client
, 20);
3964 #endif // end gesture wakeup
3968 GTP_ERROR("wakeup retry timeout, process esd reset");
3969 force_reset_guitar(0);
3971 #endif // end PowerCtrlSleep
3972 GTP_ERROR("GTP wakeup sleep failed.");
3976 /* Function to manage low power suspend */
3977 static void tpd_suspend(struct early_suspend
*h
)
3981 GTP_INFO("System suspend.");
3983 #ifdef TPD_PROXIMITY
3985 if (tpd_proximity_flag
== 1)
3991 #if (GTP_COMPATIBLE_MODE && GTP_FL_LITTLE_SYSTEM)
3998 gtp_esd_switch(i2c_client_point
, SWITCH_OFF
);
4000 //#if GTP_GESTURE_WAKEUP
4001 if(gesture_value
> 0){
4002 ret
= gtp_enter_doze(i2c_client_point
);
4005 mt_eint_mask(CUST_EINT_TOUCH_PANEL_NUM
);
4006 ret
= gtp_enter_sleep(i2c_client_point
);
4011 GTP_ERROR("GTP early suspend failed.");
4013 // to avoid waking up while not sleeping, delay 48 + 10ms to ensure reliability
4017 /* Function to manage power-on resume */
4018 static void tpd_resume(struct early_suspend
*h
)
4022 GTP_INFO("System resume.");
4024 #ifdef TPD_PROXIMITY
4026 if (tpd_proximity_flag
== 1)
4033 ret
= gtp_wakeup_sleep(i2c_client_point
);
4037 GTP_ERROR("GTP later resume failed.");
4040 #if GTP_COMPATIBLE_MODE
4041 if (CHIP_TYPE_GT9F
== gtp_chip_type
)
4048 gtp_send_cfg(i2c_client_point
);
4051 #if GTP_CHARGER_SWITCH
4052 gtp_charger_switch(1); // force update
4056 //#if GTP_GESTURE_WAKEUP
4057 if(gesture_value
> 0){
4058 doze_status
= DOZE_DISABLED
;
4061 mt_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM
);
4066 gtp_init_ext_watchdog(i2c_client_point
);
4067 gtp_esd_switch(i2c_client_point
, SWITCH_ON
);
4072 static struct tpd_driver_t tpd_device_driver
=
4074 .tpd_device_name
= "gt9xx",
4075 .tpd_local_init
= tpd_local_init
,
4076 .suspend
= tpd_suspend
,
4077 .resume
= tpd_resume
,
4078 #ifdef TPD_HAVE_BUTTON
4079 .tpd_have_button
= 1,
4081 .tpd_have_button
= 0,
4085 /* called when loaded into kernel */
4086 static int __init
tpd_driver_init(void)
4088 if(g_boot_mode
== KERNEL_POWER_OFF_CHARGING_BOOT
|| g_boot_mode
== LOW_POWER_OFF_CHARGING_BOOT
) //add by zero
4090 GTP_INFO("MediaTek gt91xx touch panel driver init\n");
4091 #ifdef I2C_BUS_NUMBER
4092 i2c_register_board_info(I2C_BUS_NUMBER
, &i2c_tpd
, 1);
4094 i2c_register_board_info(0, &i2c_tpd
, 1);
4096 if (tpd_driver_add(&tpd_device_driver
) < 0)
4097 GTP_INFO("add generic driver failed\n");
4102 /* should never be called */
4103 static void __exit
tpd_driver_exit(void)
4105 GTP_INFO("MediaTek gt91xx touch panel driver exit\n");
4106 tpd_driver_remove(&tpd_device_driver
);
4109 module_init(tpd_driver_init
);
4110 module_exit(tpd_driver_exit
);