Loading drivers/video/fbdev/msm/mdss_fb.c +21 −1 Original line number Diff line number Diff line Loading @@ -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) Loading @@ -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 Loading drivers/video/fbdev/msm/mdss_fb.h +1 −0 Original line number Diff line number Diff line Loading @@ -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; }; Loading drivers/video/fbdev/msm/mdss_mdp.c +1 −2 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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; Loading drivers/video/fbdev/msm/mdss_mdp.h +1 −0 Original line number Diff line number Diff line Loading @@ -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); Loading drivers/video/fbdev/msm/mdss_mdp_overlay.c +15 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading
drivers/video/fbdev/msm/mdss_fb.c +21 −1 Original line number Diff line number Diff line Loading @@ -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) Loading @@ -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 Loading
drivers/video/fbdev/msm/mdss_fb.h +1 −0 Original line number Diff line number Diff line Loading @@ -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; }; Loading
drivers/video/fbdev/msm/mdss_mdp.c +1 −2 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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; Loading
drivers/video/fbdev/msm/mdss_mdp.h +1 −0 Original line number Diff line number Diff line Loading @@ -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); Loading
drivers/video/fbdev/msm/mdss_mdp_overlay.c +15 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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