focaltech_0flash_mmi: Add delay when palm leave.

TP:
Add 850ms delay when palm release found.

Change-Id: I765b00ac2d698e285832b983ddb3d70ec271f7fc
Signed-off-by: haojl2 <haojl2@motorola.com>
Reviewed-on: https://gerrit.mot.com/1406031
SLTApproved: Slta Waiver
SME-Granted: SME Approvals Granted
Tested-by: Jira Key
Reviewed-by: Jianqi Yang <yangj@motorola.com>
Submit-Approved: Jira Key
This commit is contained in:
haojl2 2019-08-20 14:01:55 +08:00 • committed by Jialei Hao
commit 1f89e2ea9d
2 changed files with 33 additions and 7 deletions

View file

@ -630,6 +630,20 @@ static int fts_read_touchdata(struct fts_ts_data *data)
}
#ifdef FOCALTECH_PALM_SENSOR_EN
static void fts_palm_report(bool active) {
if (active) {
input_report_abs(fts_data->palm_sensor_pdata->input_sensor_dev,
ABS_DISTANCE, 1);
input_sync(fts_data->palm_sensor_pdata->input_sensor_dev);
FTS_INFO("%s: palm report 1\n", __func__);
} else {
input_report_abs(fts_data->palm_sensor_pdata->input_sensor_dev,
ABS_DISTANCE, 0);
input_sync(fts_data->palm_sensor_pdata->input_sensor_dev);
FTS_INFO("%s: palm report 0\n", __func__);
}
}
static int fts_palm_detect(u8 reg_data) {
int fd_val = reg_data & 0x03;
@ -669,15 +683,12 @@ static int fts_read_parse_touchdata(struct fts_ts_data *data)
pd_state = fts_palm_detect(buf[1]);
if (pd_state > 0) {
if (pd_state == 1) {
input_report_abs(data->palm_sensor_pdata->input_sensor_dev,
ABS_DISTANCE, 1);
input_sync(data->palm_sensor_pdata->input_sensor_dev);
del_timer(&fts_data->palm_release_fimer);
fts_palm_report(true);
return -1;
} else if (pd_state == 2) {
input_report_abs(data->palm_sensor_pdata->input_sensor_dev,
ABS_DISTANCE, 0);
input_sync(data->palm_sensor_pdata->input_sensor_dev);
mod_timer(&fts_data->palm_release_fimer,
jiffies + msecs_to_jiffies(fts_data->palm_release_delay_ms));
return -1;
}
}
@ -932,6 +943,11 @@ static int fts_report_buffer_init(struct fts_ts_data *ts_data)
#ifdef FOCALTECH_PALM_SENSOR_EN
static void fts_palm_sensor_release_timer_handler(unsigned long data)
{
fts_palm_report(false);
}
static int fts_palm_sensor_set_enable(struct sensors_classdev *sensors_cdev,
unsigned int enable)
{
@ -941,6 +957,10 @@ static int fts_palm_sensor_set_enable(struct sensors_classdev *sensors_cdev,
fts_write_reg(0xB0, 0x01);
} else if (enable == 0) {
fts_data->palm_detection_enabled = false;
if (timer_pending(&fts_data->palm_release_fimer)) {
fts_palm_report(false);
del_timer(&fts_data->palm_release_fimer);
}
fts_write_reg(0xB0, 0x00);
} else {
FTS_INFO("unknown enable symbol\n");
@ -991,6 +1011,10 @@ static int fts_palm_sensor_init(struct fts_ts_data *data)
if (err)
goto unregister_sensor_input_device;
data->palm_release_fimer.function = fts_palm_sensor_release_timer_handler;
init_timer(&data->palm_release_fimer);
data->palm_release_delay_ms = 850;
return 0;
unregister_sensor_input_device:

View file

@ -236,6 +236,8 @@ struct fts_ts_data {
#ifdef FOCALTECH_PALM_SENSOR_EN
bool palm_detection_enabled;
struct focaltech_sensor_platform_data *palm_sensor_pdata;
struct timer_list palm_release_fimer;
unsigned int palm_release_delay_ms;
#endif
};