Add gesture mode support for focaltech touch

Add single tap and double tap gestures support for focaltech touch IC,
gesture type receives from touch mmi class.

Change-Id: Ib67d221eff3217b46f9b423b84426ef44f774826
Signed-off-by: Wenge Zhu <zhuwg1@motorola.com>
Reviewed-on: https://gerrit.mot.com/2384855
SME-Granted: SME Approvals Granted
SLTApproved: Slta Waiver
Tested-by: Jira Key
Reviewed-by: Wei Deng <dengwei1@motorola.com>
Reviewed-by: Jun Weng <wengjun1@motorola.com>
Reviewed-by: Jichao Zou <zoujc@motorola.com>
Submit-Approved: Jira Key
This commit is contained in:
Wenge Zhu 2022-09-15 20:43:18 +08:00 • committed by zhuwg1
commit 111a18c9eb
5 changed files with 65 additions and 1 deletions

View file

@ -11,6 +11,9 @@ endif
ifeq ($(BOARD_USES_DOUBLE_TAP),true)
KBUILD_OPTIONS += CONFIG_INPUT_FOCALTECH_V3_MMI_ENABLE_DOUBLE_TAP=y
ifeq ($(FTS_DOUBLE_TAP_CONTROL),true)
KBUILD_OPTIONS += CONFIG_FTS_DOUBLE_TAP_CONTROL=y
endif
endif
ifneq ($(BOARD_USES_TOUCH_PALM),)

View file

@ -51,9 +51,13 @@ ifneq ($(filter m y, $(CONFIG_FTS_NOISE_TEST_P2P)),)
EXTRA_CFLAGS += -DCONFIG_FTS_NOISE_TEST_P2P
endif
ifneq ($(filter m y, $(CONFIG_FTS_NOISE_TEST_P2P)),)
ifneq ($(filter m y, $(CONFIG_FTS_COMPATIBLE_WITH_GKI)),)
EXTRA_CFLAGS += -DCONFIG_FTS_COMPATIBLE_WITH_GKI
endif
ifneq ($(filter m y, $(CONFIG_FTS_DOUBLE_TAP_CONTROL)),)
EXTRA_CFLAGS += -DCONFIG_FTS_DOUBLE_TAP_CONTROL
endif
KBUILD_EXTRA_SYMBOLS += $(CURDIR)/../../kernel/msm-$(MODULE_KERNEL_VERSION)/Module.symvers
KBUILD_EXTRA_SYMBOLS += $(CURDIR)/$(KBUILD_EXTMOD)/../../../mmi_info/$(GKI_OBJ_MODULE_DIR)/Module.symvers

View file

@ -266,6 +266,7 @@ struct fts_ts_data {
#ifdef FOCALTECH_SENSOR_EN
bool wakeable;
#endif
u8 gsx_cmd;
#ifdef FOCALTECH_PALM_SENSOR_EN
bool palm_detection_enabled;

View file

@ -51,12 +51,14 @@
#define KEY_GESTURE_V KEY_V
#define KEY_GESTURE_C KEY_C
#define KEY_GESTURE_Z KEY_Z
#define KEY_GESTURE_F1 KEY_F1
#define GESTURE_LEFT 0x20
#define GESTURE_RIGHT 0x21
#define GESTURE_UP 0x22
#define GESTURE_DOWN 0x23
#define GESTURE_DOUBLECLICK 0x24
#define GESTURE_SINGLECLICK 0x27
#define GESTURE_O 0x30
#define GESTURE_W 0x31
#define GESTURE_M 0x32
@ -280,6 +282,9 @@ static void fts_gesture_report(struct input_dev *input_dev, int gesture_id)
case GESTURE_DOUBLECLICK:
gesture = KEY_GESTURE_U;
break;
case GESTURE_SINGLECLICK:
gesture = KEY_GESTURE_F1;
break;
case GESTURE_O:
gesture = KEY_GESTURE_O;
break;
@ -319,6 +324,31 @@ static void fts_gesture_report(struct input_dev *input_dev, int gesture_id)
FTS_INFO("Gesture got but wakeable not set. Skip this gesture.");
return;
}
#ifdef CONFIG_FTS_DOUBLE_TAP_CONTROL
/* report double tap */
if (gesture == KEY_GESTURE_U) {
if (fts_data->imports && fts_data->imports->report_gesture) {
struct gesture_event_data event;
FTS_INFO("invoke imported report double tap gesture function\n");
event.evcode = 4;
/* call class method */
ret = fts_data->imports->report_gesture(&event);
++report_cnt;
}
/* report single tap */
} else if (gesture == KEY_GESTURE_F1) {
if (fts_data->imports && fts_data->imports->report_gesture) {
struct gesture_event_data event;
FTS_INFO("invoke imported report single tap gesture function\n");
event.evcode = 1;
/* call class method */
ret = fts_data->imports->report_gesture(&event);
++report_cnt;
}
}
#else
/* report single tap */
if (gesture == KEY_GESTURE_U) {
if (fts_data->imports && fts_data->imports->report_gesture) {
@ -331,6 +361,7 @@ static void fts_gesture_report(struct input_dev *input_dev, int gesture_id)
++report_cnt;
}
}
#endif
FTS_INFO("input report: %d", report_cnt);
if (report_cnt >= REPORT_MAX_COUNT)
@ -438,7 +469,11 @@ int fts_gesture_suspend(struct fts_ts_data *ts_data)
}
for (i = 0; i < 5; i++) {
#ifdef CONFIG_FTS_DOUBLE_TAP_CONTROL
fts_write_reg(0xD1, ts_data->gsx_cmd);
#else
fts_write_reg(0xD1, 0xFF);
#endif
fts_write_reg(0xD2, 0xFF);
fts_write_reg(0xD5, 0xFF);
fts_write_reg(0xD6, 0xFF);

View file

@ -235,6 +235,7 @@ static int fts_mmi_panel_state(struct device *dev,
struct fts_ts_platform_data *pdata;
struct fts_ts_data *ts_data;
int ret = 0;
static u8 gesture_command = 0;
GET_TS_DATA(dev);
pdata = ts_data->pdata;
@ -259,6 +260,26 @@ static int fts_mmi_panel_state(struct device *dev,
#endif
break;
case TS_MMI_PM_GESTURE_CLI_SINGLE:
gesture_command |= (1 << 7);
FTS_INFO("Enable GESTURE_CLI_SINGLE command: %02x", gesture_command);
break;
case TS_MMI_PM_GESTURE_CLI_DOUBLE:
gesture_command |= (1 << 4);
FTS_INFO("Enable GESTURE_CLI_DOUBLE command: %02x", gesture_command);
break;
case TS_MMI_PM_GESTURE_SWITCH:
FTS_INFO("CLI GESTURE SWITCH command: %02x", gesture_command);
ts_data->gsx_cmd = gesture_command;
if (fts_gesture_suspend(ts_data) == 0) {
ts_data->wakeable = true;
ts_data->gesture_support = true;
}
gesture_command = 0;
break;
case TS_MMI_PM_ACTIVE:
break;
default: