2 * Copyright (C) 2013 LG Electironics, Inc.
4 * This software is licensed under the terms of the GNU General Public
5 * License version 2, as published by the Free Software Foundation, and
6 * may be copied, distributed, and modified under those terms.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
15 #include <linux/module.h>
16 #include <linux/delay.h>
17 #include <linux/earlysuspend.h>
18 #include <linux/hrtimer.h>
19 #include <linux/i2c.h>
20 #include <linux/input.h>
21 #include <linux/input/mt.h>
22 #include <linux/interrupt.h>
24 #include <linux/platform_device.h>
25 #include <linux/gpio.h>
26 #include <linux/rtpm_prio.h>
27 #include <linux/time.h>
28 #include <linux/slab.h>
29 #include <linux/gpio.h>
30 #include <linux/sched.h>
31 #include <linux/kthread.h>
32 #include <linux/bitops.h>
33 #include <linux/kernel.h>
34 #include <linux/delay.h>
35 #include <linux/byteorder/generic.h>
36 #include <linux/spinlock.h>
37 #include <linux/workqueue.h>
38 #include <linux/wakelock.h>
39 #ifdef CONFIG_HAS_EARLYSUSPEND
40 #include <linux/earlysuspend.h>
43 #include <mach/mt_pm_ldo.h>
44 #include <mach/mt_typedefs.h>
45 #include <mach/mt_boot.h>
46 #include <mach/mt_wdt.h>
47 #include <mach/mt_gpt.h>
48 #include <mach/mt_reg_base.h>
49 #include <mach/eint.h>
51 #include <cust_gpio_usage.h>
54 #include <cust_eint.h>
56 #include "synaptics_ts.h"
58 #define LGE_USE_SYNAPTICS_FW_UPGRADE
59 #if defined(LGE_USE_SYNAPTICS_FW_UPGRADE)
60 #include "SynaImage.h"
63 //#define LGE_USE_SYNAPTICS_RED_ON_MTK
65 #define LGE_USE_SYNAPTICS_F54
66 #if defined(LGE_USE_SYNAPTICS_F54)
68 #include "RefCode_PDTScan.h"
72 //ticklewind.kim@lge.com_S:
73 #define CUST_G2_TOUCH_WAKEUP_GESTURE
75 #ifdef CUST_G2_TOUCH_WAKEUP_GESTURE
76 #include <linux/wakelock.h>
77 #include <linux/mutex.h>
78 #include <linux/pm_wakeup.h>
79 #include <linux/pm_runtime.h>
80 #include <linux/irq.h>
84 #define REPORT_MODE_REG 0x0056
85 static int touch_gesture_enable
= 0;
86 static struct wake_lock touch_wake_lock
;
87 static struct mutex i2c_suspend_lock
;
88 static spinlock_t touch_spin_lock
;
92 static int __attribute__ ((unused
)) ts_suspend
= 0;
93 static int __attribute__ ((unused
)) ts_force_update_chk
= 0;
95 //ticklewind.kim@lge.com_E:
97 /* RMI4 spec from (RMI4 spec)511-000136-01_revD
98 * Function Purpose See page
99 * $01 RMI Device Control 29
100 * $08 BIST(Built-in Self Test) 38
101 * $09 BIST(Built-in Self Test) 42
102 * $11 2-D TouchPad sensors 46
103 * $19 0-D capacitive button sensors 69
104 * $30 GPIO/LEDs (includes mechanical buttons) 76
106 * $34 Flash Memory Management 93k
108 #define RMI_DEVICE_CONTROL 0x01
109 #define TOUCHPAD_SENSORS 0x11
110 #define CAPACITIVE_BUTTON_SENSORS 0x1A
111 #define GPIO_LEDS 0x31
112 //#define GPIO_LEDS 0x30
114 #define FLASH_MEMORY_MANAGEMENT 0x34
115 #define ANALOG_CONTROL 0x54
117 /* Register Map & Register bit mask
118 * - Please check "One time" this map before using this device driver
120 #define DEVICE_STATUS_REG (ts->common_dsc.data_base) /* Device Status */
121 #define INTERRUPT_STATUS_REG (ts->common_dsc.data_base+1) /* Interrupt Status */
122 #define DEVICE_STATUS_REG_UNCONFIGURED 0x80
123 #define DEVICE_STATUS_FLASH_PROG 0x40
124 #define DEVICE_CRC_ERROR_MASK 0x04
125 #define DEVICE_FAILURE_MASK 0x03
127 #define DEVICE_CONTROL_REG (ts->common_dsc.control_base) /* Device Control */
128 #define INTERRUPT_ENABLE_REG (ts->common_dsc.control_base+1) /* Interrupt Enable */
129 #define DEVICE_CONTROL_REG_SLEEP 0x01
130 #define DEVICE_CONTROL_REG_NOSLEEP 0x04
131 #define DEVICE_CONTROL_REG_CONFIGURED 0x80
133 #define MANUFACTURER_ID_REG (ts->common_dsc.query_base) /* Manufacturer ID */
134 #define FW_REVISION_REG (ts->common_dsc.query_base+3) /* FW revision */
135 #define PRODUCT_ID_REG (ts->common_dsc.query_base+11) /* Product ID */
137 #define FINGER_STATE_REG (ts->finger_dsc.data_base) /* Finger State */
138 #define FINGER_STATE_MASK 0x03
140 #define TWO_D_EXTEND_STATUS (ts->finger_dsc.data_base+27)
141 #define TWO_D_REPORTING_MODE (ts->finger_dsc.control_base+0) /* 2D Reporting Mode */
142 #define CONTINUOUS_REPORT_MODE 0x0
143 #define REDUCED_REPORT_MODE 0x1
145 #define REPORT_BEYOND_CLIP 0x80
147 #define PALM_DETECT_REG (ts->finger_dsc.control_base+1) /* Palm Detect */
148 #define DELTA_X_THRESH_REG (ts->finger_dsc.control_base+2) /* Delta-X Thresh */
149 #define DELTA_Y_THRESH_REG (ts->finger_dsc.control_base+3) /* Delta-Y Thresh */
150 #define SENSOR_MAX_X_POS (ts->finger_dsc.control_base+6) /* SensorMaxXPos */
151 #define SENSOR_MAX_Y_POS (ts->finger_dsc.control_base+8) /* SensorMaxYPos */
152 //#define GESTURE_ENABLE_1_REG (ts->finger_dsc.control_base+10) /* Gesture Enables 1 */
153 //#define GESTURE_ENABLE_2_REG (ts->finger_dsc.control_base+11) /* Gesture Enables 2 */
154 #define SMALL_OBJECT_DETECTION_TUNNING_REG (ts->finger_dsc.control_base+7)
155 #define SMALL_OBJECT_DETECTION 0x04
157 #define FINGER_COMMAND_REG (ts->finger_dsc.command_base)
158 #define BUTTON_DATA_REG (ts->button_dsc.data_base) /* Button Data */
160 #define FLASH_CONFIG_ID_REG (ts->flash_dsc.control_base) /* Flash Control */
161 #define FLASH_CONTROL_REG (ts->flash_dsc.data_base+18)
162 #define FLASH_STATUS_MASK 0xF0
163 #define ANALOG_CONTROL_REG (ts->analog_dsc.control_base)
164 #define FORCE_FAST_RELAXATION 0x04
166 #define ANALOG_COMMAND_REG (ts->analog_dsc.command_base)
167 #define FORCE_UPDATE 0x04
169 #define COMMON_PAGE (ts->common_page)
170 #define FINGER_PAGE (ts->finger_page)
171 #define BUTTON_PAGE (ts->button_page)
172 #define ANALOG_PAGE (ts->analog_page)
173 #define FLASH_PAGE (ts->flash_page)
174 #define DEFAULT_PAGE 0x00
178 #define TOUCH_PRESSED 1
179 #define TOUCH_RELEASED 0
180 #define BUTTON_CANCLED 0xff
183 #define GET_X_POSITION(high, low) ((int)(high<<4)|(int)(low&0x0F))
184 #define GET_Y_POSITION(high, low) ((int)(high<<4)|(int)((low&0xF0)>>4))
187 #define get_time_interval(a,b) a>=b ? a-b : 1000000+a-b
188 #define jitter_abs(x) (x > 0 ? x : -x)
189 #define jitter_sub(x, y) (x > y ? x - y : y - x)
191 static unsigned int synaptics_rmi4_i2c_debug_mask
= SYNAPTICS_RMI4_I2C_DEBUG_BUTTON_STATUS
;
193 static struct workqueue_struct
*synaptics_wq
;
194 static struct synaptics_ts_data
*ts_hub
= NULL
;
197 static int pressure_zero
= 0;
198 static int resume_flag
= 0;
199 static int ts_rebase_count
=0;
200 static int ghost_detection
= 0;
201 static int ghost_detection_count
= 0;
202 static int finger_subtraction_check_count
= 0;
203 static int force_continuous_mode
= 0;
204 static int long_press_check
= 0;
205 static int long_press_check_count
= 0;
206 static int button_check
= 0;
207 static unsigned int button_press_count
=0;
208 static unsigned int old_pos_x
= 0;
209 static unsigned int old_pos_y
= 0;
210 char finger_oldstate
[MAX_NUM_OF_FINGER
];
211 char button_oldstate
[MAX_NUM_OF_BUTTON
];
212 ts_finger_data old_ts_data
;
213 struct timeval t_ex_debug
[TIME_EX_PROFILE_MAX
];
216 struct class *touch_class
;
217 struct device
*touch_debug_dev
;
219 static int synaptics_tpd_flag
= 0;
220 static int synaptics_tpd_keylock_flag
=0;
221 static DECLARE_WAIT_QUEUE_HEAD(synaptics_waiter
);
223 #if defined(LGE_USE_SYNAPTICS_FW_UPGRADE)
224 struct device
*touch_fw_dev
;
225 struct wake_lock fw_suspend_lock
;
226 extern int FirmwareUpgrade(struct synaptics_ts_data
*ts
, const char* fw_path
);
229 #if defined(LGE_USE_SYNAPTICS_RED_ON_MTK)
230 extern void red_i2c_device_setup(void);
233 #if defined(LGE_USE_SYNAPTICS_F54)
234 struct i2c_client
*ds4_i2c_client
;
235 static int f54_fullrawcap_mode
= 0;
238 #define BUFFER_SIZE 128
246 #include <linux/dma-mapping.h>
248 static u8
* I2CDMABuf_va
= NULL
;
249 static dma_addr_t I2CDMABuf_pa
= 0;
251 int i2c_dma_write(struct i2c_client
*client
, const uint8_t *buf
, int len
)
254 for(i
= 0 ; i
< len
; i
++) {
255 I2CDMABuf_va
[i
] = buf
[i
];
259 client
->addr
= (client
->addr
& I2C_MASK_FLAG
) | I2C_ENEXT_FLAG
;
260 return i2c_master_send(client
, buf
, len
);
263 client
->addr
= (client
->addr
& I2C_MASK_FLAG
) | I2C_DMA_FLAG
| I2C_ENEXT_FLAG
;
264 return i2c_master_send(client
, (const char*)I2CDMABuf_pa
, len
);
268 int i2c_dma_read(struct i2c_client
*client
, uint8_t *buf
, int len
)
272 client
->addr
= (client
->addr
& I2C_MASK_FLAG
) | I2C_ENEXT_FLAG
;
273 return i2c_master_recv(client
, buf
, len
);
276 client
->addr
= (client
->addr
& I2C_MASK_FLAG
) | I2C_DMA_FLAG
| I2C_ENEXT_FLAG
;
277 ret
= i2c_master_recv(client
, (char*)I2CDMABuf_pa
, len
);
281 for(i
= 0; i
< len
; i
++) {
282 buf
[i
] = I2CDMABuf_va
[i
];
290 static int i2c_msg_transfer(struct i2c_client
*client
, struct i2c_msg
*msgs
, int count
)
293 for(i
= 0; i
< count
; i
++) {
294 if(msgs
[i
].flags
& I2C_M_RD
) {
295 ret
= i2c_dma_read(client
, msgs
[i
].buf
, msgs
[i
].len
);
298 ret
= i2c_dma_write(client
, msgs
[i
].buf
, msgs
[i
].len
);
300 if(ret
< 0)return ret
;
306 int synaptics_ts_read_f54(struct i2c_client
*client
, u8 reg
, int num
, u8
*buf
)
308 int message_count
= ((num
- 1) / BUFFER_SIZE
) + 2;
309 int message_rest_count
= num
% BUFFER_SIZE
;
312 if (i2c_msgs
.msg
== NULL
|| i2c_msgs
.count
< message_count
) {
313 if (i2c_msgs
.msg
!= NULL
)
315 i2c_msgs
.msg
= (struct i2c_msg
*)kcalloc(message_count
, sizeof(struct i2c_msg
), GFP_KERNEL
);
316 i2c_msgs
.count
= message_count
;
317 //dev_dbg(&client->dev, "%s: Update message count %d(%d)\n", __func__, i2c_msgs.count, message_count);
320 i2c_msgs
.msg
[0].addr
= client
->addr
;
321 i2c_msgs
.msg
[0].flags
= 0;
322 i2c_msgs
.msg
[0].len
= 1;
323 i2c_msgs
.msg
[0].buf
= ®
;
325 if (!message_rest_count
)
326 message_rest_count
= BUFFER_SIZE
;
327 for (i
= 0; i
< message_count
-1 ;i
++) {
328 if (i
== message_count
- 1)
329 data_len
= message_rest_count
;
331 data_len
= BUFFER_SIZE
;
332 i2c_msgs
.msg
[i
+ 1].addr
= client
->addr
;
333 i2c_msgs
.msg
[i
+ 1].flags
= I2C_M_RD
;
334 i2c_msgs
.msg
[i
+ 1].len
= data_len
;
335 i2c_msgs
.msg
[i
+ 1].buf
= buf
+ BUFFER_SIZE
* i
;
338 if (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_FUNC_TRACE
)
339 SYNAPTICS_DEBUG_MSG(":%x\n", reg
);
342 if (i2c_msg_transfer(client
, i2c_msgs
.msg
, message_count
) < 0) {
344 if (i2c_transfer(client
->adapter
, i2c_msgs
.msg
, message_count
) < 0) {
346 if (printk_ratelimit())
347 SYNAPTICS_ERR_MSG("transfer error\n");
354 int synaptics_ts_read(struct i2c_client
*client
, u8 reg
, int num
, u8
*buf
)
357 struct i2c_msg msgs
[] = {
359 .addr
= client
->addr
,
365 .addr
= client
->addr
,
373 if (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_FUNC_TRACE
)
374 SYNAPTICS_DEBUG_MSG(":%x\n", reg
);
377 if (i2c_msg_transfer(client
, msgs
, 2) < 0) {
379 if (i2c_transfer(client
->adapter
, msgs
, 2) < 0) {
381 if (printk_ratelimit())
382 SYNAPTICS_ERR_MSG("transfer error\n");
388 EXPORT_SYMBOL(synaptics_ts_read
);
390 int synaptics_ts_write(struct i2c_client
*client
, u8 reg
, u8
* buf
, int len
)
393 unsigned char send_buf
[len
+ 1];
394 struct i2c_msg msgs
[] = {
396 .addr
= client
->addr
,
397 .flags
= client
->flags
,
404 send_buf
[0] = (unsigned char)reg
;
405 memcpy(&send_buf
[1], buf
, len
);
410 if (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_FUNC_TRACE
)
411 SYNAPTICS_DEBUG_MSG(":%x\n", reg
);
414 if (i2c_msg_transfer(client
, msgs
, 1) < 0) {
418 if (i2c_transfer(client
->adapter
, msgs
, 1) < 0) {
420 if (printk_ratelimit())
421 SYNAPTICS_ERR_MSG("transfer error\n");
427 EXPORT_SYMBOL(synaptics_ts_write
);
429 int synaptics_ts_page_data_read(struct i2c_client
*client
, u8 page
, u8 reg
, int size
, u8
*data
)
433 ret
= i2c_smbus_write_byte_data(client
, PAGE_SELECT_REG
, page
);
435 SYNAPTICS_ERR_MSG("PAGE_SELECT_REG write fail\n");
437 ret
= synaptics_ts_read(client
, reg
, size
, data
);
439 SYNAPTICS_ERR_MSG("synaptics_ts_read read fail\n");
441 ret
= i2c_smbus_write_byte_data(client
, PAGE_SELECT_REG
, 0x00);
443 SYNAPTICS_ERR_MSG("PAGE_SELECT_REG write fail\n");
448 int synaptics_ts_page_data_write(struct i2c_client
*client
, u8 page
, u8 reg
, int size
, u8
*data
)
452 ret
= i2c_smbus_write_byte_data(client
, PAGE_SELECT_REG
, page
);
454 SYNAPTICS_ERR_MSG("PAGE_SELECT_REG write fail\n");
456 ret
= synaptics_ts_write(client
, reg
, data
, size
);
458 SYNAPTICS_ERR_MSG("synaptics_ts_write read fail\n");
460 ret
= i2c_smbus_write_byte_data(client
, PAGE_SELECT_REG
, 0x00);
462 SYNAPTICS_ERR_MSG("PAGE_SELECT_REG write fail\n");
467 void touch_keylock_enable(int key_lock
)
469 struct synaptics_ts_data
*ts
= ts_hub
;
472 SYNAPTICS_ERR_MSG("ts is NULL\n");
477 if(ts
->pdata
->use_irq
)
478 mt65xx_eint_unmask(ts
->pdata
->irq_num
);
480 hrtimer_start(&ts
->timer
, ktime_set(0, ts
->pdata
->report_period
+(ts
->pdata
->ic_booting_delay
*1000000)), HRTIMER_MODE_REL
);
481 synaptics_tpd_keylock_flag
=0;
484 if(ts
->pdata
->use_irq
)
485 mt65xx_eint_mask(ts
->pdata
->irq_num
);
487 hrtimer_cancel(&ts
->timer
);
488 synaptics_tpd_keylock_flag
=1;
491 EXPORT_SYMBOL(touch_keylock_enable
);
493 static void synaptics_ts_reset(int reset_pin
)
495 if (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_FUNC_TRACE
)
496 SYNAPTICS_DEBUG_MSG("\n");
498 mt_set_gpio_mode(reset_pin
, GPIO_MODE_00
);
499 mt_set_gpio_dir(reset_pin
, GPIO_DIR_OUT
);
500 mt_set_gpio_out(reset_pin
, GPIO_OUT_ZERO
);
502 mt_set_gpio_mode(reset_pin
, GPIO_MODE_00
);
503 mt_set_gpio_dir(reset_pin
, GPIO_DIR_OUT
);
504 mt_set_gpio_out(reset_pin
, GPIO_OUT_ONE
);
508 static void synaptics_ts_hard_reset(struct synaptics_ts_data
*ts
)
514 * 3. Wait more than 10ms
519 if (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_FUNC_TRACE
)
520 SYNAPTICS_DEBUG_MSG("\n");
522 if (ts
->pdata
->power
) {
523 ret
= ts
->pdata
->power(0);
526 SYNAPTICS_ERR_MSG("power on failed\n");
530 synaptics_ts_reset(ts
->pdata
->reset_gpio
);
532 ret
= ts
->pdata
->power(1);
535 SYNAPTICS_ERR_MSG("power on failed\n");
538 queue_delayed_work(synaptics_wq
, &ts
->work
,msecs_to_jiffies(ts
->pdata
->ic_booting_delay
));
541 int synaptics_ts_ic_ctrl(struct i2c_client
*client
, u8 code
, u16 value
)
543 struct synaptics_ts_data
* ts
;
549 SYNAPTICS_ERR_MSG("ts is NULL\n");
553 SYNAPTICS_INFO_MSG("synaptics_ts_ic_ctrl: %d, %d\n", code
, value
);
557 case IC_CTRL_BASELINE
:
562 if (unlikely(synaptics_ts_page_data_write(client
, ANALOG_PAGE
, ANALOG_CONTROL_REG
, 1, FORCE_FAST_RELAXATION
) < 0)) {
563 SYNAPTICS_ERR_MSG("ANALOG_CONTROL_REG write fail\n");
569 if (unlikely(synaptics_ts_page_data_write(client
, ANALOG_PAGE
, ANALOG_COMMAND_REG
, 1, FORCE_UPDATE
) < 0)) {
570 SYNAPTICS_ERR_MSG("ANALOG_COMMAND_REG write fail\n");
574 if (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_FINGER_STATUS
)
575 SYNAPTICS_INFO_MSG("BASELINE_OPEN\n");
581 if (unlikely(synaptics_ts_page_data_write(client
, ANALOG_PAGE
, ANALOG_CONTROL_REG
, 1, 0x00) < 0)) {
582 TOUCH_ERR_MSG("ANALOG_CONTROL_REG write fail\n");
588 if (unlikely(synaptics_ts_page_data_write(client
, ANALOG_PAGE
, ANALOG_COMMAND_REG
, 1, FORCE_UPDATE
) < 0)) {
589 TOUCH_ERR_MSG("ANALOG_COMMAND_REG write fail\n");
593 if (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_FINGER_STATUS
)
594 TOUCH_INFO_MSG("BASELINE_FIX\n");
598 case BASELINE_REBASE
:
599 /* rebase base line */
600 if (likely(ts
->finger_dsc
.id
!= 0)) {
601 if (unlikely(i2c_smbus_write_byte_data(client
, FINGER_COMMAND_REG
, 0x1) < 0)) {
602 SYNAPTICS_ERR_MSG("finger baseline reset command write fail\n");
613 case IC_CTRL_REPORT_MODE
:
616 case 0: // continuous mode
617 if (unlikely(i2c_smbus_write_byte_data(client
, TWO_D_REPORTING_MODE
, REPORT_BEYOND_CLIP
| ABS_MODE
| CONTINUOUS_REPORT_MODE
) < 0)) {
618 SYNAPTICS_ERR_MSG("TWO_D_REPORTING_MODE write fail\n");
623 case 1: // reduced mode
624 if (unlikely(i2c_smbus_write_byte_data(client
, TWO_D_REPORTING_MODE
, REPORT_BEYOND_CLIP
| ABS_MODE
| REDUCED_REPORT_MODE
) < 0)) {
625 SYNAPTICS_ERR_MSG("TWO_D_REPORTING_MODE write fail\n");
642 void release_all_ts_event(void)
644 struct synaptics_ts_data
*ts
;
645 unsigned int f_counter
= 0;
646 unsigned int b_counter
= 0;
647 char report_enable
= 0;
652 SYNAPTICS_ERR_MSG("ts is NULL\n");
657 for(f_counter
= 0; f_counter
< ts
->pdata
->num_of_finger
; f_counter
++) {
658 if (ts
->finger_prestate
[f_counter
] == TOUCH_PRESSED
) {
659 #if defined(MT_PROTOCOL_A)
660 input_report_abs(ts
->input_dev
, ABS_MT_POSITION_X
, ts
->pre_ts_data
.pos_x
[f_counter
]);
661 input_report_abs(ts
->input_dev
, ABS_MT_POSITION_Y
, ts
->pre_ts_data
.pos_y
[f_counter
]);
662 input_report_abs(ts
->input_dev
, ABS_MT_PRESSURE
, TOUCH_RELEASED
);
663 input_report_abs(ts
->input_dev
, ABS_MT_WIDTH_MAJOR
, TOUCH_RELEASED
);
665 input_mt_slot(ts
->input_dev
, f_counter
);
666 input_mt_report_slot_state(ts
->input_dev
, MT_TOOL_FINGER
, false);
673 for(b_counter
= 0; b_counter
< ts
->pdata
->num_of_button
; b_counter
++) {
674 if (ts
->button_prestate
[b_counter
] == TOUCH_PRESSED
) {
676 input_report_key(ts
->input_dev
, ts
->pdata
->button
[b_counter
], TOUCH_RELEASED
);
680 /* Reset finger position data */
681 memset(&old_ts_data
, 0x0, sizeof(ts_finger_data
));
682 memset(&ts
->pre_ts_data
, 0x0, sizeof(ts_finger_data
));
685 SYNAPTICS_INFO_MSG("Release all pressed event before touch power off\n");
686 input_sync(ts
->input_dev
);
688 /* Reset finger & button status data */
689 memset(finger_oldstate
, 0x0, sizeof(char) * ts
->pdata
->num_of_finger
);
690 memset(button_oldstate
, 0x0, sizeof(char) * ts
->pdata
->num_of_button
);
691 memset(ts
->finger_prestate
, 0x0, sizeof(char) * ts
->pdata
->num_of_finger
);
692 memset(ts
->button_prestate
, 0x0, sizeof(char) * ts
->pdata
->num_of_button
);
696 bool chk_time_interval(struct timeval t_aft
, struct timeval t_bef
, int t_val
)
698 if( t_aft
.tv_sec
- t_bef
.tv_sec
== 0 ) {
699 if((get_time_interval(t_aft
.tv_usec
, t_bef
.tv_usec
)) <= t_val
)
701 } else if( t_aft
.tv_sec
- t_bef
.tv_sec
== 1 ) {
702 if( t_aft
.tv_usec
+ 1000000 - t_bef
.tv_usec
<= t_val
)
709 int ghost_detect_solution(void)
711 int first_int_detection
= 0;
713 struct synaptics_ts_data
*ts
;
718 SYNAPTICS_ERR_MSG("ts is NULL\n");
724 do_gettimeofday(&t_ex_debug
[TIME_EX_FIRST_INT_TIME
]);
726 if (t_ex_debug
[TIME_EX_FIRST_INT_TIME
].tv_sec
- t_ex_debug
[TIME_EX_INIT_TIME
].tv_sec
== 0 ) {
727 if((get_time_interval(t_ex_debug
[TIME_EX_FIRST_INT_TIME
].tv_usec
, t_ex_debug
[TIME_EX_INIT_TIME
].tv_usec
)) <= 200000)
728 first_int_detection
= 1;
730 else if (t_ex_debug
[TIME_EX_FIRST_INT_TIME
].tv_sec
- t_ex_debug
[TIME_EX_INIT_TIME
].tv_sec
== 1) {
731 if(t_ex_debug
[TIME_EX_FIRST_INT_TIME
].tv_usec
+ 1000000 - t_ex_debug
[TIME_EX_INIT_TIME
].tv_usec
<= 200000) {
732 first_int_detection
= 1;
737 if (first_int_detection
) {
738 for (cnt
= 0; cnt
< ts
->pdata
->num_of_finger
; cnt
++) {
739 if (ts
->finger_prestate
[cnt
] == TOUCH_PRESSED
) {
740 SYNAPTICS_INFO_MSG("ghost detected within first input time 200ms\n");
746 if (pressure_zero
== 1) {
747 SYNAPTICS_INFO_MSG("ghost detected on pressure\n");
751 if (ts
->pre_ts_data
.total_num
) {
752 if (old_ts_data
.total_num
!= ts
->pre_ts_data
.total_num
) {
753 if (old_ts_data
.total_num
<= ts
->pre_ts_data
.total_num
) {
754 for(id
= 0; id
< ts
->pdata
->num_of_finger
; id
++) {
755 if (ts
->finger_prestate
[id
] == TOUCH_PRESSED
&& finger_oldstate
[id
] == TOUCH_RELEASED
) {
760 if (id
< ts
->pdata
->num_of_finger
) {
761 memcpy(&t_ex_debug
[TIME_EX_PREV_PRESS_TIME
], &t_ex_debug
[TIME_EX_CURR_PRESS_TIME
], sizeof(struct timeval
));
762 do_gettimeofday(&t_ex_debug
[TIME_EX_CURR_PRESS_TIME
]);
764 if ((ts
->pre_ts_data
.pos_x
[id
] > 0) && (ts
->pre_ts_data
.pos_x
[id
] < ts
->pdata
->x_max
)
765 && (1 <= old_ts_data
.total_num
) && (1 <= ts
->pre_ts_data
.total_num
)
766 && (jitter_sub(old_pos_x
, ts
->pre_ts_data
.pos_x
[id
]) <= 10) && (jitter_sub(old_pos_y
, ts
->pre_ts_data
.pos_y
[id
]) <= 10)) {
767 if (chk_time_interval(t_ex_debug
[TIME_EX_CURR_PRESS_TIME
], t_ex_debug
[TIME_EX_PREV_PRESS_TIME
], 50000)) {
769 ghost_detection_count
++;
772 else if ((ts
->pre_ts_data
.pos_x
[id
] > 0) && (ts
->pre_ts_data
.pos_x
[id
] < ts
->pdata
->x_max
)
773 && (old_ts_data
.total_num
== 0) && (ts
->pre_ts_data
.total_num
== 1)
774 && (jitter_sub(old_pos_x
, ts
->pre_ts_data
.pos_x
[id
]) <= 10) && (jitter_sub(old_pos_y
, ts
->pre_ts_data
.pos_y
[id
]) <= 10)) {
775 if (chk_time_interval(t_ex_debug
[TIME_EX_CURR_PRESS_TIME
], t_ex_debug
[TIME_EX_PREV_PRESS_TIME
], 50000)) {
779 else if (5 < jitter_sub(old_ts_data
.total_num
, ts
->pre_ts_data
.total_num
)) {
785 old_pos_x
= ts
->pre_ts_data
.pos_x
[id
];
786 old_pos_y
= ts
->pre_ts_data
.pos_y
[id
];
790 memcpy(&t_ex_debug
[TIME_EX_PREV_PRESS_TIME
], &t_ex_debug
[TIME_EX_CURR_PRESS_TIME
], sizeof(struct timeval
));
791 do_gettimeofday(&t_ex_debug
[TIME_EX_CURR_INT_TIME
]);
793 if (chk_time_interval(t_ex_debug
[TIME_EX_CURR_INT_TIME
], t_ex_debug
[TIME_EX_PREV_PRESS_TIME
], 10999)) {
794 finger_subtraction_check_count
++;
797 finger_subtraction_check_count
= 0;
800 if (4 < finger_subtraction_check_count
) {
801 finger_subtraction_check_count
= 0;
802 SYNAPTICS_INFO_MSG("need_to_rebase finger_subtraction!!!\n");
803 /* rebase is disabled. see TD 41871*/
804 //goto out_need_to_rebase;
809 if (force_continuous_mode
) {
810 do_gettimeofday(&t_ex_debug
[TIME_EX_CURR_INT_TIME
]);
811 // if 20 sec have passed since resume, then return to the original report mode.
812 if(t_ex_debug
[TIME_EX_CURR_INT_TIME
].tv_sec
- t_ex_debug
[TIME_EX_INIT_TIME
].tv_sec
>= 10) {
813 if(synaptics_ts_ic_ctrl(ts
->client
, IC_CTRL_REPORT_MODE
, ts
->pdata
->report_mode
) < 0) {
814 SYNAPTICS_ERR_MSG("IC_CTRL_BASELINE(1) handling fail\n");
815 goto out_need_to_init
;
817 force_continuous_mode
= 0;
820 long_press_check
= 0;
822 for(cnt
= 0; cnt
< MAX_NUM_OF_FINGER
; cnt
++) {
823 if (ts
->finger_prestate
[cnt
] == TOUCH_PRESSED
) {
824 if ((finger_oldstate
[cnt
] == TOUCH_PRESSED
) && (jitter_sub(old_ts_data
.pos_x
[cnt
], ts
->pre_ts_data
.pos_x
[cnt
]) < 10) && (jitter_sub(old_ts_data
.pos_y
[cnt
], ts
->pre_ts_data
.pos_y
[cnt
]) < 10)) {
825 long_press_check
= 1;
830 if (long_press_check
) {
831 long_press_check_count
++;
834 long_press_check_count
= 0;
837 if (500 < long_press_check_count
) {
838 long_press_check_count
= 0;
839 SYNAPTICS_INFO_MSG("need_to_rebase long press!!!\n");
840 goto out_need_to_rebase
;
844 else if (!ts
->pre_ts_data
.total_num
) {
845 long_press_check_count
= 0;
846 finger_subtraction_check_count
= 0;
850 for(id
= 0; id
< ts
->pdata
->num_of_button
; id
++) {
851 if (ts
->button_prestate
[id
] == TOUCH_PRESSED
&& button_oldstate
[id
] == TOUCH_RELEASED
) {
857 if (button_press_count
== 0)
858 do_gettimeofday(&t_ex_debug
[TIME_EX_BUTTON_PRESS_START_TIME
]);
860 do_gettimeofday(&t_ex_debug
[TIME_EX_BUTTON_PRESS_END_TIME
]);
862 button_press_count
++;
864 if (6 <= button_press_count
) {
865 if (chk_time_interval(t_ex_debug
[TIME_EX_BUTTON_PRESS_END_TIME
], t_ex_debug
[TIME_EX_BUTTON_PRESS_START_TIME
], 100000)) {
866 SYNAPTICS_INFO_MSG("need_to_rebase button zero\n");
867 goto out_need_to_rebase
;
870 button_press_count
= 0;
874 if (!chk_time_interval(t_ex_debug
[TIME_EX_BUTTON_PRESS_END_TIME
], t_ex_debug
[TIME_EX_BUTTON_PRESS_START_TIME
], 100000)) {
875 button_press_count
= 0;
880 if ((ghost_detection
== 1) && (ts
->pre_ts_data
.total_num
== 0) && (ts
->pre_ts_data
.palm
== 0)) {
881 SYNAPTICS_INFO_MSG("need_to_rebase zero\n");
882 goto out_need_to_rebase
;
884 else if ((ghost_detection
== 1) && (3 <= ghost_detection_count
) && (ts
->pre_ts_data
.palm
== 0)) {
885 SYNAPTICS_INFO_MSG("need_to_rebase zero 3\n");
886 goto out_need_to_rebase
;
894 ghost_detection_count
= 0;
899 if (ts_rebase_count
== 1) {
900 do_gettimeofday(&t_ex_debug
[TIME_EX_FIRST_GHOST_DETECT_TIME
]);
902 if ((t_ex_debug
[TIME_EX_FIRST_GHOST_DETECT_TIME
].tv_sec
- t_ex_debug
[TIME_EX_INIT_TIME
].tv_sec
) <= 3) {
904 SYNAPTICS_INFO_MSG("need_to_init in 3 sec\n");
905 goto out_need_to_init
;
909 do_gettimeofday(&t_ex_debug
[TIME_EX_SECOND_GHOST_DETECT_TIME
]);
911 if (((t_ex_debug
[TIME_EX_SECOND_GHOST_DETECT_TIME
].tv_sec
- t_ex_debug
[TIME_EX_FIRST_GHOST_DETECT_TIME
].tv_sec
) <= 5)) {
913 SYNAPTICS_INFO_MSG("need_to_init\n");
914 goto out_need_to_init
;
918 memcpy(&t_ex_debug
[TIME_EX_FIRST_GHOST_DETECT_TIME
], &t_ex_debug
[TIME_EX_SECOND_GHOST_DETECT_TIME
], sizeof(struct timeval
));
922 release_all_ts_event();
923 if (synaptics_ts_ic_ctrl(ts
->client
, IC_CTRL_BASELINE
, BASELINE_REBASE
) < 0) {
924 SYNAPTICS_ERR_MSG("IC_CTRL_REBASE(2) handling fail\n");
926 SYNAPTICS_INFO_MSG("need_to_rebase\n");
934 #if defined(LGE_USE_SYNAPTICS_FW_UPGRADE)
935 static int synaptics_ts_need_fw_upgrade(void)
940 int product_check
= 0;
941 struct synaptics_ts_data
*ts
;
943 if (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_FUNC_TRACE
)
944 SYNAPTICS_DEBUG_MSG("\n");
949 SYNAPTICS_ERR_MSG("ts is NULL\n");
953 if(!strcmp(ts
->product_id
, ts
->fw_product_id
)) {
956 cur_ver
= (int)simple_strtol(&ts
->config_id
[1], NULL
, 10);
957 fw_ver
= (int)simple_strtol(&ts
->fw_config_id
[1], NULL
, 10);
961 SYNAPTICS_INFO_MSG("FW n: %d, %d\n", fw_ver
, cur_ver
);
963 if(ts
->fw_path
[0] != 0)
964 ret
= 2; /* FW exist in file */
965 else if(ts
->fw_force_upgrade
== 1)
966 ret
= 1; /* FW exist in buffer */
967 else if(product_check
&& (fw_ver
> cur_ver
))
968 ret
= 1; /* FW exist in buffer */
970 ret
= 0; /* No need to upgrade FW */
973 if( !ts_force_update_chk
) {
975 ts_force_update_chk
= 1;
978 SYNAPTICS_INFO_MSG("FW upgrade check: %d\n", ret
);
985 static void synaptics_ts_fw_upgrade(struct synaptics_ts_data
*ts
, const char* fw_path
)
988 struct synaptics_ts_timestamp time_debug
;
990 if (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_FUNC_TRACE
)
991 SYNAPTICS_DEBUG_MSG("\n");
993 if (likely(!ts
->is_downloading
)) {
994 ts
->is_downloading
= 1;
996 wake_lock(&fw_suspend_lock
);
998 if (likely(!ts
->is_suspended
)) {
1001 if (ts
->pdata
->use_irq
)
1002 mt65xx_eint_mask(ts
->pdata
->irq_num
);
1004 hrtimer_cancel(&ts
->timer
);
1006 if (ts
->pdata
->power
) {
1007 ret
= ts
->pdata
->power(1);
1010 SYNAPTICS_ERR_MSG("power on failed\n");
1012 msleep(ts
->pdata
->ic_booting_delay
);
1017 if (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_UPGRADE_DELAY
) {
1018 memset(&time_debug
, 0x0, sizeof(struct synaptics_ts_timestamp
));
1019 atomic_set(&time_debug
.ready
, 1);
1020 time_debug
.start
= cpu_clock(smp_processor_id());
1023 ret
= FirmwareUpgrade(ts
, fw_path
);
1025 SYNAPTICS_ERR_MSG("Firmware upgrade Fail!!!\n");
1027 SYNAPTICS_INFO_MSG("Firmware upgrade Complete\n");
1030 if (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_UPGRADE_DELAY
) {
1031 if (atomic_read(&time_debug
.ready
) == 1) {
1032 time_debug
.end
= cpu_clock(smp_processor_id());
1033 time_debug
.result_t
= time_debug
.end
- time_debug
.start
;
1034 time_debug
.rem
= do_div(time_debug
.result_t
, 1000000000);
1035 SYNAPTICS_DEBUG_MSG("FW upgrade time < %2lu.%06lu\n", (unsigned long)time_debug
.result_t
, time_debug
.rem
/1000);
1036 atomic_set(&time_debug
.ready
, 0);
1040 if (likely(!ts
->is_suspended
)) {
1041 if (ts
->pdata
->use_irq
)
1042 mt65xx_eint_unmask(ts
->pdata
->irq_num
);
1044 hrtimer_start(&ts
->timer
, ktime_set(0, ts
->pdata
->report_period
+(ts
->pdata
->ic_booting_delay
*1000000)), HRTIMER_MODE_REL
);
1047 memset(ts
->fw_path
, 0x00, sizeof(ts
->fw_path
));
1048 ts
->fw_force_upgrade
= 0;
1050 if (likely(!ts
->is_suspended
)) {
1051 synaptics_ts_hard_reset(ts
);
1053 if (ts
->pdata
->power
) {
1054 ret
= ts
->pdata
->power(0);
1057 SYNAPTICS_ERR_MSG("power on failed\n");
1061 wake_unlock(&fw_suspend_lock
);
1062 ts
->is_downloading
= 0;
1064 SYNAPTICS_ERR_MSG("Firmware Upgrade process is aready working on\n");
1068 static ssize_t
show_version(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
1070 struct synaptics_ts_data
*ts
;
1075 SYNAPTICS_ERR_MSG("ts is NULL\n");
1079 return sprintf(buf
, "%s : FW_VERSION, %s : HW_VERSION \n", ts
->config_id
, ts
->product_id
);
1081 static DEVICE_ATTR(version
, 0664, show_version
, NULL
);
1083 static ssize_t
store_firmware(struct device
*dev
, struct device_attribute
*attr
, const char *buf
, size_t size
)
1085 struct synaptics_ts_data
*ts
;
1086 char path
[256] = {0};
1088 sscanf(buf
, "%s", path
);
1093 SYNAPTICS_ERR_MSG("ts is NULL\n");
1097 if(ts
->pdata
->use_irq
)
1098 mt65xx_eint_mask(ts
->pdata
->irq_num
);
1100 hrtimer_cancel(&ts
->timer
);
1105 SYNAPTICS_DEBUG_MSG("Firmware image upgrade: %s\n", path
);
1107 if(!strncmp(path
, "1", 1)) {
1108 ts
->fw_force_upgrade
= 1;
1111 memcpy(ts
->fw_path
, path
, sizeof(ts
->fw_path
));
1114 if(ts
->is_suspended
) {
1115 if(ts
->pdata
->power
)
1116 ts
->pdata
->power(1);
1119 queue_delayed_work(synaptics_wq
, &ts
->work
, msecs_to_jiffies(ts
->pdata
->ic_booting_delay
));
1121 while(ts
->is_downloading
);
1125 static DEVICE_ATTR(firmware
, 0664, NULL
, store_firmware
);
1128 static ssize_t
show_log(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
1130 return sprintf(buf
, "0x%x\n", synaptics_rmi4_i2c_debug_mask
);
1133 static ssize_t
store_log(struct device
*dev
, struct device_attribute
*attr
, const char *buf
, size_t size
)
1137 sscanf(buf
, "%x", &mask
);
1139 SYNAPTICS_DEBUG_MSG("debug mask: 0x%x\n", mask
);
1141 synaptics_rmi4_i2c_debug_mask
= mask
;
1145 static DEVICE_ATTR(log
, 0664, show_log
, store_log
);
1147 #if defined(LGE_USE_SYNAPTICS_F54)
1148 static ssize_t
show_f54(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
1151 struct synaptics_ts_data
*ts
;
1156 SYNAPTICS_ERR_MSG("ts is NULL\n");
1160 if (ts
->is_suspended
== 0) {
1162 SYNA_ConstructRMI_F54();
1163 SYNA_ConstructRMI_F1A();
1165 ret
= sprintf(buf
, "====== F54 Function Info ======\n");
1167 switch(f54_fullrawcap_mode
)
1169 case 0: ret
+= sprintf(buf
+ret
, "fullrawcap_mode = For sensor\n");
1171 case 1: ret
+= sprintf(buf
+ret
, "fullrawcap_mode = For FPC\n");
1173 case 2: ret
+= sprintf(buf
+ret
, "fullrawcap_mode = CheckTSPConnection\n");
1175 case 3: ret
+= sprintf(buf
+ret
, "fullrawcap_mode = Baseline\n");
1177 case 4: ret
+= sprintf(buf
+ret
, "fullrawcap_mode = Delta image\n");
1181 if(ts
->pdata
->use_irq
)
1182 mt65xx_eint_mask(ts
->pdata
->irq_num
);
1184 hrtimer_cancel(&ts
->timer
);
1186 ret
+= sprintf(buf
+ret
, "F54_FullRawCap(%d) Test Result: %s", f54_fullrawcap_mode
, (F54_FullRawCap(f54_fullrawcap_mode
) > 0) ? "Pass\n" : "Fail\n" );
1187 ret
+= sprintf(buf
+ret
, "F54_TxToTxReport() Test Result: %s", (F54_TxToTxReport() > 0) ? "Pass\n" : "Fail\n" );
1188 ret
+= sprintf(buf
+ret
, "F54_RxToRxReport() Test Result: %s", (F54_RxToRxReport() > 0) ? "Pass\n" : "Fail\n" );
1189 ret
+= sprintf(buf
+ret
, "F54_TxToGndReport() Test Result: %s", (F54_TxToGndReport() > 0) ? "Pass\n" : "Fail\n" );
1190 ret
+= sprintf(buf
+ret
, "F54_HighResistance() Test Result: %s", (F54_HighResistance() > 0) ? "Pass\n" : "Fail\n" );
1192 if (ts
->pdata
->use_irq
)
1193 mt65xx_eint_unmask(ts
->pdata
->irq_num
);
1195 hrtimer_start(&ts
->timer
, ktime_set(0, ts
->pdata
->report_period
+(ts
->pdata
->ic_booting_delay
*1000000)), HRTIMER_MODE_REL
);
1197 ret
= sprintf(buf
+ret
, "state=[suspend]. we cannot use I2C, now. Test Result: Fail\n");
1203 static ssize_t
store_f54(struct device
*dev
, struct device_attribute
*attr
, const char *buf
, size_t size
)
1207 ret
= sscanf(buf
, "%d", &f54_fullrawcap_mode
);
1211 static DEVICE_ATTR(f54
, 0664, show_f54
, store_f54
);
1214 void synaptics_ts_init_sysfs(void)
1216 touch_class
= class_create(THIS_MODULE
, "touch");
1217 touch_debug_dev
= device_create(touch_class
, NULL
, 0, NULL
, "debug");
1219 if(device_create_file(touch_debug_dev
, &dev_attr_log
) < 0) {
1220 SYNAPTICS_ERR_MSG("log device_create_file failed\n");
1223 #if defined(LGE_USE_SYNAPTICS_F54)
1224 if(device_create_file(touch_debug_dev
, &dev_attr_f54
) < 0) {
1225 SYNAPTICS_ERR_MSG("log device_create_file failed\n");
1229 #if defined(LGE_USE_SYNAPTICS_FW_UPGRADE)
1230 touch_fw_dev
= device_create(touch_class
, NULL
, 0, NULL
, "firmware");
1232 if(device_create_file(touch_fw_dev
, &dev_attr_firmware
) < 0) {
1233 SYNAPTICS_ERR_MSG("firmware device_create_file failed\n");
1236 if(device_create_file(touch_fw_dev
, &dev_attr_version
) < 0) {
1237 SYNAPTICS_ERR_MSG("version device_create_file failed\n");
1242 static enum hrtimer_restart
synaptics_ts_timer_func(struct hrtimer
*timer
)
1244 struct synaptics_ts_data
*ts
= container_of(timer
, struct synaptics_ts_data
, timer
);
1246 if (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_FUNC_TRACE
)
1247 SYNAPTICS_DEBUG_MSG("\n");
1249 /* ignore irrelevant timer interrupt during IC power on */
1250 if (likely(ts
->ic_init
)) {
1251 queue_delayed_work(synaptics_wq
, &ts
->work
, 0);
1252 hrtimer_start(&ts
->timer
, ktime_set(0, ts
->pdata
->report_period
), HRTIMER_MODE_REL
);
1255 return HRTIMER_NORESTART
;
1258 static void read_page_description_table(struct synaptics_ts_data
*ts
)
1260 /* Read config data */
1262 ts_function_descriptor buffer
;
1263 unsigned short u_address
;
1266 if (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_FUNC_TRACE
)
1267 SYNAPTICS_DEBUG_MSG("\n");
1269 memset(&buffer
, 0x0, sizeof(ts_function_descriptor
));
1271 ts
->common_dsc
.id
= 0;
1272 ts
->finger_dsc
.id
= 0;
1273 ts
->button_dsc
.id
= 0;
1274 ts
->analog_dsc
.id
= 0;
1275 ts
->flash_dsc
.id
= 0;
1277 for(page_num
= 0; page_num
< PAGE_MAX_NUM
; page_num
++) {
1278 ret
= i2c_smbus_write_byte_data(ts
->client
, PAGE_SELECT_REG
, page_num
);
1280 SYNAPTICS_ERR_MSG("PAGE_SELECT_REG write fail\n");
1282 for(u_address
= DESCRIPTION_TABLE_START
; u_address
> 10; u_address
-= sizeof(ts_function_descriptor
)) {
1283 ret
= synaptics_ts_read(ts
->client
, u_address
, sizeof(buffer
), (unsigned char *)&buffer
);
1285 SYNAPTICS_ERR_MSG("ts_function_descriptor read fail\n");
1292 switch (buffer
.id
) {
1293 case RMI_DEVICE_CONTROL
:
1294 ts
->common_dsc
= buffer
;
1295 ts
->common_page
= page_num
;
1297 case TOUCHPAD_SENSORS
:
1298 ts
->finger_dsc
= buffer
;
1299 ts
->finger_page
= page_num
;
1301 case CAPACITIVE_BUTTON_SENSORS
:
1302 ts
->button_dsc
= buffer
;
1303 ts
->button_page
= page_num
;
1305 case ANALOG_CONTROL
:
1306 ts
->analog_dsc
= buffer
;
1307 ts
->analog_page
= page_num
;
1309 case FLASH_MEMORY_MANAGEMENT
:
1310 ts
->flash_dsc
= buffer
;
1311 ts
->flash_page
= page_num
;
1317 ret
= i2c_smbus_write_byte_data(ts
->client
, PAGE_SELECT_REG
, 0x00);
1319 SYNAPTICS_ERR_MSG("PAGE_SELECT_REG write fail\n");
1322 static void synaptics_ts_button_lock_work_func(struct work_struct
*button_lock_work
)
1324 struct synaptics_ts_data
*ts
= container_of(to_delayed_work(button_lock_work
), struct synaptics_ts_data
, button_lock_work
);
1327 ts
->curr_int_mask
= 0xFF;
1328 if (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_INT_STATUS
)
1329 SYNAPTICS_DEBUG_MSG("Interrupt mask 0x%x\n", ts
->curr_int_mask
);
1330 ret
= i2c_smbus_write_byte_data(ts
->client
, INTERRUPT_ENABLE_REG
, ts
->curr_int_mask
);
1333 static void synaptics_ts_work_func(struct work_struct
*work
)
1335 struct synaptics_ts_data
*ts
= container_of(to_delayed_work(work
), struct synaptics_ts_data
, work
);
1337 int width_max
= 0, width_min
= 0;
1338 int width_orientation
= 0;
1339 unsigned int f_counter
= 0;
1340 unsigned int b_counter
= 0;
1341 unsigned int reg_num
= 0;
1342 unsigned int finger_order
= 0;
1344 char report_enable
= 0;
1345 ts_sensor_ctrl ts_reg_ctrl
;
1346 ts_sensor_data ts_reg_data
;
1347 ts_finger_data curr_ts_data
;
1348 u8 resolution
[2] = {0};
1350 #if defined(LGE_USE_SYNAPTICS_FW_UPGRADE)
1351 u8 device_status
= 0;
1352 u8 flash_control
= 0;
1355 if (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_FUNC_TRACE
)
1356 SYNAPTICS_DEBUG_MSG("\n");
1358 memset(&ts_reg_ctrl
, 0x0, sizeof(ts_sensor_ctrl
));
1359 memset(&ts_reg_data
, 0x0, sizeof(ts_sensor_data
));
1360 memset(&curr_ts_data
, 0x0, sizeof(ts_finger_data
));
1364 /* read device status */
1365 ret
= synaptics_ts_read(ts
->client
, DEVICE_STATUS_REG
, sizeof(unsigned char), (u8
*) &ts_reg_ctrl
.device_status_reg
);
1367 SYNAPTICS_ERR_MSG("DEVICE_STATUS_REG read fail\n");
1371 /* read interrupt status */
1372 ret
= synaptics_ts_read(ts
->client
, INTERRUPT_STATUS_REG
, sizeof(unsigned char), (u8
*) &ts_reg_ctrl
.interrupt_status_reg
);
1374 SYNAPTICS_ERR_MSG("INTERRUPT_STATUS_REG read fail\n");
1377 if (!(synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_INT_INTERVAL
)
1378 && (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_INT_ISR_DELAY
)
1379 && !(synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_FINGER_HANDLE_TIME
)
1380 && !(synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_BUTTON_HANDLE_TIME
)
1381 && (atomic_read(&ts
->int_delay
.ready
) == 1)) {
1382 ts
->int_delay
.end
= cpu_clock(smp_processor_id());
1383 ts
->int_delay
.result_t
= ts
->int_delay
.end
-ts
->int_delay
.start
;
1384 ts
->int_delay
.rem
= do_div(ts
->int_delay
.result_t
, 1000000);
1385 SYNAPTICS_DEBUG_MSG("Touch IC interrupt line clear time < %3lu.%03lu\n", (unsigned long)ts
->int_delay
.result_t
, ts
->int_delay
.rem
/1000);
1389 /* read button data */
1390 if (likely(ts
->button_dsc
.id
!= 0)) {
1391 ret
= synaptics_ts_page_data_read(ts
->client
, BUTTON_PAGE
, BUTTON_DATA_REG
, sizeof(ts_reg_ctrl
.button_data_reg
), (u8
*)&ts_reg_ctrl
.button_data_reg
);
1393 SYNAPTICS_ERR_MSG("BUTTON_DATA_REG read fail\n");
1398 /* read finger state & finger data register */
1399 ret
= synaptics_ts_read(ts
->client
, FINGER_STATE_REG
, sizeof(ts_reg_data
) - ((MAX_NUM_OF_FINGER
- ts
->pdata
->num_of_finger
) * NUM_OF_EACH_FINGER_DATA_REG
), (u8
*) &ts_reg_data
.finger_state_reg
[0]);
1402 SYNAPTICS_ERR_MSG("FINGER_STATE_REG read fail\n");
1407 ret
= synaptics_ts_read(ts
->client
, TWO_D_EXTEND_STATUS
, 1, &temp
);
1409 SYNAPTICS_ERR_MSG("TWO_D_EXTEND_STATUS read fail\n");
1412 old_ts_data
.palm
= ts
->pre_ts_data
.palm
;
1413 ts
->pre_ts_data
.palm
= temp
& 0x2;
1414 /* ESD damage check */
1415 if ((ts_reg_ctrl
.device_status_reg
& DEVICE_FAILURE_MASK
)== DEVICE_FAILURE_MASK
) {
1416 SYNAPTICS_ERR_MSG("ESD damage occured. Reset Touch IC\n");
1418 synaptics_ts_hard_reset(ts
);
1422 /* Internal reset check */
1423 if (((ts_reg_ctrl
.device_status_reg
& DEVICE_STATUS_REG_UNCONFIGURED
) >> 7) == 1) {
1424 SYNAPTICS_ERR_MSG("Touch IC resetted internally. Reconfigure register setting\n");
1426 queue_delayed_work(synaptics_wq
, &ts
->work
, 0);
1430 /* finger & button interrupt has no correlation */
1431 if (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_INT_STATUS
)
1432 SYNAPTICS_DEBUG_MSG("Interrupt status register: 0x%x\n", ts_reg_ctrl
.interrupt_status_reg
);
1434 ret
= synaptics_ts_read(ts
->client
, INTERRUPT_ENABLE_REG
, sizeof(ts
->curr_int_mask
), (u8
*) &ts
->curr_int_mask
);
1436 if (ts_reg_ctrl
.interrupt_status_reg
& ts
->int_status_reg_asb0_bit
1437 && ts
->curr_int_mask
& ts
->int_status_reg_asb0_bit
) { /* Finger */
1438 for(f_counter
= 0; f_counter
< ts
->pdata
->num_of_finger
; f_counter
++) {
1439 reg_num
= f_counter
/4;
1440 finger_order
= f_counter
%4;
1442 if (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_FINGER_REG
) {
1443 if (finger_order
== 0)
1444 SYNAPTICS_DEBUG_MSG("Finger status register%d: 0x%x\n",
1445 reg_num
, ts_reg_data
.finger_state_reg
[reg_num
]);
1448 if (((ts_reg_data
.finger_state_reg
[reg_num
]>>(finger_order
*2))
1449 & FINGER_STATE_MASK
) == 1)
1451 curr_ts_data
.pos_x
[f_counter
] =
1452 (int)GET_X_POSITION(ts_reg_data
.finger_data
[f_counter
][REG_X_POSITION
],
1453 ts_reg_data
.finger_data
[f_counter
][REG_YX_POSITION
]);
1454 curr_ts_data
.pos_y
[f_counter
] =
1455 (int)GET_Y_POSITION(ts_reg_data
.finger_data
[f_counter
][REG_Y_POSITION
],
1456 ts_reg_data
.finger_data
[f_counter
][REG_YX_POSITION
]);
1458 if (((ts_reg_data
.finger_data
[f_counter
][REG_WY_WX
] & 0xF0) >> 4)
1459 > (ts_reg_data
.finger_data
[f_counter
][REG_WY_WX
] & 0x0F)) {
1460 width_max
= (ts_reg_data
.finger_data
[f_counter
][REG_WY_WX
] & 0xF0) >> 4;
1461 width_min
= ts_reg_data
.finger_data
[f_counter
][REG_WY_WX
] & 0x0F;
1462 width_orientation
= 0;
1464 width_max
= ts_reg_data
.finger_data
[f_counter
][REG_WY_WX
] & 0x0F;
1465 width_min
= (ts_reg_data
.finger_data
[f_counter
][REG_WY_WX
] & 0xF0) >> 4;
1466 width_orientation
= 1;
1469 curr_ts_data
.pressure
[f_counter
] = ts_reg_data
.finger_data
[f_counter
][REG_Z
];
1471 if (ts
->pdata
->use_ghost_detection
) {
1472 if (curr_ts_data
.pressure
[f_counter
] == 0)
1475 #if defined(MT_PROTOCOL_A)
1476 input_report_abs(ts
->input_dev
, ABS_MT_TRACKING_ID
, f_counter
);
1478 input_mt_slot(ts
->input_dev
, f_counter
);
1479 input_mt_report_slot_state(ts
->input_dev
, MT_TOOL_FINGER
, true);
1482 input_report_abs(ts
->input_dev
, ABS_MT_POSITION_X
, curr_ts_data
.pos_x
[f_counter
]);
1483 input_report_abs(ts
->input_dev
, ABS_MT_POSITION_Y
, curr_ts_data
.pos_y
[f_counter
]);
1484 input_report_abs(ts
->input_dev
, ABS_MT_PRESSURE
, curr_ts_data
.pressure
[f_counter
]);
1485 input_report_abs(ts
->input_dev
, ABS_MT_WIDTH_MAJOR
, width_max
);
1486 input_report_abs(ts
->input_dev
, ABS_MT_WIDTH_MINOR
, width_min
);
1487 input_report_abs(ts
->input_dev
, ABS_MT_ORIENTATION
, width_orientation
);
1490 if (ts
->finger_prestate
[f_counter
] == TOUCH_RELEASED
) {
1491 finger_oldstate
[f_counter
] = ts
->finger_prestate
[f_counter
];
1492 ts
->finger_prestate
[f_counter
] = TOUCH_PRESSED
;
1493 // if (synaptics_rmi4_i2c_debug_mask & SYNAPTICS_RMI4_I2C_DEBUG_FINGER_STATUS)
1494 SYNAPTICS_INFO_MSG("[Touch] Finger%d (%d,%d)pressed\n", f_counter
, curr_ts_data
.pos_x
[f_counter
], curr_ts_data
.pos_y
[f_counter
]);
1496 //LG_CHANGE_S : 20130805 ticklewind.kim@lge.com
1497 for (b_counter
= 0; b_counter
< ts
->pdata
->num_of_button
; b_counter
++)
1498 if ( ts
->button_prestate
[b_counter
] == TOUCH_PRESSED
)
1500 input_report_key(ts
->input_dev
, ts
->pdata
->button
[b_counter
], BUTTON_CANCLED
);
1501 if (likely(synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_BUTTON_STATUS
))
1502 SYNAPTICS_INFO_MSG("Touch KEY[%d] is canceled\n", b_counter
);
1503 ts
->button_prestate
[b_counter
] = TOUCH_RELEASED
;
1505 //LG_CHANGE_E : 20130805 ticklewind.kim@lge.com
1507 /* button interrupt disable when first finger pressed */
1508 if (ts
->curr_int_mask
& ts
->int_status_reg_button_bit
) {
1509 ret
= cancel_delayed_work_sync(&ts
->button_lock_work
);
1511 ts
->curr_int_mask
= ts
->curr_int_mask
& ~(ts
->int_status_reg_button_bit
);
1512 if (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_INT_STATUS
)
1513 SYNAPTICS_DEBUG_MSG("Interrupt mask 0x%x\n", ts
->curr_int_mask
);
1514 ret
= i2c_smbus_write_byte_data(ts
->client
, INTERRUPT_ENABLE_REG
, ts
->curr_int_mask
);
1519 if (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_FINGER_POSITION
)
1520 SYNAPTICS_INFO_MSG("x:%4d, y:%4d, pressure:%4d\n", curr_ts_data
.pos_x
[f_counter
], curr_ts_data
.pos_y
[f_counter
], curr_ts_data
.pressure
[f_counter
]);
1522 old_ts_data
.pos_x
[f_counter
]= ts
->pre_ts_data
.pos_x
[f_counter
];
1523 old_ts_data
.pos_y
[f_counter
]= ts
->pre_ts_data
.pos_y
[f_counter
];
1524 old_ts_data
.pressure
[f_counter
]= ts
->pre_ts_data
.pressure
[f_counter
];
1525 ts
->pre_ts_data
.pos_x
[f_counter
] = curr_ts_data
.pos_x
[f_counter
];
1526 ts
->pre_ts_data
.pos_y
[f_counter
] = curr_ts_data
.pos_y
[f_counter
];
1527 ts
->pre_ts_data
.pressure
[f_counter
] = curr_ts_data
.pressure
[f_counter
];
1529 } else if (ts
->finger_prestate
[f_counter
] == TOUCH_PRESSED
) {
1530 if (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_FINGER_STATUS
)
1531 SYNAPTICS_INFO_MSG("[Touch] Finger%d (%d, %d)released\n", f_counter
, ts
->pre_ts_data
.pos_x
[f_counter
], ts
->pre_ts_data
.pos_y
[f_counter
]);
1534 #if !defined(MT_PROTOCOL_A)
1535 input_mt_slot(ts
->input_dev
, f_counter
);
1536 input_mt_report_slot_state(ts
->input_dev
, MT_TOOL_FINGER
, false);
1539 finger_oldstate
[f_counter
] = ts
->finger_prestate
[f_counter
];
1540 ts
->finger_prestate
[f_counter
] = TOUCH_RELEASED
;
1544 if (ts_reg_data
.finger_state_reg
[0] == 0
1545 && ts_reg_data
.finger_state_reg
[1] == 0
1546 /*&& ts_reg_data.finger_state_reg[2] == 0*/) {
1547 /* button interrupt enable when all finger released */
1548 queue_delayed_work(synaptics_wq
, &ts
->button_lock_work
, msecs_to_jiffies(200));
1551 ts
->pre_ts_data
.pos_x
[f_counter
] = 0;
1552 ts
->pre_ts_data
.pos_y
[f_counter
] = 0;
1554 #if defined(MT_PROTOCOL_A)
1556 input_mt_sync(ts
->input_dev
);
1560 curr_ts_data
.total_num
= index
;
1561 old_ts_data
.total_num
= ts
->pre_ts_data
.total_num
;
1562 ts
->pre_ts_data
.total_num
= curr_ts_data
.total_num
;
1564 input_sync(ts
->input_dev
);
1566 if (!(synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_INT_INTERVAL
)
1567 && !(synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_INT_ISR_DELAY
)
1568 && (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_FINGER_HANDLE_TIME
)
1569 && !(synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_BUTTON_HANDLE_TIME
)) {
1570 if (atomic_read(&ts
->int_delay
.ready
) == 1) {
1571 ts
->int_delay
.end
= cpu_clock(smp_processor_id());
1572 ts
->int_delay
.result_t
= ts
->int_delay
.end
- ts
->int_delay
.start
;
1573 ts
->int_delay
.rem
= do_div(ts
->int_delay
.result_t
, 1000000);
1574 SYNAPTICS_DEBUG_MSG("Touch Finger data report done time < %3lu.%03lu\n", (unsigned long)ts
->int_delay
.result_t
, ts
->int_delay
.rem
/1000);
1579 ret
= synaptics_ts_read(ts
->client
, INTERRUPT_ENABLE_REG
, sizeof(ts
->curr_int_mask
), (u8
*) &ts
->curr_int_mask
);
1581 if (likely(ts
->button_dsc
.id
!= 0)) {
1582 if (ts_reg_ctrl
.interrupt_status_reg
& ts
->int_status_reg_button_bit
1583 && ts
->curr_int_mask
& ts
->int_status_reg_button_bit
) { /* Button */
1585 if (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_BUTTON_REG
)
1586 SYNAPTICS_DEBUG_MSG("Button register: 0x%x\n", ts_reg_ctrl
.button_data_reg
);
1588 for (b_counter
= 0; b_counter
< ts
->pdata
->num_of_button
; b_counter
++) {
1589 if ( ((ts_reg_ctrl
.button_data_reg
>> b_counter
) & 0x1) == 1 && (ts
->button_prestate
[b_counter
] == TOUCH_RELEASED
)) {
1590 button_oldstate
[b_counter
] = ts
->button_prestate
[b_counter
];
1593 ts
->button_prestate
[b_counter
] = TOUCH_PRESSED
; /* pressed */
1596 /* finger interrupt disable when button pressed */
1598 if (ts->curr_int_mask & ts->int_status_reg_asb0_bit) {
1599 ret = cancel_delayed_work_sync(&ts->button_lock_work);
1601 ts->curr_int_mask = ts->curr_int_mask & ~(ts->int_status_reg_asb0_bit);
1602 if (synaptics_rmi4_i2c_debug_mask & SYNAPTICS_RMI4_I2C_DEBUG_INT_STATUS)
1603 SYNAPTICS_DEBUG_MSG("Interrupt mask 0x%x\n", ts->curr_int_mask);
1604 ret = i2c_smbus_write_byte_data(ts->client, INTERRUPT_ENABLE_REG, ts->curr_int_mask);
1610 } else if(((ts_reg_ctrl
.button_data_reg
>> b_counter
) & 0x1) == 0 && (ts
->button_prestate
[b_counter
] == TOUCH_PRESSED
)) {
1611 button_oldstate
[b_counter
] = ts
->button_prestate
[b_counter
];
1612 ts
->button_prestate
[b_counter
] = TOUCH_RELEASED
; /* released */
1617 input_report_key(ts
->input_dev
, ts
->pdata
->button
[b_counter
], ts
->button_prestate
[b_counter
]);
1619 if (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_BUTTON_STATUS
) {
1621 SYNAPTICS_INFO_MSG("Touch KEY%d(code:%d) is %s\n", b_counter
, ts
->pdata
->button
[b_counter
], ts
->button_prestate
[b_counter
]?"pressed":"released");
1626 input_sync(ts
->input_dev
);
1628 /* finger interrupt enable when all button released */
1629 if(ts_reg_ctrl
.button_data_reg
== 0) {
1630 queue_delayed_work(synaptics_wq
, &ts
->button_lock_work
, msecs_to_jiffies(200));
1633 if (!(synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_INT_INTERVAL
)
1634 && !(synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_INT_ISR_DELAY
)
1635 && !(synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_FINGER_HANDLE_TIME
)
1636 && (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_BUTTON_HANDLE_TIME
)) {
1637 if (atomic_read(&ts
->int_delay
.ready
) == 1) {
1638 ts
->int_delay
.end
= cpu_clock(smp_processor_id());
1639 ts
->int_delay
.result_t
= ts
->int_delay
.end
- ts
->int_delay
.start
;
1640 ts
->int_delay
.rem
= do_div(ts
->int_delay
.result_t
, 1000000);
1641 SYNAPTICS_DEBUG_MSG("Touch Button data report done time < %3lu.%03lu\n",
1642 (unsigned long)ts
->int_delay
.result_t
, ts
->int_delay
.rem
/1000);
1648 if (ts
->pdata
->use_ghost_detection
) {
1649 ret
= ghost_detect_solution();
1650 if(ret
== NEED_TO_OUT
)
1652 else if(ret
== NEED_TO_INIT
) {
1653 release_all_ts_event();
1654 synaptics_ts_hard_reset(ts
);
1655 synaptics_ts_ic_ctrl(ts
->client
, IC_CTRL_REPORT_MODE
, CONTINUOUS_REPORT_MODE
);
1656 force_continuous_mode
= 1;
1657 ghost_detection
= 0;
1658 ghost_detection_count
= 0;
1659 do_gettimeofday(&t_ex_debug
[TIME_EX_INIT_TIME
]);
1665 atomic_dec(&ts
->interrupt_handled
);
1666 atomic_inc(&ts
->int_delay
.ready
);
1668 /* Safety code: Check interrupt line status */
1669 if (ts
->pdata
->use_irq
!= 0) {
1670 if (mt_get_gpio_in(ts
->pdata
->int_gpio
) != 1
1671 && atomic_read(&ts
->interrupt_handled
) == 0) {
1672 /* interrupt line to high by Touch IC */
1673 ret
= synaptics_ts_read(ts
->client
, INTERRUPT_STATUS_REG
, 1, &temp
);
1675 SYNAPTICS_ERR_MSG("INTERRUPT_STATUS_REG read fail\n");
1678 * We haven't seen this error case.
1679 * So, can not sure it is OK or have to force re-scanning touch IC.
1681 SYNAPTICS_ERR_MSG("WARNING - Safety: Interrupt line isn't set high on time cause unexpected incident\n");
1685 if ((synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_INT_INTERVAL
)
1686 || (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_INT_ISR_DELAY
)
1687 || (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_FINGER_HANDLE_TIME
)
1688 || (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_BUTTON_HANDLE_TIME
)) {
1689 /* clear when all event is released */
1690 if (likely(ts
->button_dsc
.id
== 0)) {
1691 if (ts_reg_data
.finger_state_reg
[0] == 0
1692 && ts_reg_data
.finger_state_reg
[1] == 0
1693 /*&& ts_reg_data.finger_state_reg[2] == 0*/
1694 && ts_reg_ctrl
.button_data_reg
== 0
1695 && atomic_read(&ts
->interrupt_handled
) == 0)
1696 atomic_set(&ts
->int_delay
.ready
, 0);
1698 if (ts_reg_data
.finger_state_reg
[0] == 0
1699 && ts_reg_data
.finger_state_reg
[1] == 0
1700 /*&& ts_reg_data.finger_state_reg[2] == 0*/
1701 && atomic_read(&ts
->interrupt_handled
) == 0)
1702 atomic_set(&ts
->int_delay
.ready
, 0);
1707 if (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_FUNC_TRACE
)
1708 SYNAPTICS_DEBUG_MSG("Touch IC init vale setting\n");
1710 /* check device existence using I2C read */
1711 if (!ts
->is_probed
) {
1712 /* find register map */
1713 read_page_description_table(ts
);
1715 /* define button & finger interrupt maks */
1716 if (likely(ts
->button_dsc
.id
!= 0)) {
1717 ts
->int_status_reg_asb0_bit
= 0x4;
1718 ts
->int_status_reg_button_bit
= 0x10;
1720 ts
->int_status_reg_asb0_bit
= 0x4;
1723 ret
= synaptics_ts_read(ts
->client
, MANUFACTURER_ID_REG
, 1, &ts
->manufcturer_id
);
1725 SYNAPTICS_ERR_MSG("Manufcturer ID read fail\n");
1726 SYNAPTICS_INFO_MSG("Manufcturer ID: %d\n", ts
->manufcturer_id
);
1728 ret
= synaptics_ts_read(ts
->client
, FW_REVISION_REG
, 1, &ts
->fw_rev
);
1730 SYNAPTICS_ERR_MSG("FW revision read fail\n");
1731 SYNAPTICS_INFO_MSG("FW revision: %d\n", ts
->fw_rev
);
1733 ret
= synaptics_ts_read(ts
->client
, PRODUCT_ID_REG
, 10, &ts
->product_id
[0]); //depend on kernel in the file (i2c.h)
1735 SYNAPTICS_ERR_MSG("Product ID read fail\n");
1736 SYNAPTICS_INFO_MSG("Product ID: %s\n", ts
->product_id
);
1738 ret
= synaptics_ts_read(ts
->client
, FLASH_CONFIG_ID_REG
, sizeof(ts
->config_id
)-1, &ts
->config_id
[0]);
1740 SYNAPTICS_ERR_MSG("Config ID read fail\n");
1741 SYNAPTICS_INFO_MSG("Config ID: %s\n", ts
->config_id
);
1743 ret
= synaptics_ts_read(ts
->client
, SENSOR_MAX_X_POS
, sizeof(resolution
), resolution
);
1745 SYNAPTICS_ERR_MSG("SENSOR_MAX_X_POS read fail\n");
1746 SYNAPTICS_INFO_MSG("SENSOR_MAX_X=%d\n", (int)(resolution
[1] << 8 | resolution
[0]));
1748 ret
= synaptics_ts_read(ts
->client
, SENSOR_MAX_Y_POS
, sizeof(resolution
), resolution
);
1750 SYNAPTICS_ERR_MSG("SENSOR_MAX_Y_POS read fail\n");
1751 SYNAPTICS_INFO_MSG("SENSOR_MAX_Y=%d\n", (int)(resolution
[1] << 8 | resolution
[0]));
1753 #if defined(LGE_USE_SYNAPTICS_FW_UPGRADE)
1754 ts
->fw_start
= (unsigned char *)&SynaFirmware
[0];
1755 ts
->fw_size
= sizeof(SynaFirmware
);
1757 strncpy(ts
->fw_config_id
, &SynaFirmware
[0xb100], 4);
1758 strncpy(ts
->fw_product_id
, &SynaFirmware
[0x0040], 6);
1760 SYNAPTICS_INFO_MSG("fw_rev:%d, fw_config_id:%s, fw_product_id:%s\n", ts
->fw_start
[31], ts
->fw_config_id
, ts
->fw_product_id
);
1762 ret
= synaptics_ts_read(ts
->client
, FLASH_CONTROL_REG
, sizeof(flash_control
), &flash_control
);
1764 SYNAPTICS_ERR_MSG("FLASH_CONTROL_REG read fail\n");
1766 ret
= synaptics_ts_read(ts
->client
, DEVICE_STATUS_REG
, sizeof(device_status
), &device_status
);
1768 SYNAPTICS_ERR_MSG("DEVICE_STATUS_REG read fail\n");
1770 /* Firmware has a problem, so we should firmware-upgrade */
1771 if(device_status
& DEVICE_STATUS_FLASH_PROG
|| (device_status
& DEVICE_CRC_ERROR_MASK
) != 0 || (flash_control
& FLASH_STATUS_MASK
) != 0) {
1772 SYNAPTICS_ERR_MSG("Firmware has a unknown-problem, so it needs firmware-upgrade.\n");
1773 SYNAPTICS_ERR_MSG("FLASH_CONTROL[%x] DEVICE_STATUS_REG[%x]\n", (u32
)flash_control
, (u32
)device_status
);
1774 SYNAPTICS_ERR_MSG("FW-upgrade Force Rework.\n");
1776 /* firmware version info change by force for rework */
1777 snprintf(ts
->fw_config_id
, sizeof(ts
->fw_config_id
), "ERR");
1778 ts
->fw_force_upgrade
= 1;
1781 ret
= synaptics_ts_need_fw_upgrade();
1783 synaptics_ts_fw_upgrade(ts
, ts
->fw_path
);
1790 ret
= i2c_smbus_write_byte_data(ts
->client
, DEVICE_CONTROL_REG
, (DEVICE_CONTROL_REG_NOSLEEP
| DEVICE_CONTROL_REG_CONFIGURED
));
1792 SYNAPTICS_ERR_MSG("DEVICE_CONTROL_REG write fail\n");
1794 ret
= synaptics_ts_read(ts
->client
, DEVICE_CONTROL_REG
, 1, &temp
);
1796 SYNAPTICS_ERR_MSG("DEVICE_CONTROL_REG read fail\n");
1797 SYNAPTICS_INFO_MSG("DEVICE_CONTROL_REG = %x\n", temp
);
1799 ret
= synaptics_ts_read(ts
->client
, INTERRUPT_ENABLE_REG
, 1, &temp
);
1801 SYNAPTICS_ERR_MSG("INTERRUPT_ENABLE_REG read fail\n");
1802 SYNAPTICS_INFO_MSG("INTERRUPT_ENABLE_REG = %x\n", temp
);
1804 ret
= i2c_smbus_write_byte_data(ts
->client
, INTERRUPT_ENABLE_REG
, (temp
| ts
->int_status_reg_asb0_bit
| ts
->int_status_reg_button_bit
));
1806 SYNAPTICS_ERR_MSG("GESTURE_ENABLE_1_REG write fail\n");
1808 ret
= i2c_smbus_write_byte_data(ts
->client
, TWO_D_REPORTING_MODE
, (ts
->pdata
->report_mode
| ABS_MODE
| REPORT_BEYOND_CLIP
));
1810 SYNAPTICS_ERR_MSG("TWO_D_REPORTING_MODE write fail\n");
1812 ret
= i2c_smbus_write_byte_data(ts
->client
, DELTA_X_THRESH_REG
, (u8
)ts
->pdata
->delta_pos_threshold
);
1814 SYNAPTICS_ERR_MSG("DELTA_X_THRESH_REG write fail\n");
1816 ret
= i2c_smbus_write_byte_data(ts
->client
, DELTA_Y_THRESH_REG
, (u8
)ts
->pdata
->delta_pos_threshold
);
1818 SYNAPTICS_ERR_MSG("DELTA_Y_THRESH_REG write fail\n");
1820 ret
= synaptics_ts_read(ts
->client
, SMALL_OBJECT_DETECTION_TUNNING_REG
, 1, &temp
);
1822 SYNAPTICS_ERR_MSG("SMALL_OBJECT_DETECTION_TUNNING_REG read fail\n");
1823 SYNAPTICS_INFO_MSG("SMALL_OBJECT_DETECTION_TUNNING_REG = %x\n", temp
);
1825 ret
= synaptics_ts_read(ts
->client
, INTERRUPT_STATUS_REG
, 1, &temp
);
1827 SYNAPTICS_ERR_MSG("INTERRUPT_STATUS_REG read fail\n");
1828 if (ts
->pdata
->use_ghost_detection
) {
1829 synaptics_ts_ic_ctrl(ts
->client
, IC_CTRL_REPORT_MODE
, REDUCED_REPORT_MODE
);
1830 force_continuous_mode
= 1;
1831 ghost_detection
= 0;
1832 ghost_detection_count
= 0;
1833 do_gettimeofday(&t_ex_debug
[TIME_EX_INIT_TIME
]);
1839 static void synaptics_eint_interrupt_handler(void)
1841 struct synaptics_ts_data
*ts
;
1846 SYNAPTICS_ERR_MSG("ts is NULL\n");
1850 if (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_FUNC_TRACE
)
1851 SYNAPTICS_DEBUG_MSG(": %d\n", ts
->ic_init
);
1853 if (likely(ts
->ic_init
)) {
1854 if (ts
->pdata
->use_irq
)
1855 mt65xx_eint_mask(ts
->pdata
->irq_num
);
1857 synaptics_tpd_flag
= 1;
1858 wake_up_interruptible(&synaptics_waiter
);
1860 if (ts
->pdata
->use_irq
)
1861 mt65xx_eint_unmask(ts
->pdata
->irq_num
);
1865 static int synaptics_touch_event_handler(void *unused
)
1867 struct sched_param param
= {.sched_priority
= RTPM_PRIO_TPD
};
1868 struct synaptics_ts_data
*ts
;
1870 sched_setscheduler(current
, SCHED_RR
, ¶m
);
1874 set_current_state(TASK_INTERRUPTIBLE
);
1875 wait_event_interruptible(synaptics_waiter
, (synaptics_tpd_flag
!= 0));
1876 synaptics_tpd_flag
= 0;
1879 set_current_state(TASK_RUNNING
);
1880 queue_delayed_work(synaptics_wq
, &ts
->work
, 0);
1883 }while(!kthread_should_stop());
1888 static int synaptics_ts_probe(struct i2c_client
*client
, const struct i2c_device_id
*id
)
1890 struct synaptics_ts_platform_data
*pdata
;
1891 struct synaptics_ts_data
*ts
;
1896 struct task_struct
*thread
= NULL
;
1899 if (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_FUNC_TRACE
)
1900 SYNAPTICS_DEBUG_MSG("\n");
1902 if (!i2c_check_functionality(client
->adapter
, I2C_FUNC_I2C
)) {
1903 SYNAPTICS_ERR_MSG("i2c functionality check error\n");
1905 goto err_check_functionality_failed
;
1908 pdata
= client
->dev
.platform_data
;
1909 if (pdata
== NULL
) {
1910 SYNAPTICS_ERR_MSG("Can not read platform data\n");
1912 goto err_check_functionality_failed
;
1915 ts
= kzalloc(sizeof(*ts
), GFP_KERNEL
);
1917 SYNAPTICS_ERR_MSG("Can not allocate memory\n");
1919 goto err_alloc_data_failed
;
1922 /* Device data setting */
1924 //ts->button_width = (ts->pdata->x_max - (ts->pdata->num_of_button - 1) * BUTTON_MARGIN) / ts->pdata->num_of_button;
1926 synaptics_ts_init_sysfs();
1927 #if defined(LGE_USE_SYNAPTICS_FW_UPGRADE)
1928 wake_lock_init(&fw_suspend_lock
, WAKE_LOCK_SUSPEND
, "fw_wakelock");
1930 INIT_DELAYED_WORK(&ts
->work
, synaptics_ts_work_func
);
1931 INIT_DELAYED_WORK(&ts
->button_lock_work
, synaptics_ts_button_lock_work_func
);
1932 ts
->client
= client
;
1933 i2c_set_clientdata(client
, ts
);
1935 #if defined(LGE_USE_SYNAPTICS_F54)
1936 ds4_i2c_client
= client
;
1939 tpd_load_status
= 1;
1941 synaptics_ts_reset(ts
->pdata
->reset_gpio
);
1943 if (ts
->pdata
->power
) {
1944 ret
= ts
->pdata
->power(1);
1947 SYNAPTICS_ERR_MSG("power on failed\n");
1948 goto err_power_failed
;
1952 ts
->input_dev
= input_allocate_device();
1953 if (ts
->input_dev
== NULL
) {
1955 SYNAPTICS_ERR_MSG("Failed to allocate input device\n");
1956 goto err_input_dev_alloc_failed
;
1959 ts
->input_dev
->name
= "synaptics_ts"; //driver name
1961 set_bit(EV_SYN
, ts
->input_dev
->evbit
);
1962 set_bit(EV_KEY
, ts
->input_dev
->evbit
);
1963 set_bit(EV_ABS
, ts
->input_dev
->evbit
);
1964 set_bit(INPUT_PROP_DIRECT
, ts
->input_dev
->propbit
);
1966 for(count
= 0; count
< ts
->pdata
->num_of_button
; count
++) {
1967 set_bit(ts
->pdata
->button
[count
], ts
->input_dev
->keybit
);
1970 input_set_abs_params(ts
->input_dev
, ABS_MT_POSITION_X
, 0, ts
->pdata
->x_max
, 0, 0);
1971 input_set_abs_params(ts
->input_dev
, ABS_MT_POSITION_Y
, 0, ts
->pdata
->y_max
, 0, 0);
1972 input_set_abs_params(ts
->input_dev
, ABS_MT_PRESSURE
, 0, 255, 0, 0);
1973 input_set_abs_params(ts
->input_dev
, ABS_MT_WIDTH_MAJOR
, 0, 15, 0, 0);
1974 input_set_abs_params(ts
->input_dev
, ABS_MT_WIDTH_MINOR
, 0, 15, 0, 0);
1975 #if defined(MT_PROTOCOL_A)
1976 input_set_abs_params(ts
->input_dev
, ABS_MT_TRACKING_ID
, 0, 10, 0, 0);
1978 input_mt_init_slots(ts
->input_dev
, ts
->pdata
->num_of_finger
);
1980 input_set_abs_params(ts
->input_dev
, ABS_MT_ORIENTATION
, 0, 1, 0, 0);
1982 ret
= input_register_device(ts
->input_dev
);
1984 SYNAPTICS_ERR_MSG("Unable to register %s input device\n",
1985 ts
->input_dev
->name
);
1986 goto err_input_register_device_failed
;
1989 /* interrupt mode */
1990 if (likely(ts
->pdata
->use_irq
&& ts
->pdata
->irq_num
)) {
1991 if (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_FUNC_TRACE
)
1992 SYNAPTICS_DEBUG_MSG("irq [%d], irqflags[0x%lx]\n", client
->irq
, ts
->pdata
->irqflags
);
1994 thread
= kthread_run(synaptics_touch_event_handler
, 0, TPD_DEVICE
);
1995 if (IS_ERR(thread
)) {
1996 err
= PTR_ERR(thread
);
1997 SYNAPTICS_ERR_MSG("failed to create kernel thread: %d\n", err
);
2000 mt_set_gpio_mode(ts
->pdata
->int_gpio
, GPIO_CTP_EINT_PIN_M_EINT
);
2001 mt_set_gpio_dir(ts
->pdata
->int_gpio
, GPIO_DIR_IN
);
2002 mt_set_gpio_pull_enable(ts
->pdata
->int_gpio
, GPIO_PULL_ENABLE
);
2003 mt_set_gpio_pull_select(ts
->pdata
->int_gpio
, GPIO_PULL_UP
);
2005 mt65xx_eint_set_sens(ts
->pdata
->irq_num
, CUST_EINT_TOUCH_PANEL_SENSITIVE
);
2006 mt65xx_eint_set_hw_debounce(ts
->pdata
->irq_num
, CUST_EINT_TOUCH_PANEL_DEBOUNCE_CN
);
2007 mt65xx_eint_registration(ts
->pdata
->irq_num
, CUST_EINT_TOUCH_PANEL_DEBOUNCE_EN
, ts
->pdata
->irqflags
, synaptics_eint_interrupt_handler
, 1);
2008 mt65xx_eint_unmask(ts
->pdata
->irq_num
);
2012 ts
->pdata
->use_irq
= 0;
2013 SYNAPTICS_ERR_MSG("request_irq failed. use polling mode\n");
2015 if (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_FUNC_TRACE
)
2016 SYNAPTICS_DEBUG_MSG("request_irq succeed\n");
2019 ts
->pdata
->use_irq
= 0;
2022 /* using hrtimer case of polling mode */
2023 if (unlikely(!ts
->pdata
->use_irq
)) {
2024 hrtimer_init(&ts
->timer
, CLOCK_MONOTONIC
, HRTIMER_MODE_REL
);
2025 ts
->timer
.function
= synaptics_ts_timer_func
;
2026 hrtimer_start(&ts
->timer
, ktime_set(0, (ts
->pdata
->report_period
* 2) + (ts
->pdata
->ic_booting_delay
*1000000)), HRTIMER_MODE_REL
);
2029 if (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_FUNC_TRACE
)
2030 SYNAPTICS_DEBUG_MSG("Start touchscreen %s in %s mode\n", ts
->input_dev
->name
, ts
->pdata
->use_irq
? "interrupt" : "polling");
2032 /* Touch I2C sanity check */
2033 msleep(ts
->pdata
->ic_booting_delay
);
2034 ret
= synaptics_ts_read(ts
->client
, DESCRIPTION_TABLE_START
, 1, &temp
);
2036 SYNAPTICS_ERR_MSG("ts_function_descriptor read fail\n");
2037 goto err_input_register_device_failed
;
2040 /* Touch IC init setting */
2041 queue_delayed_work(synaptics_wq
, &ts
->work
, 0);
2044 err_input_register_device_failed
:
2045 input_free_device(ts
->input_dev
);
2046 err_input_dev_alloc_failed
:
2047 if (ts
->pdata
->power
)
2048 ts
->pdata
->power(0);
2052 err_alloc_data_failed
:
2053 err_check_functionality_failed
:
2057 static int synaptics_ts_remove(struct i2c_client
*client
)
2059 struct synaptics_ts_data
*ts
= i2c_get_clientdata(client
);
2061 if (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_FUNC_TRACE
)
2062 SYNAPTICS_DEBUG_MSG("\n");
2064 if (ts
->pdata
->use_irq
) {
2065 //free_irq(client->irq, ts);
2068 hrtimer_cancel(&ts
->timer
);
2071 input_unregister_device(ts
->input_dev
);
2077 static void synaptics_ts_suspend_func(struct synaptics_ts_data
*ts
)
2081 unsigned int f_counter
= 0;
2082 unsigned int b_counter
= 0;
2083 char report_enable
= 0;
2085 if (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_FUNC_TRACE
)
2086 SYNAPTICS_DEBUG_MSG("\n");
2088 if (ts
->pdata
->use_irq
)
2089 mt65xx_eint_mask(ts
->pdata
->irq_num
);
2091 hrtimer_cancel(&ts
->timer
);
2093 ret
= cancel_delayed_work_sync(&ts
->work
);
2095 ret
= i2c_smbus_write_byte_data(ts
->client
, DEVICE_CONTROL_REG
, DEVICE_CONTROL_REG_SLEEP
); /* sleep */
2097 /* Ghost finger & missed release event defense code
2098 * Release report if we have not released event until suspend
2102 for(f_counter
= 0; f_counter
< ts
->pdata
->num_of_finger
; f_counter
++) {
2103 if (ts
->finger_prestate
[f_counter
] == TOUCH_PRESSED
) {
2104 #if defined(MT_PROTOCOL_A)
2105 input_report_abs(ts
->input_dev
, ABS_MT_POSITION_X
, ts
->pre_ts_data
.pos_x
[f_counter
]);
2106 input_report_abs(ts
->input_dev
, ABS_MT_POSITION_Y
, ts
->pre_ts_data
.pos_y
[f_counter
]);
2107 input_report_abs(ts
->input_dev
, ABS_MT_PRESSURE
, TOUCH_RELEASED
);
2108 input_report_abs(ts
->input_dev
, ABS_MT_WIDTH_MAJOR
, TOUCH_RELEASED
);
2111 input_mt_slot(ts
->input_dev
, f_counter
);
2112 input_mt_report_slot_state(ts
->input_dev
, MT_TOOL_FINGER
, false);
2120 for(b_counter
= 0; b_counter
< ts
->pdata
->num_of_button
; b_counter
++) {
2121 if (ts
->button_prestate
[b_counter
] == TOUCH_PRESSED
) {
2123 input_report_key(ts
->input_dev
,
2124 ts
->pdata
->button
[b_counter
], TOUCH_RELEASED
);
2128 /* Reset finger position data */
2129 memset(&ts
->pre_ts_data
, 0x0, sizeof(ts_finger_data
));
2131 if (report_enable
) {
2132 SYNAPTICS_INFO_MSG("Release all pressed event before touch power off\n");
2133 input_sync(ts
->input_dev
);
2135 /* Reset finger & button status data */
2136 memset(ts
->finger_prestate
, 0x0, sizeof(char) * ts
->pdata
->num_of_finger
);
2137 memset(ts
->button_prestate
, 0x0, sizeof(char) * ts
->pdata
->num_of_button
);
2140 /* Reset interrupt debug time struct */
2141 if ((synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_INT_INTERVAL
)
2142 || (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_INT_ISR_DELAY
)
2143 || (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_FINGER_HANDLE_TIME
)
2144 || (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_BUTTON_HANDLE_TIME
))
2145 memset(&ts
->int_delay
, 0x0, sizeof(struct synaptics_ts_timestamp
));
2147 if (ts
->pdata
->power
) {
2148 ret
= ts
->pdata
->power(0);
2151 SYNAPTICS_ERR_MSG("power off failed\n");
2154 atomic_set(&ts
->interrupt_handled
, 0);
2159 static void synaptics_ts_resume_func(struct synaptics_ts_data
*ts
)
2163 if (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_FUNC_TRACE
)
2164 SYNAPTICS_DEBUG_MSG("\n");
2166 if (ts
->pdata
->power
) {
2167 ret
= ts
->pdata
->power(1);
2170 SYNAPTICS_ERR_MSG("power on failed\n");
2173 queue_delayed_work(synaptics_wq
, &ts
->work
,msecs_to_jiffies(ts
->pdata
->ic_booting_delay
));
2175 if ( !synaptics_tpd_keylock_flag
)
2177 if (ts
->pdata
->use_irq
)
2178 mt65xx_eint_unmask(ts
->pdata
->irq_num
);
2180 hrtimer_start(&ts
->timer
, ktime_set(0, ts
->pdata
->report_period
+(ts
->pdata
->ic_booting_delay
*1000000)), HRTIMER_MODE_REL
);
2184 int touch_power_control(int on
)
2186 if (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_FUNC_TRACE
)
2187 SYNAPTICS_DEBUG_MSG(": %d\n", on
);
2190 hwPowerOn(MT6323_POWER_LDO_VGP2
, VOL_3000
, "TP");
2192 hwPowerDown(MT6323_POWER_LDO_VGP2
, "TP");
2197 #ifdef CONFIG_HAS_EARLYSUSPEND
2198 static void synaptics_tpd_suspend(struct early_suspend
*h
)
2200 struct synaptics_ts_data
*ts
= ts_hub
;
2202 if (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_FUNC_TRACE
)
2203 SYNAPTICS_DEBUG_MSG("\n");
2206 SYNAPTICS_ERR_MSG("ts is NULL\n");
2210 if (ts
->pdata
->use_ghost_detection
) {
2214 if (likely(!ts
->is_downloading
))
2215 synaptics_ts_suspend_func(ts
);
2217 ts
->is_suspended
= 1;
2220 static void synaptics_tpd_resume(struct early_suspend
*h
)
2222 struct synaptics_ts_data
*ts
= ts_hub
;
2224 if (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_FUNC_TRACE
)
2225 SYNAPTICS_DEBUG_MSG ("\n");
2228 SYNAPTICS_ERR_MSG("ts is NULL\n");
2232 if (ts
->pdata
->use_ghost_detection
) {
2234 ts_rebase_count
= 0;
2237 if (likely(!ts
->is_downloading
))
2238 synaptics_ts_resume_func(ts
);
2240 ts
->is_suspended
= 0;
2243 static int synaptics_ts_suspend(struct i2c_client
*client
, pm_message_t mesg
)
2248 static int synaptics_ts_resume(struct i2c_client
*client
)
2255 static const struct i2c_device_id synaptics_ts_id
[] = {
2260 static struct i2c_driver synaptics_ts_driver
= {
2261 .probe
= synaptics_ts_probe
,
2262 .remove
= synaptics_ts_remove
,
2264 #ifndef CONFIG_HAS_EARLYSUSPEND
2265 .suspend
= synaptics_ts_suspend
,
2266 .resume
= synaptics_ts_resume
,
2268 .id_table
= synaptics_ts_id
,
2271 .owner
= THIS_MODULE
,
2276 int synaptics_tpd_local_init(void)
2280 if (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_FUNC_TRACE
)
2281 SYNAPTICS_DEBUG_MSG("\n");
2283 if(i2c_add_driver(&synaptics_ts_driver
)!= 0) {
2284 SYNAPTICS_ERR_MSG("FAIL: i2c_add_driver\n");
2292 static struct tpd_driver_t tpd_device_driver
= {
2293 .tpd_device_name
= "synaptics_2202",
2294 .tpd_local_init
= synaptics_tpd_local_init
,
2295 #ifdef CONFIG_HAS_EARLYSUSPEND
2296 .suspend
= synaptics_tpd_suspend
,
2297 .resume
= synaptics_tpd_resume
,
2299 #ifdef TPD_HAVE_BUTTON
2300 .tpd_have_button
= 1,
2302 .tpd_have_button
= 0,
2306 static struct synaptics_ts_platform_data l50_ts_data
= {
2308 .irqflags
= CUST_EINT_TOUCH_PANEL_POLARITY
,
2309 .irq_num
= CUST_EINT_TOUCH_PANEL_NUM
,
2310 .int_gpio
= GPIO_CTP_EINT_PIN
,
2311 .reset_gpio
= GPIO_TOUCH_RESET_N
,
2312 .power
= touch_power_control
,
2313 .ic_booting_delay
= 100, /* ms */
2314 .report_period
= 10000000, /* ns */
2315 .num_of_finger
= MAX_NUM_OF_FINGER
,
2316 #if defined(LGE_USE_DOME_KEY)
2318 .button
= {KEY_BACK
,KEY_MENU
},
2321 .button
= {KEY_BACK
,KEY_HOMEPAGE
,KEY_MENU
},
2326 .palm_threshold
= 1,
2327 .delta_pos_threshold
= 1,
2328 #if defined(LGE_USE_DOME_KEY)
2329 .use_ghost_detection
= 0,
2331 .use_ghost_detection
= 0,
2333 .report_mode
= REDUCED_REPORT_MODE
,
2336 static struct i2c_board_info __initdata i2c_synaptics
[] = {
2338 I2C_BOARD_INFO("mtk-tpd", 0x20),
2339 .platform_data
= &l50_ts_data
,
2344 static int __devinit
synaptics_ts_init(void)
2348 if (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_FUNC_TRACE
)
2349 SYNAPTICS_DEBUG_MSG("\n");
2351 synaptics_wq
= create_singlethread_workqueue("synaptics_wq");
2352 if (!synaptics_wq
) {
2353 SYNAPTICS_ERR_MSG("failed to create singlethread workqueue\n");
2357 I2CDMABuf_va
= (u8
*)dma_alloc_coherent(NULL
, 4096, &I2CDMABuf_pa
, GFP_KERNEL
);
2359 SYNAPTICS_ERR_MSG("Allocate Touch DMA I2C Buffer failed!\n");
2364 #if defined(LGE_USE_SYNAPTICS_RED_ON_MTK)
2365 red_i2c_device_setup();
2367 i2c_register_board_info(1, &i2c_synaptics
[0], 1);
2369 if(tpd_driver_add(&tpd_device_driver
) < 0) {
2370 SYNAPTICS_ERR_MSG("failed to i2c_add_driver\n");
2371 destroy_workqueue(synaptics_wq
);
2378 static void __exit
synaptics_ts_exit(void)
2380 if (synaptics_rmi4_i2c_debug_mask
& SYNAPTICS_RMI4_I2C_DEBUG_FUNC_TRACE
)
2381 SYNAPTICS_DEBUG_MSG("\n");
2383 i2c_del_driver(&synaptics_ts_driver
);
2384 tpd_driver_remove(&tpd_device_driver
);
2388 dma_free_coherent(NULL
, 4096, I2CDMABuf_va
, I2CDMABuf_pa
);
2389 I2CDMABuf_va
= NULL
;
2394 destroy_workqueue(synaptics_wq
);
2398 module_init(synaptics_ts_init
);
2399 module_exit(synaptics_ts_exit
);
2401 MODULE_DESCRIPTION("Synaptics 7020 Touchscreen Driver for MTK platform");
2402 MODULE_AUTHOR("TY Kang <taiyou.kang@lge.com>");
2403 MODULE_LICENSE("GPL");