msm: mdss: fix issues related to transitions in and out of doze mode
When entering doze mode, ensure that the tear-check setup is not torn down. In addition, do not disable the split-display configuration. This is to ensure that mdss driver can continue to handle any display updates in doze mode. Similarly, when transitioning from doze power state to blank power state, ensure that we do not send panel unblank and panel on events. These events should only be sent when transitioning to unblank power state. Change-Id: If5ca1cdd20bb442e773912575c0a6e204c0ca1a2 Signed-off-by: Aravind Venkateswaran <aravindh@codeaurora.org>
This commit is contained in:
parent
cafebb8cdf
commit
19a0721e64
2 changed files with 9 additions and 6 deletions
|
@ -2353,7 +2353,6 @@ int mdss_mdp_ctl_stop(struct mdss_mdp_ctl *ctl, int power_state)
|
|||
if (ctl->panel_data->panel_info.fbc.enabled)
|
||||
mdss_mdp_ctl_fbc_enable(0, sctl->mixer_left,
|
||||
&sctl->panel_data->panel_info);
|
||||
mdss_mdp_ctl_split_display_enable(0, ctl, sctl);
|
||||
}
|
||||
if (ret) {
|
||||
pr_warn("error powering off intf ctl=%d\n", ctl->num);
|
||||
|
@ -2365,6 +2364,9 @@ int mdss_mdp_ctl_stop(struct mdss_mdp_ctl *ctl, int power_state)
|
|||
goto end;
|
||||
}
|
||||
|
||||
if (sctl)
|
||||
mdss_mdp_ctl_split_display_enable(0, ctl, sctl);
|
||||
|
||||
mdss_mdp_ctl_write(ctl, MDSS_MDP_REG_CTL_TOP, 0);
|
||||
if (sctl)
|
||||
mdss_mdp_ctl_write(sctl, MDSS_MDP_REG_CTL_TOP, 0);
|
||||
|
|
|
@ -59,9 +59,9 @@ struct mdss_mdp_cmd_ctx mdss_mdp_cmd_ctx_list[MAX_SESSIONS];
|
|||
|
||||
static int mdss_mdp_cmd_do_notifier(struct mdss_mdp_cmd_ctx *ctx);
|
||||
|
||||
static bool __mdss_mdp_cmd_panel_power_on(struct mdss_mdp_cmd_ctx *ctx)
|
||||
static bool __mdss_mdp_cmd_panel_power_off(struct mdss_mdp_cmd_ctx *ctx)
|
||||
{
|
||||
return (ctx->panel_power_state == MDSS_PANEL_POWER_ON);
|
||||
return mdss_panel_is_power_off(ctx->panel_power_state);
|
||||
}
|
||||
|
||||
static inline u32 mdss_mdp_cmd_line_count(struct mdss_mdp_ctl *ctl)
|
||||
|
@ -216,7 +216,7 @@ static inline void mdss_mdp_cmd_clk_on(struct mdss_mdp_cmd_ctx *ctx)
|
|||
struct mdss_data_type *mdata = mdss_mdp_get_mdata();
|
||||
int irq_en, rc;
|
||||
|
||||
if (!__mdss_mdp_cmd_panel_power_on(ctx))
|
||||
if (__mdss_mdp_cmd_panel_power_off(ctx))
|
||||
return;
|
||||
|
||||
mutex_lock(&ctx->clk_mtx);
|
||||
|
@ -737,7 +737,7 @@ int mdss_mdp_cmd_kickoff(struct mdss_mdp_ctl *ctl, void *arg)
|
|||
PERF_HW_MDP_STATE, PERF_STATUS_BUSY);
|
||||
}
|
||||
|
||||
if (!__mdss_mdp_cmd_panel_power_on(ctx)) {
|
||||
if (__mdss_mdp_cmd_panel_power_off(ctx)) {
|
||||
rc = mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_UNBLANK, NULL);
|
||||
WARN(rc, "intf %d unblank error (%d)\n", ctl->intf_num, rc);
|
||||
|
||||
|
@ -948,7 +948,8 @@ int mdss_mdp_cmd_stop(struct mdss_mdp_ctl *ctl, int panel_power_state)
|
|||
(void *) (long int) panel_power_state);
|
||||
WARN(ret, "intf %d unblank error (%d)\n", ctl->intf_num, ret);
|
||||
|
||||
mdss_mdp_cmd_tearcheck_setup(ctl, false);
|
||||
if (panel_power_state != MDSS_PANEL_POWER_DOZE)
|
||||
mdss_mdp_cmd_tearcheck_setup(ctl, false);
|
||||
}
|
||||
|
||||
if (panel_power_state != MDSS_PANEL_POWER_OFF) {
|
||||
|
|
Loading…
Add table
Reference in a new issue