diff options
author | Andy Quan <andyq@google.com> | 2019-01-18 06:05:41 +0000 |
---|---|---|
committer | Android Partner Code Review <android-gerrit-partner@google.com> | 2019-01-18 06:05:41 +0000 |
commit | 1533b26501ec3018845e8f84ee4bf49f4e5a00b2 (patch) | |
tree | c14d5297dc98b13f4286c0eaf52326b5fa645eeb | |
parent | afff9176ef4e3dcddbd635d38b9c700707522c82 (diff) | |
parent | 01a17b9d68e316c6b96708d946d3f31f9f5d0f8d (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.h | 2 | ||||
-rwxr-xr-x[-rw-r--r--] | drivers/video/msm/mdss/mdss_dsi_panel.c | 15 |
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; } |