diff --git a/drivers/input/touchscreen/synaptics_tcm2_mmi/syna_tcm2.h b/drivers/input/touchscreen/synaptics_tcm2_mmi/syna_tcm2.h index a97199a3d446..351a38cd65e4 100644 --- a/drivers/input/touchscreen/synaptics_tcm2_mmi/syna_tcm2.h +++ b/drivers/input/touchscreen/synaptics_tcm2_mmi/syna_tcm2.h @@ -115,7 +115,7 @@ * @brief ENABLE_WAKEUP_GESTURE * Open if having wake-up gesture support. */ -/* #define ENABLE_WAKEUP_GESTURE */ +#define ENABLE_WAKEUP_GESTURE /** * @brief REPORT_SWAP_XY diff --git a/drivers/input/touchscreen/synaptics_tcm2_mmi/syna_ts_mmi.c b/drivers/input/touchscreen/synaptics_tcm2_mmi/syna_ts_mmi.c index 2b4dbe397c9b..0a601722dce9 100644 --- a/drivers/input/touchscreen/synaptics_tcm2_mmi/syna_ts_mmi.c +++ b/drivers/input/touchscreen/synaptics_tcm2_mmi/syna_ts_mmi.c @@ -351,7 +351,7 @@ static int syna_ts_mmi_pre_resume(struct device *dev) if (!tcm) { return -ENODEV; } - if (tcm->pwr_state) + if (!tcm->pwr_state) { return 0; } @@ -391,7 +391,7 @@ static int syna_ts_mmi_post_suspend(struct device *dev) tcm->dev_suspend(&tcm->pdev->dev); - tcm->pwr_state = false; + //tcm->pwr_state = false; return 0; } @@ -419,6 +419,38 @@ static int syna_ts_mmi_pre_suspend(struct device *dev) return 0; } +static int syna_ts_mmi_panel_state(struct device *dev, + enum ts_mmi_pm_mode from, enum ts_mmi_pm_mode to) +{ + struct syna_tcm *tcm; + struct platform_device *pdev = dev_get_drvdata(dev); + if (!pdev) { + LOGE("Failed to get platform device"); + return -ENODEV; + } + tcm = platform_get_drvdata(pdev); + if (!tcm) { + LOGE("Failed to get driver data"); + return -ENODEV; + } + switch (to) { + case TS_MMI_PM_DEEPSLEEP: + tcm->lpwg_enabled = false; + tcm->dev_suspend(&tcm->pdev->dev); + break; + case TS_MMI_PM_GESTURE: + tcm->lpwg_enabled = true; + tcm->dev_suspend(&tcm->pdev->dev); + break; + case TS_MMI_PM_ACTIVE: + break; + default: + LOGI("panel mode %d is invalid.\n",to); + return -EINVAL; + } + return 0; +}; + static struct ts_mmi_methods syna_ts_mmi_methods = { .get_vendor = syna_ts_mmi_methods_get_vendor, .get_productinfo = syna_ts_mmi_methods_get_productinfo, @@ -436,6 +468,7 @@ static struct ts_mmi_methods syna_ts_mmi_methods = { /* Firmware */ .firmware_update = syna_ts_firmware_update, /* PM callback */ + .panel_state = syna_ts_mmi_panel_state, .pre_resume = syna_ts_mmi_pre_resume, .pre_suspend = syna_ts_mmi_pre_suspend, .post_suspend = syna_ts_mmi_post_suspend, diff --git a/drivers/input/touchscreen/synaptics_tcm2_mmi/tcm/synaptics_touchcom_func_touch.h b/drivers/input/touchscreen/synaptics_tcm2_mmi/tcm/synaptics_touchcom_func_touch.h index cafb9566dc69..99133cc54998 100644 --- a/drivers/input/touchscreen/synaptics_tcm2_mmi/tcm/synaptics_touchcom_func_touch.h +++ b/drivers/input/touchscreen/synaptics_tcm2_mmi/tcm/synaptics_touchcom_func_touch.h @@ -67,7 +67,7 @@ enum gesture_classification { GESTURE_ID_NONE = 0, GESTURE_ID_DOUBLE_TAP = 1, GESTURE_ID_SWIPE = 2, - GESTURE_ID_ACTIVE_SINGLE_TAP = 6, + GESTURE_ID_ACTIVE_SINGLE_TAP = 0x10, GESTURE_ID_ACTIVE_TAP_AND_HOLD = 7, };