124 lines
3.6 KiB
C
124 lines
3.6 KiB
C
|
|
/* SPDX-License-Identifier: GPL-2.0 */
|
||
|
|
/*
|
||
|
|
* Copyright (C) 2016 MediaTek Inc.
|
||
|
|
*/
|
||
|
|
|
||
|
|
/*****************************************************************************
|
||
|
|
*
|
||
|
|
* File Name: focaltech_point_report_check.c
|
||
|
|
*
|
||
|
|
* Author: Focaltech Driver Team
|
||
|
|
*
|
||
|
|
* Created: 2016-11-16
|
||
|
|
*
|
||
|
|
* Abstract: point report check function
|
||
|
|
*
|
||
|
|
* Version: v1.0
|
||
|
|
*
|
||
|
|
* Revision History:
|
||
|
|
*
|
||
|
|
*****************************************************************************/
|
||
|
|
|
||
|
|
/*****************************************************************************
|
||
|
|
* Included header files
|
||
|
|
*****************************************************************************/
|
||
|
|
#include "focaltech_core.h"
|
||
|
|
|
||
|
|
#if FTS_POINT_REPORT_CHECK_EN
|
||
|
|
/*****************************************************************************
|
||
|
|
* Private constant and macro definitions using #define
|
||
|
|
*****************************************************************************/
|
||
|
|
#define POINT_REPORT_CHECK_WAIT_TIME 200 /* unit:ms */
|
||
|
|
|
||
|
|
/*****************************************************************************
|
||
|
|
* functions body
|
||
|
|
*****************************************************************************/
|
||
|
|
/*****************************************************************************
|
||
|
|
* Name: fts_prc_func
|
||
|
|
* Brief: fts point report check work func, report whole up of points
|
||
|
|
* Input:
|
||
|
|
* Output:
|
||
|
|
* Return:
|
||
|
|
*****************************************************************************/
|
||
|
|
static void fts_prc_func(struct work_struct *work)
|
||
|
|
{
|
||
|
|
struct fts_ts_data *ts_data =
|
||
|
|
container_of(work, struct fts_ts_data, prc_work.work);
|
||
|
|
struct input_dev *input_dev = ts_data->input_dev;
|
||
|
|
#if FTS_MT_PROTOCOL_B_EN
|
||
|
|
u32 finger_count = 0;
|
||
|
|
u32 max_touches = fts_data->pdata->max_touch_number;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
FTS_FUNC_ENTER();
|
||
|
|
mutex_lock(&ts_data->report_mutex);
|
||
|
|
|
||
|
|
#if FTS_MT_PROTOCOL_B_EN
|
||
|
|
for (finger_count = 0; finger_count < max_touches; finger_count++) {
|
||
|
|
input_mt_slot(input_dev, finger_count);
|
||
|
|
input_mt_report_slot_state(input_dev, MT_TOOL_FINGER, false);
|
||
|
|
}
|
||
|
|
#else
|
||
|
|
input_mt_sync(input_dev);
|
||
|
|
#endif
|
||
|
|
input_report_key(input_dev, BTN_TOUCH, 0);
|
||
|
|
input_sync(input_dev);
|
||
|
|
|
||
|
|
mutex_unlock(&ts_data->report_mutex);
|
||
|
|
|
||
|
|
FTS_FUNC_EXIT();
|
||
|
|
}
|
||
|
|
|
||
|
|
/*****************************************************************************
|
||
|
|
* Name: fts_prc_queue_work
|
||
|
|
* Brief: fts point report check queue work, call it when interrupt comes
|
||
|
|
* Input:
|
||
|
|
* Output:
|
||
|
|
* Return:
|
||
|
|
*****************************************************************************/
|
||
|
|
void fts_prc_queue_work(struct fts_ts_data *ts_data)
|
||
|
|
{
|
||
|
|
cancel_delayed_work_sync(&ts_data->prc_work);
|
||
|
|
queue_delayed_work(ts_data->ts_workqueue, &ts_data->prc_work,
|
||
|
|
msecs_to_jiffies(POINT_REPORT_CHECK_WAIT_TIME));
|
||
|
|
}
|
||
|
|
|
||
|
|
/*****************************************************************************
|
||
|
|
* Name: fts_point_report_check_init
|
||
|
|
* Brief:
|
||
|
|
* Input:
|
||
|
|
* Output:
|
||
|
|
* Return: < 0: Fail to create esd check queue
|
||
|
|
*****************************************************************************/
|
||
|
|
int fts_point_report_check_init(struct fts_ts_data *ts_data)
|
||
|
|
{
|
||
|
|
FTS_FUNC_ENTER();
|
||
|
|
|
||
|
|
if (ts_data->ts_workqueue) {
|
||
|
|
INIT_DELAYED_WORK(&ts_data->prc_work, fts_prc_func);
|
||
|
|
} else {
|
||
|
|
FTS_ERROR(
|
||
|
|
"fts workqueue is NULL, can't run point report check function");
|
||
|
|
return -EINVAL;
|
||
|
|
}
|
||
|
|
|
||
|
|
FTS_FUNC_EXIT();
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
/*****************************************************************************
|
||
|
|
* Name: fts_point_report_check_exit
|
||
|
|
* Brief:
|
||
|
|
* Input:
|
||
|
|
* Output:
|
||
|
|
* Return:
|
||
|
|
*****************************************************************************/
|
||
|
|
int fts_point_report_check_exit(struct fts_ts_data *ts_data)
|
||
|
|
{
|
||
|
|
FTS_FUNC_ENTER();
|
||
|
|
|
||
|
|
FTS_FUNC_EXIT();
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
#endif /* FTS_POINT_REPORT_CHECK_EN */
|