Loading drivers/video/msm/mdss/mdss_dsi.c +13 −1 Original line number Diff line number Diff line Loading @@ -1222,6 +1222,15 @@ static int mdss_dsi_set_stream_size(struct mdss_panel_data *pdata) return 0; } int mdss_dsi_register_recovery_handler(struct mdss_dsi_ctrl_pdata *ctrl, struct mdss_panel_recovery *recovery) { mutex_lock(&ctrl->mutex); ctrl->recovery = recovery; mutex_unlock(&ctrl->mutex); return 0; } static int mdss_dsi_event_handler(struct mdss_panel_data *pdata, int event, void *arg) { Loading Loading @@ -1271,7 +1280,6 @@ static int mdss_dsi_event_handler(struct mdss_panel_data *pdata, mdss_dsi_clk_req(ctrl_pdata, (int) (unsigned long) arg); break; case MDSS_EVENT_DSI_CMDLIST_KOFF: ctrl_pdata->recovery = (struct mdss_panel_recovery *)arg; mdss_dsi_cmdlist_commit(ctrl_pdata, 1); break; case MDSS_EVENT_PANEL_UPDATE_FPS: Loading @@ -1298,6 +1306,10 @@ static int mdss_dsi_event_handler(struct mdss_panel_data *pdata, rc = mdss_dsi_update_panel_config(ctrl_pdata, (int)(unsigned long) arg); break; case MDSS_EVENT_REGISTER_RECOVERY_HANDLER: rc = mdss_dsi_register_recovery_handler(ctrl_pdata, (struct mdss_panel_recovery *)arg); break; default: pr_debug("%s: unhandled event=%d\n", __func__, event); break; Loading drivers/video/msm/mdss/mdss_dsi.h +3 −0 Original line number Diff line number Diff line Loading @@ -417,6 +417,9 @@ int mdss_panel_get_dst_fmt(u32 bpp, char mipi_mode, u32 pixel_packing, char *dst_format); void mdss_dsi_20nm_phy_init(struct mdss_panel_data *pdata); int mdss_dsi_register_recovery_handler(struct mdss_dsi_ctrl_pdata *ctrl, struct mdss_panel_recovery *recovery); static inline const char *__mdss_dsi_pm_name(enum dsi_pm_type module) { switch (module) { Loading drivers/video/msm/mdss/mdss_dsi_host.c +2 −0 Original line number Diff line number Diff line Loading @@ -1428,12 +1428,14 @@ static int dsi_event_thread(void *data) mdss_dsi_pll_relock(ctrl); if (todo & DSI_EV_MDP_FIFO_UNDERFLOW) { mutex_lock(&ctrl->mutex); if (ctrl->recovery) { mdss_dsi_clk_ctrl(ctrl, DSI_ALL_CLKS, 1); mdss_dsi_sw_reset_restore(ctrl); ctrl->recovery->fxn(ctrl->recovery->data); mdss_dsi_clk_ctrl(ctrl, DSI_ALL_CLKS, 0); } mutex_unlock(&ctrl->mutex); } if (todo & DSI_EV_DSI_FIFO_EMPTY) Loading drivers/video/msm/mdss/mdss_mdp_intf_cmd.c +10 −2 Original line number Diff line number Diff line Loading @@ -706,6 +706,10 @@ int mdss_mdp_cmd_kickoff(struct mdss_mdp_ctl *ctl, void *arg) rc = mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_PANEL_ON, NULL); WARN(rc, "intf %d panel on error (%d)\n", ctl->intf_num, rc); mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_REGISTER_RECOVERY_HANDLER, (void *)&ctx->recovery); } MDSS_XLOG(ctl->num, ctl->roi.x, ctl->roi.y, ctl->roi.w, Loading @@ -729,8 +733,8 @@ int mdss_mdp_cmd_kickoff(struct mdss_mdp_ctl *ctl, void *arg) /* * tx dcs command if had any */ mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_DSI_CMDLIST_KOFF, (void *)&ctx->recovery); mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_DSI_CMDLIST_KOFF, NULL); mdss_mdp_cmd_set_stream_size(ctl); mdss_mdp_cmd_set_sync_ctx(ctl, sctl); Loading Loading @@ -811,6 +815,10 @@ int mdss_mdp_cmd_stop(struct mdss_mdp_ctl *ctl) if (cancel_delayed_work_sync(&ctx->pc_work)) pr_debug("deleted pending power collapse work\n"); mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_REGISTER_RECOVERY_HANDLER, NULL); ctx->panel_on = 0; mdss_mdp_cmd_clk_off(ctx); Loading drivers/video/msm/mdss/mdss_panel.h +1 −0 Original line number Diff line number Diff line Loading @@ -160,6 +160,7 @@ enum mdss_intf_events { MDSS_EVENT_ENABLE_PARTIAL_ROI, MDSS_EVENT_DSI_STREAM_SIZE, MDSS_EVENT_DSI_DYNAMIC_SWITCH, MDSS_EVENT_REGISTER_RECOVERY_HANDLER, }; struct lcd_panel_info { Loading Loading
drivers/video/msm/mdss/mdss_dsi.c +13 −1 Original line number Diff line number Diff line Loading @@ -1222,6 +1222,15 @@ static int mdss_dsi_set_stream_size(struct mdss_panel_data *pdata) return 0; } int mdss_dsi_register_recovery_handler(struct mdss_dsi_ctrl_pdata *ctrl, struct mdss_panel_recovery *recovery) { mutex_lock(&ctrl->mutex); ctrl->recovery = recovery; mutex_unlock(&ctrl->mutex); return 0; } static int mdss_dsi_event_handler(struct mdss_panel_data *pdata, int event, void *arg) { Loading Loading @@ -1271,7 +1280,6 @@ static int mdss_dsi_event_handler(struct mdss_panel_data *pdata, mdss_dsi_clk_req(ctrl_pdata, (int) (unsigned long) arg); break; case MDSS_EVENT_DSI_CMDLIST_KOFF: ctrl_pdata->recovery = (struct mdss_panel_recovery *)arg; mdss_dsi_cmdlist_commit(ctrl_pdata, 1); break; case MDSS_EVENT_PANEL_UPDATE_FPS: Loading @@ -1298,6 +1306,10 @@ static int mdss_dsi_event_handler(struct mdss_panel_data *pdata, rc = mdss_dsi_update_panel_config(ctrl_pdata, (int)(unsigned long) arg); break; case MDSS_EVENT_REGISTER_RECOVERY_HANDLER: rc = mdss_dsi_register_recovery_handler(ctrl_pdata, (struct mdss_panel_recovery *)arg); break; default: pr_debug("%s: unhandled event=%d\n", __func__, event); break; Loading
drivers/video/msm/mdss/mdss_dsi.h +3 −0 Original line number Diff line number Diff line Loading @@ -417,6 +417,9 @@ int mdss_panel_get_dst_fmt(u32 bpp, char mipi_mode, u32 pixel_packing, char *dst_format); void mdss_dsi_20nm_phy_init(struct mdss_panel_data *pdata); int mdss_dsi_register_recovery_handler(struct mdss_dsi_ctrl_pdata *ctrl, struct mdss_panel_recovery *recovery); static inline const char *__mdss_dsi_pm_name(enum dsi_pm_type module) { switch (module) { Loading
drivers/video/msm/mdss/mdss_dsi_host.c +2 −0 Original line number Diff line number Diff line Loading @@ -1428,12 +1428,14 @@ static int dsi_event_thread(void *data) mdss_dsi_pll_relock(ctrl); if (todo & DSI_EV_MDP_FIFO_UNDERFLOW) { mutex_lock(&ctrl->mutex); if (ctrl->recovery) { mdss_dsi_clk_ctrl(ctrl, DSI_ALL_CLKS, 1); mdss_dsi_sw_reset_restore(ctrl); ctrl->recovery->fxn(ctrl->recovery->data); mdss_dsi_clk_ctrl(ctrl, DSI_ALL_CLKS, 0); } mutex_unlock(&ctrl->mutex); } if (todo & DSI_EV_DSI_FIFO_EMPTY) Loading
drivers/video/msm/mdss/mdss_mdp_intf_cmd.c +10 −2 Original line number Diff line number Diff line Loading @@ -706,6 +706,10 @@ int mdss_mdp_cmd_kickoff(struct mdss_mdp_ctl *ctl, void *arg) rc = mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_PANEL_ON, NULL); WARN(rc, "intf %d panel on error (%d)\n", ctl->intf_num, rc); mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_REGISTER_RECOVERY_HANDLER, (void *)&ctx->recovery); } MDSS_XLOG(ctl->num, ctl->roi.x, ctl->roi.y, ctl->roi.w, Loading @@ -729,8 +733,8 @@ int mdss_mdp_cmd_kickoff(struct mdss_mdp_ctl *ctl, void *arg) /* * tx dcs command if had any */ mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_DSI_CMDLIST_KOFF, (void *)&ctx->recovery); mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_DSI_CMDLIST_KOFF, NULL); mdss_mdp_cmd_set_stream_size(ctl); mdss_mdp_cmd_set_sync_ctx(ctl, sctl); Loading Loading @@ -811,6 +815,10 @@ int mdss_mdp_cmd_stop(struct mdss_mdp_ctl *ctl) if (cancel_delayed_work_sync(&ctx->pc_work)) pr_debug("deleted pending power collapse work\n"); mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_REGISTER_RECOVERY_HANDLER, NULL); ctx->panel_on = 0; mdss_mdp_cmd_clk_off(ctx); Loading
drivers/video/msm/mdss/mdss_panel.h +1 −0 Original line number Diff line number Diff line Loading @@ -160,6 +160,7 @@ enum mdss_intf_events { MDSS_EVENT_ENABLE_PARTIAL_ROI, MDSS_EVENT_DSI_STREAM_SIZE, MDSS_EVENT_DSI_DYNAMIC_SWITCH, MDSS_EVENT_REGISTER_RECOVERY_HANDLER, }; struct lcd_panel_info { Loading