diff --git a/drivers/input/touchscreen/focaltech_0flash_mmi/focaltech_core.c b/drivers/input/touchscreen/focaltech_0flash_mmi/focaltech_core.c index 1b39bbab3516..b086a65384ea 100755 --- a/drivers/input/touchscreen/focaltech_0flash_mmi/focaltech_core.c +++ b/drivers/input/touchscreen/focaltech_0flash_mmi/focaltech_core.c @@ -2059,6 +2059,7 @@ static int _fts_ts_suspend(struct device *dev) ts_data->suspended = true; #ifdef FOCALTECH_SENSOR_EN ts_data->screen_state = SCREEN_OFF; + ts_data->wakeable = true; mutex_unlock(&ts_data->state_mutex); FTS_INFO("Enter gesture suspend mode."); #endif @@ -2165,12 +2166,13 @@ static int _fts_ts_resume(struct device *dev) #if FTS_GESTURE_EN #ifdef FOCALTECH_SENSOR_EN - if (ts_data->should_enable_gesture) { + if (ts_data->wakeable) { #endif if (fts_gesture_resume(ts_data) == 0) { ts_data->suspended = false; #ifdef FOCALTECH_SENSOR_EN ts_data->screen_state = SCREEN_ON; + ts_data->wakeable = false; mutex_unlock(&ts_data->state_mutex); FTS_INFO("Exit from gesture suspend mode."); #endif diff --git a/drivers/input/touchscreen/focaltech_0flash_mmi/focaltech_gesture.c b/drivers/input/touchscreen/focaltech_0flash_mmi/focaltech_gesture.c index bf38075c920a..c4f2478b3497 100755 --- a/drivers/input/touchscreen/focaltech_0flash_mmi/focaltech_gesture.c +++ b/drivers/input/touchscreen/focaltech_0flash_mmi/focaltech_gesture.c @@ -111,8 +111,10 @@ static struct sensors_classdev __maybe_unused sensors_touch_cdev = { .max_range = "5.0", .resolution = "5.0", .sensor_power = "1", - .min_delay = -1, + .min_delay = 0, .max_delay = 0, + /* WAKE_UP & ON_CHANGE */ + .flags = 1 | 2, .fifo_reserved_event_count = 0, .fifo_max_event_count = 0, .enabled = 0, @@ -295,13 +297,8 @@ 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 - if (!fts_data->wakeable) { - FTS_INFO("Predict enable failed."); - fts_data->should_enable_gesture = false; - fts_gesture_resume(fts_data); - /* TP enter sleep mode */ - if (fts_write_reg(FTS_REG_POWER_MODE, FTS_REG_POWER_MODE_SLEEP_VALUE) < 0) - FTS_ERROR("set TP to sleep mode fail."); + if (!(fts_data->wakeable && fts_data->should_enable_gesture)) { + FTS_INFO("Gesture got but wakeable not set. Skip this gesture."); return; } input_report_abs(fts_data->sensor_pdata->input_sensor_dev, @@ -313,7 +310,7 @@ static void fts_gesture_report(struct input_dev *input_dev, int gesture_id) #ifdef CONFIG_HAS_WAKELOCK wake_lock_timeout(&gesture_wakelock, msecs_to_jiffies(5000)); #else - __pm_wakeup_event(&gesture_wakelock, msecs_to_jiffies(5000)); + __pm_wakeup_event(&gesture_wakelock, 5000); #endif #else input_report_key(input_dev, gesture, 1); @@ -330,28 +327,13 @@ static int fts_sensor_set_enable(struct sensors_classdev *sensors_cdev, { FTS_INFO("Gesture set enable %d!", enable); mutex_lock(&fts_data->state_mutex); - if (enable == 1) { - fts_data->wakeable = true; - if (!fts_data->suspended && fts_data->screen_state == SCREEN_ON) { - FTS_INFO("Touch still in normal mode, skip to set to gesture mode"); - mutex_unlock(&fts_data->state_mutex); - return 0; - } - if (fts_gesture_data.active == ENABLE) { - FTS_INFO("already in gesture mode"); - mutex_unlock(&fts_data->state_mutex); - return 0; - } - + if (enable == 1) fts_data->should_enable_gesture = true; - fts_gesture_suspend(fts_data); - FTS_INFO("Set IC in doze mode"); - } else if (enable == 0) { - fts_data->wakeable = false; - //fts_gesture_resume(fts_data); - } else { + else if (enable == 0) + fts_data->should_enable_gesture = false; + else FTS_INFO("unknown enable symbol\n"); - } + mutex_unlock(&fts_data->state_mutex); return 0; }