From f67f735d4e279e6cc5c7157cb30d15b72cadc0db Mon Sep 17 00:00:00 2001 From: wangyq13 Date: Tue, 6 Jul 2021 12:03:47 +0800 Subject: [PATCH] focaltech_v2_mmi: disable focaltech driver drm notify - disable focaltech driver drm nofity, use touchscreen mmi drm notify - reduce tp reset time, if tp is invalid, retry - add pintrl function for touchscreen mmi, to reset touch ic Change-Id: I2a9c6fdb806905d2e55cee6aa1908941c1c4242f Signed-off-by: wangyq13 Reviewed-on: https://gerrit.mot.com/2003119 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: litong Reviewed-by: Jun Weng Reviewed-by: Huosheng Liao Submit-Approved: Jira Key --- .../focaltech_v2_mmi/focaltech_core.c | 22 +++++++++++++++--- .../focaltech_v2_mmi/focaltech_ts_mmi.c | 23 ++++++++++++++++--- 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/drivers/input/touchscreen/focaltech_v2_mmi/focaltech_core.c b/drivers/input/touchscreen/focaltech_v2_mmi/focaltech_core.c index 7472ab94d441..ac159fe84c97 100644 --- a/drivers/input/touchscreen/focaltech_v2_mmi/focaltech_core.c +++ b/drivers/input/touchscreen/focaltech_v2_mmi/focaltech_core.c @@ -61,7 +61,7 @@ extern void fts_mmi_dev_unregister(struct fts_ts_data *ts_data); * Private constant and macro definitions using #define *****************************************************************************/ #define FTS_DRIVER_NAME "fts_ts" -#define INTERVAL_READ_REG 200 /* unit:ms */ +#define INTERVAL_READ_REG 50 /* unit:ms */ #define TIMEOUT_READ_REG 1000 /* unit:ms */ #if FTS_POWER_SOURCE_CUST_EN #define FTS_VTG_MIN_UV 3000000 @@ -79,8 +79,10 @@ struct fts_ts_data *fts_data; /***************************************************************************** * Static function prototypes *****************************************************************************/ +#ifndef CONFIG_INPUT_TOUCHSCREEN_MMI static int fts_ts_suspend(struct device *dev); static int fts_ts_resume(struct device *dev); +#endif /***************************************************************************** * Name: fts_wait_tp_to_valid @@ -1297,6 +1299,7 @@ static int fts_power_source_exit(struct fts_ts_data *ts_data) return 0; } +#ifndef CONFIG_INPUT_TOUCHSCREEN_MMI static int fts_power_source_suspend(struct fts_ts_data *ts_data) { int ret = 0; @@ -1328,6 +1331,7 @@ static int fts_power_source_resume(struct fts_ts_data *ts_data) return ret; } +#endif #endif /* FTS_POWER_SOURCE_CUST_EN */ static int fts_gpio_configure(struct fts_ts_data *data) @@ -1498,6 +1502,7 @@ static int fts_parse_dt(struct device *dev, struct fts_ts_platform_data *pdata) return 0; } +#ifndef CONFIG_INPUT_TOUCHSCREEN_MMI static void fts_resume_work(struct work_struct *work) { struct fts_ts_data *ts_data = container_of(work, struct fts_ts_data, @@ -1690,6 +1695,7 @@ static void fts_ts_late_resume(struct early_suspend *handler) queue_work(fts_data->ts_workqueue, &fts_data->resume_work); } #endif +#endif static int fts_ts_probe_entry(struct fts_ts_data *ts_data) { @@ -1709,6 +1715,7 @@ static int fts_ts_probe_entry(struct fts_ts_data *ts_data) if (ret) FTS_ERROR("device-tree parse fail"); +#ifndef CONFIG_INPUT_TOUCHSCREEN_MMI #if defined(CONFIG_DRM) #if defined(CONFIG_DRM_PANEL) ret = drm_check_dt(ts_data->dev->of_node); @@ -1716,6 +1723,7 @@ static int fts_ts_probe_entry(struct fts_ts_data *ts_data) FTS_ERROR("parse drm-panel fail"); } #endif +#endif #endif } else { if (ts_data->dev->platform_data) { @@ -1769,7 +1777,7 @@ static int fts_ts_probe_entry(struct fts_ts_data *ts_data) #endif #if (!FTS_CHIP_IDC) - fts_reset_proc(200); + fts_reset_proc(150); #endif ret = fts_get_ic_information(ts_data); @@ -1831,15 +1839,18 @@ static int fts_ts_probe_entry(struct fts_ts_data *ts_data) FTS_ERROR("init fw upgrade fail"); } +#ifndef CONFIG_INPUT_TOUCHSCREEN_MMI if (ts_data->ts_workqueue) { INIT_WORK(&ts_data->resume_work, fts_resume_work); } +#endif #if defined(CONFIG_PM) && FTS_PATCH_COMERR_PM init_completion(&ts_data->pm_completion); ts_data->pm_suspend = false; #endif +#ifndef CONFIG_INPUT_TOUCHSCREEN_MMI #if defined(CONFIG_DRM) ts_data->fb_notif.notifier_call = drm_notifier_callback; #if defined(CONFIG_DRM_PANEL) @@ -1866,6 +1877,7 @@ static int fts_ts_probe_entry(struct fts_ts_data *ts_data) ts_data->early_suspend.resume = fts_ts_late_resume; register_early_suspend(&ts_data->early_suspend); #endif +#endif #ifdef CONFIG_INPUT_TOUCHSCREEN_MMI fts_mmi_dev_register(ts_data); @@ -1936,6 +1948,7 @@ static int fts_ts_remove_entry(struct fts_ts_data *ts_data) if (ts_data->ts_workqueue) destroy_workqueue(ts_data->ts_workqueue); +#ifndef CONFIG_INPUT_TOUCHSCREEN_MMI #if defined(CONFIG_DRM) #if defined(CONFIG_DRM_PANEL) if (active_panel) @@ -1949,6 +1962,7 @@ static int fts_ts_remove_entry(struct fts_ts_data *ts_data) FTS_ERROR("[FB]Error occurred while unregistering fb_notifier."); #elif defined(CONFIG_HAS_EARLYSUSPEND) unregister_early_suspend(&ts_data->early_suspend); +#endif #endif if (gpio_is_valid(ts_data->pdata->reset_gpio)) @@ -1972,6 +1986,7 @@ static int fts_ts_remove_entry(struct fts_ts_data *ts_data) return 0; } +#ifndef CONFIG_INPUT_TOUCHSCREEN_MMI static int fts_ts_suspend(struct device *dev) { int ret = 0; @@ -2061,7 +2076,7 @@ static int fts_ts_resume(struct device *dev) #if FTS_POWER_SOURCE_CUST_EN fts_power_source_resume(ts_data); #endif - fts_reset_proc(200); + fts_reset_proc(150); } fts_wait_tp_to_valid(); @@ -2085,6 +2100,7 @@ static int fts_ts_resume(struct device *dev) FTS_FUNC_EXIT(); return 0; } +#endif #if defined(CONFIG_PM) && FTS_PATCH_COMERR_PM static int fts_pm_suspend(struct device *dev) diff --git a/drivers/input/touchscreen/focaltech_v2_mmi/focaltech_ts_mmi.c b/drivers/input/touchscreen/focaltech_v2_mmi/focaltech_ts_mmi.c index c46bf4732436..d81f832323dd 100644 --- a/drivers/input/touchscreen/focaltech_v2_mmi/focaltech_ts_mmi.c +++ b/drivers/input/touchscreen/focaltech_v2_mmi/focaltech_ts_mmi.c @@ -173,6 +173,23 @@ static int fts_mmi_methods_reset(struct device *dev, int type) return 0; } +static int fts_mmi_methods_pinctrl(struct device *dev, int on) +{ + struct fts_ts_data *ts_data; + struct input_dev *input_dev; + + GET_TS_DATA(dev); + input_dev = ts_data->input_dev; + + if (on == TS_MMI_PINCTL_ON) { + mutex_lock(&input_dev->mutex); + fts_reset_proc(150); + mutex_unlock(&input_dev->mutex); + } + + return 0; +} + static int fts_mmi_firmware_update(struct device *dev, char *fwname) { struct fts_ts_data *ts_data; @@ -216,11 +233,9 @@ static int fts_mmi_panel_state(struct device *dev, switch (to) { case TS_MMI_PM_DEEPSLEEP: ret = fts_write_reg(FTS_REG_POWER_MODE, FTS_REG_POWER_MODE_SLEEP); + ts_data->gesture_mode = false; if (ret < 0) FTS_ERROR("set TP to sleep mode fail, ret=%d", ret); - - /* TP delay 50ms then lcd entery suspend*/ - mdelay(50); break; case TS_MMI_PM_GESTURE: @@ -229,6 +244,7 @@ static int fts_mmi_panel_state(struct device *dev, /* Enter into gesture mode(suspend) */ #ifdef FOCALTECH_SENSOR_EN ts_data->wakeable = true; + ts_data->gesture_mode = true; #endif } #endif @@ -362,6 +378,7 @@ static struct ts_mmi_methods fts_mmi_methods = { .get_poweron = fts_mmi_methods_get_poweron, /* SET methods */ .reset = fts_mmi_methods_reset, + .pinctrl = fts_mmi_methods_pinctrl, .drv_irq = fts_mmi_methods_drv_irq, #if FTS_POWER_SOURCE_CUST_EN .power = fts_mmi_methods_power,