Merge "msm: mdss: Ensure MDSS GDSC switched off during FB PM suspend"
This commit is contained in:
commit
4b791a5fa9
5 changed files with 39 additions and 3 deletions
|
@ -1596,13 +1596,30 @@ static int mdss_fb_resume(struct platform_device *pdev)
|
|||
static int mdss_fb_pm_suspend(struct device *dev)
|
||||
{
|
||||
struct msm_fb_data_type *mfd = dev_get_drvdata(dev);
|
||||
int rc = 0;
|
||||
|
||||
if (!mfd)
|
||||
return -ENODEV;
|
||||
|
||||
dev_dbg(dev, "display pm suspend\n");
|
||||
|
||||
return mdss_fb_suspend_sub(mfd);
|
||||
rc = mdss_fb_suspend_sub(mfd);
|
||||
|
||||
/*
|
||||
* Call MDSS footswitch control to ensure GDSC is
|
||||
* off after pm suspend call. There are cases when
|
||||
* mdss runtime call doesn't trigger even when clock
|
||||
* ref count is zero after fb pm suspend.
|
||||
*/
|
||||
if (!rc) {
|
||||
if (mfd->mdp.footswitch_ctrl)
|
||||
mfd->mdp.footswitch_ctrl(false);
|
||||
} else {
|
||||
pr_err("fb pm suspend failed, rc: %d\n", rc);
|
||||
}
|
||||
|
||||
return rc;
|
||||
|
||||
}
|
||||
|
||||
static int mdss_fb_pm_resume(struct device *dev)
|
||||
|
@ -1622,6 +1639,9 @@ static int mdss_fb_pm_resume(struct device *dev)
|
|||
pm_runtime_set_suspended(dev);
|
||||
pm_runtime_enable(dev);
|
||||
|
||||
if (mfd->mdp.footswitch_ctrl)
|
||||
mfd->mdp.footswitch_ctrl(true);
|
||||
|
||||
return mdss_fb_resume_sub(mfd);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -232,6 +232,7 @@ struct msm_mdp_interface {
|
|||
int (*configure_panel)(struct msm_fb_data_type *mfd, int mode,
|
||||
int dest_ctrl);
|
||||
int (*input_event_handler)(struct msm_fb_data_type *mfd);
|
||||
void (*footswitch_ctrl)(bool on);
|
||||
int (*pp_release_fnc)(struct msm_fb_data_type *mfd);
|
||||
void *private1;
|
||||
};
|
||||
|
|
|
@ -233,7 +233,6 @@ static struct mdss_mdp_irq mdp_irq_map[] = {
|
|||
|
||||
static struct intr_callback *mdp_intr_cb;
|
||||
|
||||
static void mdss_mdp_footswitch_ctrl(struct mdss_data_type *mdata, int on);
|
||||
static int mdss_mdp_parse_dt(struct platform_device *pdev);
|
||||
static int mdss_mdp_parse_dt_pipe(struct platform_device *pdev);
|
||||
static int mdss_mdp_parse_dt_mixer(struct platform_device *pdev);
|
||||
|
@ -5172,7 +5171,7 @@ static void mdss_mdp_notify_idle_pc(struct mdss_data_type *mdata)
|
|||
* active (but likely in an idle state), the vote for the CX and the batfet
|
||||
* rails should not be released.
|
||||
*/
|
||||
static void mdss_mdp_footswitch_ctrl(struct mdss_data_type *mdata, int on)
|
||||
void mdss_mdp_footswitch_ctrl(struct mdss_data_type *mdata, int on)
|
||||
{
|
||||
int ret;
|
||||
int active_cnt = 0;
|
||||
|
|
|
@ -1640,6 +1640,7 @@ int mdss_mdp_set_intr_callback_nosync(u32 intr_type, u32 intf_num,
|
|||
void (*fnc_ptr)(void *), void *arg);
|
||||
u32 mdss_mdp_get_irq_mask(u32 intr_type, u32 intf_num);
|
||||
|
||||
void mdss_mdp_footswitch_ctrl(struct mdss_data_type *mdata, int on);
|
||||
void mdss_mdp_footswitch_ctrl_splash(int on);
|
||||
void mdss_mdp_batfet_ctrl(struct mdss_data_type *mdata, int enable);
|
||||
void mdss_mdp_set_clk_rate(unsigned long min_clk_rate, bool locked);
|
||||
|
|
|
@ -6291,6 +6291,13 @@ int mdss_mdp_input_event_handler(struct msm_fb_data_type *mfd)
|
|||
return rc;
|
||||
}
|
||||
|
||||
void mdss_mdp_footswitch_ctrl_handler(bool on)
|
||||
{
|
||||
struct mdss_data_type *mdata = mdss_mdp_get_mdata();
|
||||
|
||||
mdss_mdp_footswitch_ctrl(mdata, on);
|
||||
}
|
||||
|
||||
int mdss_mdp_overlay_init(struct msm_fb_data_type *mfd)
|
||||
{
|
||||
struct device *dev = mfd->fbi->dev;
|
||||
|
@ -6333,6 +6340,14 @@ int mdss_mdp_overlay_init(struct msm_fb_data_type *mfd)
|
|||
mdp5_interface->configure_panel = mdss_mdp_update_panel_info;
|
||||
mdp5_interface->input_event_handler = mdss_mdp_input_event_handler;
|
||||
|
||||
/*
|
||||
* Register footswitch control only for primary fb pm
|
||||
* suspend/resume calls.
|
||||
*/
|
||||
if (mfd->panel_info->is_prim_panel)
|
||||
mdp5_interface->footswitch_ctrl =
|
||||
mdss_mdp_footswitch_ctrl_handler;
|
||||
|
||||
if (mfd->panel_info->type == WRITEBACK_PANEL) {
|
||||
mdp5_interface->atomic_validate =
|
||||
mdss_mdp_layer_atomic_validate_wfd;
|
||||
|
|
Loading…
Add table
Reference in a new issue