From 4254d42b21b774b9d71f53710e34d4f130366da5 Mon Sep 17 00:00:00 2001 From: daiss1 Date: Sun, 2 Jun 2019 17:31:59 +0800 Subject: [PATCH] doha: TP: FocalteckTP Update DAM FocalteckTP Update DAM Use drm_notifier_callback Change-Id: Iafbf80cab6aea4041d0a782cfa4876729a3762a7 Signed-off-by: daiss1 Reviewed-on: https://gerrit.mot.com/1364929 SLTApproved: Slta Waiver SME-Granted: SME Approvals Granted Tested-by: Jira Key Reviewed-by: Guobin Zhang Submit-Approved: Jira Key Reviewed-on: https://gerrit.mot.com/1367088 Reviewed-by: Jianqi Yang --- .../focaltech_0flash_mmi/focaltech_core.c | 80 ++++++++++++++++--- .../focaltech_0flash_mmi/focaltech_core.h | 2 +- 2 files changed, 72 insertions(+), 10 deletions(-) diff --git a/drivers/input/touchscreen/focaltech_0flash_mmi/focaltech_core.c b/drivers/input/touchscreen/focaltech_0flash_mmi/focaltech_core.c index c76a946a0792..a3bdae68d2ba 100755 --- a/drivers/input/touchscreen/focaltech_0flash_mmi/focaltech_core.c +++ b/drivers/input/touchscreen/focaltech_0flash_mmi/focaltech_core.c @@ -37,11 +37,14 @@ #include #include #include -#if defined(CONFIG_FB) -#include -#include + +#ifdef CONFIG_DRM + #include +#elif defined(CONFIG_FB) + #include + #include #elif defined(CONFIG_HAS_EARLYSUSPEND) -#include + #include #define FTS_SUSPEND_LEVEL 1 /* Early-suspend level */ #endif #include "focaltech_core.h" @@ -1220,7 +1223,7 @@ static int fts_parse_dt(struct device *dev, struct fts_ts_platform_data *pdata) return 0; } -#if defined(CONFIG_FB) +#if defined(CONFIG_FB) || defined(CONFIG_DRM) static void fts_resume_work(struct work_struct *work) { struct fts_ts_data *ts_data = container_of(work, struct fts_ts_data, @@ -1228,7 +1231,51 @@ static void fts_resume_work(struct work_struct *work) fts_ts_resume(ts_data->dev); } +#endif +#ifdef CONFIG_DRM +int drm_notifier_callback(struct notifier_block *self, + unsigned long event, void *data) +{ + struct msm_drm_notifier *evdata = data; + int *blank; + struct fts_ts_data *ts_data = + container_of(self, struct fts_ts_data, fb_notif); + + if (!evdata || (evdata->id != 0)) { + return 0; + } + + if (!(event == MSM_DRM_EARLY_EVENT_BLANK || event == MSM_DRM_EVENT_BLANK)) { + FTS_INFO("event(%lu) do not need process\n", event); + return 0; + } + blank = evdata->data; + FTS_INFO("DRM event:%lu,blank:%d", event, *blank); + switch (*blank) { + case MSM_DRM_BLANK_UNBLANK: + if (MSM_DRM_EARLY_EVENT_BLANK == event) { + FTS_INFO("resume: event = %lu, not care\n", event); + } else if (MSM_DRM_EVENT_BLANK == event) { + queue_work(fts_data->ts_workqueue, &fts_data->resume_work); + } + break; + case MSM_DRM_BLANK_POWERDOWN: + if (MSM_DRM_EARLY_EVENT_BLANK == event) { + cancel_work_sync(&fts_data->resume_work); + fts_ts_suspend(ts_data->dev); + } else if (MSM_DRM_EVENT_BLANK == event) { + FTS_INFO("suspend: event = %lu, not care\n", event); + } + break; + default: + FTS_INFO("DAM BLANK(%d) do not need process\n", *blank); + break; + } + + return 0; +} +#elif defined(CONFIG_FB) static int fb_notifier_callback(struct notifier_block *self, unsigned long event, void *data) { @@ -1416,7 +1463,16 @@ static int fts_ts_probe_entry(struct fts_ts_data *ts_data) FTS_ERROR("init fw upgrade fail"); } -#if defined(CONFIG_FB) +#ifdef CONFIG_DRM + if (ts_data->ts_workqueue) { + INIT_WORK(&ts_data->resume_work, fts_resume_work); + } + ts_data->fb_notif.notifier_call = drm_notifier_callback; + ret = msm_drm_register_client(&ts_data->fb_notif); + if (ret) { + FTS_ERROR("[DRM]Unable to register fb_notifier: %d\n", ret); + } +#elif defined(CONFIG_FB) if (ts_data->ts_workqueue) { INIT_WORK(&ts_data->resume_work, fts_resume_work); } @@ -1500,9 +1556,12 @@ static int fts_ts_remove_entry(struct fts_ts_data *ts_data) if (ts_data->ts_workqueue) destroy_workqueue(ts_data->ts_workqueue); -#if defined(CONFIG_FB) +#ifdef CONFIG_DRM + if (msm_drm_unregister_client(&ts_data->fb_notif)) + FTS_ERROR("Error occurred while unregistering fb_notifier.\n"); +#elif defined(CONFIG_FB) if (fb_unregister_client(&ts_data->fb_notif)) - FTS_ERROR("Error occurred while unregistering fb_notifier."); + FTS_ERROR("Error occurred while unregistering fb_notifier.\n"); #elif defined(CONFIG_HAS_EARLYSUSPEND) unregister_early_suspend(&ts_data->early_suspend); #endif @@ -1562,6 +1621,9 @@ static int fts_ts_suspend(struct device *dev) if (ret < 0) FTS_ERROR("set TP to sleep mode fail, ret=%d", ret); + /* TP delay 50ms then lcd entery suspend*/ + mdelay(50); + if (!ts_data->ic_info.is_incell) { #if FTS_POWER_SOURCE_CUST_EN ret = fts_power_source_suspend(ts_data); @@ -1592,7 +1654,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(200); } fts_tp_state_recovery(ts_data); diff --git a/drivers/input/touchscreen/focaltech_0flash_mmi/focaltech_core.h b/drivers/input/touchscreen/focaltech_0flash_mmi/focaltech_core.h index 8652131f525b..7ffb9b223ff3 100755 --- a/drivers/input/touchscreen/focaltech_0flash_mmi/focaltech_core.h +++ b/drivers/input/touchscreen/focaltech_0flash_mmi/focaltech_core.h @@ -183,7 +183,7 @@ struct fts_ts_data { struct pinctrl_state *pins_suspend; struct pinctrl_state *pins_release; #endif -#if defined(CONFIG_FB) +#if defined(CONFIG_FB) || defined(CONFIG_DRM) struct notifier_block fb_notif; #elif defined(CONFIG_HAS_EARLYSUSPEND) struct early_suspend early_suspend;