diff --git a/drivers/input/touchscreen/sec_ts/sec_ts.c b/drivers/input/touchscreen/sec_ts/sec_ts.c index 566e5c0fc..c312eec51 100644 --- a/drivers/input/touchscreen/sec_ts/sec_ts.c +++ b/drivers/input/touchscreen/sec_ts/sec_ts.c @@ -1398,12 +1398,17 @@ static irqreturn_t sec_ts_irq_thread(int irq, void *ptr) } #endif + /* prevent CPU from entering deep sleep */ + pm_qos_update_request(&ts->pm_qos_req, 100); + mutex_lock(&ts->eventlock); sec_ts_read_event(ts); mutex_unlock(&ts->eventlock); + pm_qos_update_request(&ts->pm_qos_req, PM_QOS_DEFAULT_VALUE); + return IRQ_HANDLED; } @@ -2230,6 +2235,9 @@ static int sec_ts_probe(struct i2c_client *client, const struct i2c_device_id *i "%s: TOUCH DEVICE ID : %02X, %02X, %02X, %02X, %02X\n", __func__, deviceID[0], deviceID[1], deviceID[2], deviceID[3], deviceID[4]); + pm_qos_add_request(&ts->pm_qos_req, PM_QOS_CPU_DMA_LATENCY, + PM_QOS_DEFAULT_VALUE); + ret = sec_ts_i2c_read(ts, SEC_TS_READ_FIRMWARE_INTEGRITY, &result, 1); if (ret < 0) { input_err(true, &ts->client->dev, "%s: failed to integrity check (%d)\n", __func__, ret); @@ -2409,6 +2417,7 @@ static int sec_ts_probe(struct i2c_client *client, const struct i2c_device_id *i err_fb_client: #endif err_irq: + pm_qos_remove_request(&ts->pm_qos_req); if (ts->plat_data->support_dex) { input_unregister_device(ts->input_dev_pad); ts->input_dev_pad = NULL; @@ -2853,6 +2862,8 @@ static int sec_ts_remove(struct i2c_client *client) free_irq(ts->client->irq, ts); input_info(true, &ts->client->dev, "%s: irq disabled\n", __func__); + pm_qos_remove_request(&ts->pm_qos_req); + #ifdef USE_POWER_RESET_WORK cancel_delayed_work_sync(&ts->reset_work); flush_delayed_work(&ts->reset_work); diff --git a/drivers/input/touchscreen/sec_ts/sec_ts.h b/drivers/input/touchscreen/sec_ts/sec_ts.h index 6c2dfa73c..67fa9b773 100644 --- a/drivers/input/touchscreen/sec_ts/sec_ts.h +++ b/drivers/input/touchscreen/sec_ts/sec_ts.h @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include @@ -681,7 +682,7 @@ struct sec_ts_data { struct mutex i2c_mutex; struct mutex eventlock; struct mutex modechange; - + struct pm_qos_request pm_qos_req; struct delayed_work work_read_info; #ifdef USE_POWER_RESET_WORK struct delayed_work reset_work;