mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-08 12:58:12 -04:00
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 <zoujc@motorola.com> Submit-Approved: Jira Key
This commit is contained in:
parent
9858787efb
commit
4642e2a1b6
4 changed files with 54 additions and 0 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -62,6 +62,9 @@
|
|||
#include <linux/kthread.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include "focaltech_common.h"
|
||||
#if defined(CONFIG_INPUT_TOUCHSCREEN_MMI)
|
||||
#include <linux/touchscreen_mmi.h>
|
||||
#endif
|
||||
#ifdef FTS_USB_DETECT_EN
|
||||
#include <linux/power_supply.h>
|
||||
#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
|
||||
};
|
||||
|
||||
/*****************************************************************************
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue