aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Quan <andyq@google.com>2019-01-18 06:05:41 +0000
committerAndroid Partner Code Review <android-gerrit-partner@google.com>2019-01-18 06:05:41 +0000
commit1533b26501ec3018845e8f84ee4bf49f4e5a00b2 (patch)
treec14d5297dc98b13f4286c0eaf52326b5fa645eeb
parentafff9176ef4e3dcddbd635d38b9c700707522c82 (diff)
parent01a17b9d68e316c6b96708d946d3f31f9f5d0f8d (diff)
Merge "display: add wake lock for avoid screen stuck problem" into android-msm-tunny-3.18android-wear-9.0.0_r0.16
-rwxr-xr-x[-rw-r--r--]drivers/video/msm/mdss/mdss_dsi.h2
-rwxr-xr-x[-rw-r--r--]drivers/video/msm/mdss/mdss_dsi_panel.c15
2 files changed, 17 insertions, 0 deletions
diff --git a/drivers/video/msm/mdss/mdss_dsi.h b/drivers/video/msm/mdss/mdss_dsi.h
index 611eaec899f6..605c40bc9d6d 100644..100755
--- a/drivers/video/msm/mdss/mdss_dsi.h
+++ b/drivers/video/msm/mdss/mdss_dsi.h
@@ -19,6 +19,7 @@
#include <linux/irqreturn.h>
#include <linux/pinctrl/consumer.h>
#include <linux/gpio.h>
+#include <linux/wakelock.h>
#include "mdss_panel.h"
#include "mdss_dsi_cmd.h"
@@ -556,6 +557,7 @@ struct mdss_dsi_ctrl_pdata {
bool timing_db_mode;
bool update_phy_timing; /* flag to recalculate PHY timings */
struct delayed_work idle_work;
+ struct wake_lock idle_wlock;
bool phy_power_off;
};
diff --git a/drivers/video/msm/mdss/mdss_dsi_panel.c b/drivers/video/msm/mdss/mdss_dsi_panel.c
index 175c67f40346..7b10af1097e5 100644..100755
--- a/drivers/video/msm/mdss/mdss_dsi_panel.c
+++ b/drivers/video/msm/mdss/mdss_dsi_panel.c
@@ -255,6 +255,11 @@ void mdss_dsi_idle_work(struct work_struct *work)
pr_info("%s: start to send idle command\n", __func__);
mdss_dsi_panel_cmds_send(ctrl, &ctrl->idle_on_cmds,
CMD_REQ_COMMIT);
+
+ if (wake_lock_active(&ctrl->idle_wlock)) {
+ wake_unlock(&ctrl->idle_wlock);
+ pr_info("idle_wake_unlock\n");
+ }
}
static void mdss_dsi_panel_set_idle_mode(struct mdss_panel_data *pdata,
@@ -278,12 +283,21 @@ static void mdss_dsi_panel_set_idle_mode(struct mdss_panel_data *pdata,
MDSS_XLOG(ctrl->idle, enable);
if (enable) {
if (ctrl->idle_on_cmds.cmd_cnt) {
+ if (!wake_lock_active(&ctrl->idle_wlock)) {
+ wake_lock(&ctrl->idle_wlock);
+ pr_info("idle_wake_lock\n");
+ }
schedule_delayed_work(&ctrl->idle_work, msecs_to_jiffies(400));
ctrl->idle = true;
pr_debug("Idle on\n");
}
} else {
cancel_delayed_work_sync(&ctrl->idle_work);
+ if (wake_lock_active(&ctrl->idle_wlock)) {
+ wake_unlock(&ctrl->idle_wlock);
+ pr_info("idle_wake_unlock\n");
+ }
+
if (ctrl->idle_off_cmds.cmd_cnt) {
mdss_dsi_panel_cmds_send(ctrl, &ctrl->idle_off_cmds,
CMD_REQ_COMMIT);
@@ -2902,6 +2916,7 @@ int mdss_dsi_panel_init(struct device_node *node,
ctrl_pdata->panel_data.get_idle = mdss_dsi_panel_get_idle_mode;
INIT_DELAYED_WORK(&ctrl_pdata->idle_work, mdss_dsi_idle_work);
+ wake_lock_init(&ctrl_pdata->idle_wlock, WAKE_LOCK_SUSPEND, "mdss");
return 0;
}