summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/video/fbdev/msm/mdss_fb.c2
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c12
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp_overlay.c3
3 files changed, 11 insertions, 6 deletions
diff --git a/drivers/video/fbdev/msm/mdss_fb.c b/drivers/video/fbdev/msm/mdss_fb.c
index ec4962b53ea0..e2c9648635d6 100644
--- a/drivers/video/fbdev/msm/mdss_fb.c
+++ b/drivers/video/fbdev/msm/mdss_fb.c
@@ -808,7 +808,7 @@ static void mdss_fb_input_event_handler(struct input_handle *handle,
struct msm_fb_data_type *mfd = handle->handler->private;
int rc;
- if (type != EV_ABS)
+ if ((type != EV_ABS) || !mdss_fb_is_power_on(mfd))
return;
if (mfd->mdp.input_event_handler) {
diff --git a/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c b/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c
index 14ebd4abb817..04d61ed472e3 100644
--- a/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c
+++ b/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c
@@ -690,6 +690,12 @@ int mdss_mdp_resource_control(struct mdss_mdp_ctl *ctl, u32 sw_event)
* 3. If the current state is POWER-OFF, Schedule a work item to
* POWER-ON.
*/
+
+ /* if panels are off, do not process early wake up */
+ if ((ctx && __mdss_mdp_cmd_is_panel_power_off(ctx)) ||
+ (sctx && __mdss_mdp_cmd_is_panel_power_off(sctx)))
+ break;
+
mutex_lock(&ctl->rsrc_lock);
if (mdp5_data->resources_state != MDP_RSRC_CTL_STATE_OFF) {
if (cancel_work_sync(&ctx->gate_clk_work))
@@ -741,9 +747,6 @@ static inline void mdss_mdp_cmd_clk_on(struct mdss_mdp_cmd_ctx *ctx)
{
struct mdss_data_type *mdata = mdss_mdp_get_mdata();
- if (__mdss_mdp_cmd_is_panel_power_off(ctx))
- return;
-
mutex_lock(&ctx->clk_mtx);
MDSS_XLOG(ctx->pp_num, atomic_read(&ctx->koff_cnt));
@@ -2005,7 +2008,8 @@ static int mdss_mdp_cmd_early_wake_up(struct mdss_mdp_ctl *ctl)
* involves cancelling queued work items. So this will be
* scheduled in a work item.
*/
- schedule_work(&ctx->early_wakeup_clk_work);
+ if (ctx)
+ schedule_work(&ctx->early_wakeup_clk_work);
return 0;
}
diff --git a/drivers/video/fbdev/msm/mdss_mdp_overlay.c b/drivers/video/fbdev/msm/mdss_mdp_overlay.c
index c39429a4a7df..4c555fd3986c 100644
--- a/drivers/video/fbdev/msm/mdss_mdp_overlay.c
+++ b/drivers/video/fbdev/msm/mdss_mdp_overlay.c
@@ -4909,7 +4909,8 @@ int mdss_mdp_input_event_handler(struct msm_fb_data_type *mfd)
int rc = 0;
struct mdss_mdp_ctl *ctl = mfd_to_ctl(mfd);
- if (ctl->ops.early_wake_up_fnc)
+ if (ctl && mdss_panel_is_power_on(ctl->power_state) &&
+ ctl->ops.early_wake_up_fnc)
rc = ctl->ops.early_wake_up_fnc(ctl);
return rc;