From 4642e2a1b6fd66697c34f8ea5a824f7ceca340b8 Mon Sep 17 00:00:00 2001 From: litong Date: Mon, 13 Jul 2020 17:22:20 +0800 Subject: [PATCH] Kiev: Add ft8756 single-tap wakeup gesture TP: Report the signle-tap wakeup gesture to doble-tap Sensor through touchscreen class. NO_PROP_NEEDED Change-Id: I243b3d7263d7da17232637973882640caa279732 Reviewed-on: https://gerrit.mot.com/1673468 SLTApproved: Slta Waiver SME-Granted: SME Approvals Granted Tested-by: Jira Key Reviewed-by: Jichao Zou Submit-Approved: Jira Key --- .../focaltech_0flash_mmi/focaltech_core.c | 4 +++ .../focaltech_0flash_mmi/focaltech_core.h | 8 ++++++ .../focaltech_0flash_mmi/focaltech_gesture.c | 27 +++++++++++++++++++ .../focaltech_0flash_mmi/focaltech_ts_mmi.c | 15 +++++++++++ 4 files changed, 54 insertions(+) diff --git a/drivers/input/touchscreen/focaltech_0flash_mmi/focaltech_core.c b/drivers/input/touchscreen/focaltech_0flash_mmi/focaltech_core.c index c82fc0664e03..75630e7b0ac2 100755 --- a/drivers/input/touchscreen/focaltech_0flash_mmi/focaltech_core.c +++ b/drivers/input/touchscreen/focaltech_0flash_mmi/focaltech_core.c @@ -1598,6 +1598,10 @@ static int fts_parse_dt(struct device *dev, struct fts_ts_platform_data *pdata) if (pdata->report_gesture_key) FTS_INFO("Report tap gesture as key."); + pdata->notify_to_panel = of_property_read_bool(np, "focaltech,notify_to_panel"); + if (pdata->notify_to_panel) + FTS_INFO("Notify touch status to panel."); + pdata->irq_gpio = of_get_named_gpio_flags(np, "focaltech,irq-gpio", 0, &pdata->irq_gpio_flags); if (pdata->irq_gpio < 0) diff --git a/drivers/input/touchscreen/focaltech_0flash_mmi/focaltech_core.h b/drivers/input/touchscreen/focaltech_0flash_mmi/focaltech_core.h index 3f70c540151d..09de8518c518 100755 --- a/drivers/input/touchscreen/focaltech_0flash_mmi/focaltech_core.h +++ b/drivers/input/touchscreen/focaltech_0flash_mmi/focaltech_core.h @@ -62,6 +62,9 @@ #include #include #include "focaltech_common.h" +#if defined(CONFIG_INPUT_TOUCHSCREEN_MMI) +#include +#endif #ifdef FTS_USB_DETECT_EN #include #endif @@ -140,6 +143,7 @@ struct fts_ts_platform_data { bool report_gesture_key; bool share_reset_gpio; bool have_key; + bool notify_to_panel; u32 key_number; u32 keys[FTS_MAX_KEYS]; u32 key_y_coords[FTS_MAX_KEYS]; @@ -265,6 +269,10 @@ struct fts_ts_data { struct wakeup_source palm_gesture_read_wakelock; #endif #endif + +#if defined(CONFIG_INPUT_TOUCHSCREEN_MMI) + struct ts_mmi_class_methods *imports; +#endif }; /***************************************************************************** diff --git a/drivers/input/touchscreen/focaltech_0flash_mmi/focaltech_gesture.c b/drivers/input/touchscreen/focaltech_0flash_mmi/focaltech_gesture.c index b341580e18ed..a7e30baedbe4 100755 --- a/drivers/input/touchscreen/focaltech_0flash_mmi/focaltech_gesture.c +++ b/drivers/input/touchscreen/focaltech_0flash_mmi/focaltech_gesture.c @@ -241,6 +241,7 @@ int fts_create_gesture_sysfs(struct device *dev) static void fts_gesture_report(struct input_dev *input_dev, int gesture_id) { int gesture; + int ret = 0; #ifdef FOCALTECH_SENSOR_EN static int report_cnt = 0; #endif @@ -297,6 +298,7 @@ static void fts_gesture_report(struct input_dev *input_dev, int gesture_id) if (gesture != -1) { FTS_DEBUG("Gesture Code=%d", gesture); #ifdef FOCALTECH_SENSOR_EN +#ifndef CONFIG_INPUT_TOUCHSCREEN_MMI if (!(fts_data->wakeable && fts_data->should_enable_gesture)) { FTS_INFO("Gesture got but wakeable not set. Skip this gesture."); return; @@ -312,15 +314,35 @@ static void fts_gesture_report(struct input_dev *input_dev, int gesture_id) ABS_DISTANCE, ++report_cnt); input_sync(fts_data->sensor_pdata->input_sensor_dev); } +#else + if (!fts_data->wakeable) { + FTS_INFO("Gesture got but wakeable not set. Skip this gesture."); + return; + } + /* report single 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 gesture function\n"); + event.evcode = 1; + /* call class method */ + ret = fts_data->imports->report_gesture(&event); + ++report_cnt; + } + } +#endif FTS_INFO("input report: %d", report_cnt); if (report_cnt >= REPORT_MAX_COUNT) report_cnt = 0; + if (!ret) { #ifdef CONFIG_HAS_WAKELOCK wake_lock_timeout(&gesture_wakelock, msecs_to_jiffies(5000)); #else __pm_wakeup_event(&gesture_wakelock, 5000); #endif + } #else input_report_key(input_dev, gesture, 1); input_sync(input_dev); @@ -331,6 +353,7 @@ static void fts_gesture_report(struct input_dev *input_dev, int gesture_id) } #ifdef FOCALTECH_SENSOR_EN +#ifndef CONFIG_INPUT_TOUCHSCREEN_MMI static int fts_sensor_set_enable(struct sensors_classdev *sensors_cdev, unsigned int enable) { @@ -422,6 +445,7 @@ int fts_sensor_remove(struct fts_ts_data *data) return 0; } #endif +#endif /***************************************************************************** * Name: fts_gesture_readdata @@ -629,8 +653,11 @@ int fts_gesture_init(struct fts_ts_data *ts_data) #else wakeup_source_init(&gesture_wakelock, "ets_wake_lock"); #endif +#ifndef CONFIG_INPUT_TOUCHSCREEN_MMI if (!fts_sensor_init(ts_data)) +#endif initialized_sensor = true; + } #endif diff --git a/drivers/input/touchscreen/focaltech_0flash_mmi/focaltech_ts_mmi.c b/drivers/input/touchscreen/focaltech_0flash_mmi/focaltech_ts_mmi.c index af6aa77e46f5..a16d726ebb45 100644 --- a/drivers/input/touchscreen/focaltech_0flash_mmi/focaltech_ts_mmi.c +++ b/drivers/input/touchscreen/focaltech_0flash_mmi/focaltech_ts_mmi.c @@ -194,10 +194,12 @@ static int fts_mmi_firmware_update(struct device *dev, char *fwname) static int fts_mmi_panel_state(struct device *dev, enum ts_mmi_pm_mode from, enum ts_mmi_pm_mode to) { + struct fts_ts_platform_data *pdata; struct fts_ts_data *ts_data; int ret = 0; GET_TS_DATA(dev); + pdata = ts_data->pdata; #ifdef FOCALTECH_SENSOR_EN mutex_lock(&ts_data->state_mutex); @@ -205,6 +207,10 @@ static int fts_mmi_panel_state(struct device *dev, switch (to) { case TS_MMI_PM_DEEPSLEEP: +#ifdef CONFIG_PANEL_NOTIFICATIONS + if (pdata->notify_to_panel) + touch_set_state(TS_MMI_PM_DEEPSLEEP, TOUCH_PANEL_IDX_PRIMARY); +#endif ret = fts_write_reg(FTS_REG_POWER_MODE, FTS_REG_POWER_MODE_SLEEP_VALUE); if (ret < 0) FTS_ERROR("set TP to sleep mode fail, ret=%d", ret); @@ -214,6 +220,10 @@ static int fts_mmi_panel_state(struct device *dev, break; case TS_MMI_PM_GESTURE: +#ifdef CONFIG_PANEL_NOTIFICATIONS + if (pdata->notify_to_panel) + touch_set_state(TS_MMI_PM_GESTURE, TOUCH_PANEL_IDX_PRIMARY); +#endif #if FTS_GESTURE_EN if (fts_gesture_suspend(ts_data) == 0) { /* Enter into gesture mode(suspend) */ @@ -347,7 +357,9 @@ static int fts_mmi_post_suspend(struct device *dev) gpio_direction_output(ts_data->pdata->reset_gpio, 0); } fts_release_all_finger(); +#ifdef FOCALTECH_SENSOR_EN } +#endif ts_data->suspended = true; FTS_FUNC_EXIT(); @@ -394,6 +406,9 @@ int fts_mmi_dev_register(struct fts_ts_data *ts_data) { return ret; } + /* initialize class imported methods */ + ts_data->imports = &fts_mmi_methods.exports; + return 0; }