Merge "input: touchscreen: focaltech: queue touch suspend work on workqueue"

This commit is contained in:
qctecmdr 2020-10-15 17:09:23 -07:00 • committed by Gerrit - the friendly Code Review server
commit 6e14331c56
2 changed files with 21 additions and 6 deletions

View file

@ -2126,13 +2126,19 @@ static void fts_resume_work(struct work_struct *work)
fts_ts_resume(ts_data->dev);
}
static void fts_suspend_work(struct work_struct *work)
{
struct fts_ts_data *ts_data = container_of(work, struct fts_ts_data,
resume_work);
fts_ts_suspend(ts_data->dev);
}
static int fb_notifier_callback(struct notifier_block *self,
unsigned long event, void *data)
{
struct drm_panel_notifier *evdata = data;
int *blank = NULL;
struct fts_ts_data *ts_data = container_of(self, struct fts_ts_data,
fb_notif);
if (!evdata)
return 0;
@ -2156,8 +2162,8 @@ static int fb_notifier_callback(struct notifier_block *self,
case DRM_PANEL_BLANK_POWERDOWN:
if (event == DRM_PANEL_EARLY_EVENT_BLANK) {
cancel_work_sync(&fts_data->resume_work);
fts_ts_suspend(ts_data->dev);
queue_work(fts_data->ts_workqueue,
&fts_data->suspend_work);
} else if (event == DRM_PANEL_EVENT_BLANK) {
FTS_DEBUG("suspend: event = %lu, not care\n", event);
}
@ -2180,13 +2186,19 @@ static void fts_resume_work(struct work_struct *work)
fts_ts_resume(ts_data->dev);
}
static void fts_suspend_work(struct work_struct *work)
{
struct fts_ts_data *ts_data = container_of(work, struct fts_ts_data,
resume_work);
fts_ts_suspend(ts_data->dev);
}
static int fb_notifier_callback(struct notifier_block *self,
unsigned long event, void *data)
{
struct fb_event *evdata = data;
int *blank = NULL;
struct fts_ts_data *ts_data = container_of(self, struct fts_ts_data,
fb_notif);
if (!(event == FB_EARLY_EVENT_BLANK || event == FB_EVENT_BLANK)) {
FTS_INFO("event(%lu) do not need process\n", event);
@ -2413,6 +2425,7 @@ static int fts_ts_probe_entry(struct fts_ts_data *ts_data)
#if defined(CONFIG_DRM)
if (ts_data->ts_workqueue) {
INIT_WORK(&ts_data->resume_work, fts_resume_work);
INIT_WORK(&ts_data->suspend_work, fts_suspend_work);
}
ts_data->fb_notif.notifier_call = fb_notifier_callback;
@ -2424,6 +2437,7 @@ static int fts_ts_probe_entry(struct fts_ts_data *ts_data)
#elif defined(CONFIG_FB)
if (ts_data->ts_workqueue) {
INIT_WORK(&ts_data->resume_work, fts_resume_work);
INIT_WORK(&ts_data->suspend_work, fts_suspend_work);
}
ts_data->fb_notif.notifier_call = fb_notifier_callback;
ret = fb_register_client(&ts_data->fb_notif);

View file

@ -178,6 +178,7 @@ struct fts_ts_data {
struct delayed_work esdcheck_work;
struct delayed_work prc_work;
struct work_struct resume_work;
struct work_struct suspend_work;
struct ftxxxx_proc proc;
spinlock_t irq_lock;
struct mutex report_mutex;