Loading arch/arm64/boot/dts/qcom/dsi-panel-390p-auo-cmd.dtsi +1 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ qcom,mdss-dsi-underflow-color = <0xff>; qcom,mdss-dsi-border-color = <0>; qcom,mdss-tear-check-frame-rate = <4500>; qcom,mdss-dsi-idle-fps = <10>; qcom,mdss-dsi-on-command = [ 15 01 00 00 00 00 02 fe 01 15 01 00 00 00 00 02 0a f0 Loading arch/arm64/boot/dts/qcom/msm8909-mdss.dtsi +15 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,21 @@ clock-names = "iface_clk", "bus_clk", "core_clk_src", "core_clk", "vsync_clk"; qcom,regs-dump-mdp = <0x0300 0x0358>, <0x10000 0x101E0>, <0x20004 0x0020044>, <0x90000 0x90074>; qcom,regs-dump-names-mdp = "MDP_SYNC", "PPP","PPP_FETCH", "DMA_P"; qcom,regs-dump-vbif = <0x0004 0x0010>, <0x0194 0x01b0>, <0x0200 0x020c>; qcom,regs-dump-names-vbif = "VBIF_CLK", "VBIF_ERR","VBIF_XIN_HALT"; mdss_fb0: qcom,mdss_fb_primary { cell-index = <0>; compatible = "qcom,mdss-fb"; Loading drivers/video/fbdev/msm/mdp3.c +25 −3 Original line number Diff line number Diff line Loading @@ -1812,7 +1812,8 @@ static int mdp3_continuous_splash_on(struct mdss_panel_data *pdata) pr_err("invalid bus handle %d\n", bus_handle->handle); return -EINVAL; } mdp3_calc_dma_res(panel_info, &mdp_clk_rate, &ab, &ib, panel_info->bpp); mdp3_calc_dma_res(panel_info, &mdp_clk_rate, &ab, &ib, MAX_BPP_SUPPORTED); mdp3_clk_set_rate(MDP3_CLK_VSYNC, MDP_VSYNC_CLK_RATE, MDP3_CLIENT_DMA_P); Loading Loading @@ -1968,6 +1969,8 @@ static int mdp3_debug_init(struct platform_device *pdev) int rc; struct mdss_data_type *mdata; struct mdss_debug_data *mdd; struct mdss_debug_base *mdp_dbg_blk = NULL; struct mdss_debug_base *vbif_dbg_blk = NULL; mdata = devm_kzalloc(&pdev->dev, sizeof(*mdata), GFP_KERNEL); if (!mdata) Loading Loading @@ -1996,8 +1999,27 @@ static int mdp3_debug_init(struct platform_device *pdev) debugfs_create_file("stat", 0644, mdd->root, mdp3_res, &mdp3_debug_dump_stats_fops); rc = mdss_debug_register_base(NULL, mdp3_res->mdp_base, mdp3_res->mdp_reg_size, NULL); /* MDP Debug base registration */ rc = mdss_debug_register_base("mdp", mdp3_res->mdp_base, mdp3_res->mdp_reg_size, &mdp_dbg_blk); if (rc) return rc; mdss_debug_register_dump_range(pdev, mdp_dbg_blk, "qcom,regs-dump-mdp", "qcom,regs-dump-names-mdp", "qcom,regs-dump-xin-id-mdp"); /* VBIF Debug base registration */ if (mdp3_res->vbif_base) { rc = mdss_debug_register_base("vbif", mdp3_res->vbif_base, mdp3_res->vbif_reg_size, &vbif_dbg_blk); if (rc) return rc; mdss_debug_register_dump_range(pdev, vbif_dbg_blk, "qcom,regs-dump-vbif", "qcom,regs-dump-names-vbif", "qcom,regs-dump-xin-id-vbif"); } return rc; } Loading drivers/video/fbdev/msm/mdp3_ctrl.c +51 −34 Original line number Diff line number Diff line Loading @@ -32,8 +32,6 @@ #include "mdss_spi_panel.h" #include "mdss_sync.h" #define VSYNC_EXPIRE_TICK 4 static void mdp3_ctrl_pan_display(struct msm_fb_data_type *mfd); static int mdp3_overlay_unset(struct msm_fb_data_type *mfd, int ndx); static int mdp3_histogram_stop(struct mdp3_session_data *session, Loading Loading @@ -188,7 +186,8 @@ static void mdp3_dispatch_clk_off(struct work_struct *work) return; mutex_lock(&session->lock); MDSS_XLOG(0x111); MDSS_XLOG(0x111, atomic_read(&session->vsync_countdown), session->dma->vsync_period); if (session->vsync_enabled || atomic_read(&session->vsync_countdown) > 0) { mutex_unlock(&session->lock); Loading @@ -206,14 +205,14 @@ static void mdp3_dispatch_clk_off(struct work_struct *work) if (session->intf->active) { retry_dma_done: rc = wait_for_completion_timeout(&session->dma_completion, WAIT_DMA_TIMEOUT); MDSS_XLOG(0x222); dma_timeout_value(session->dma)); if (rc <= 0) { struct mdss_panel_data *panel; panel = session->panel; pr_debug("cmd kickoff timed out (%d)\n", rc); dmap_busy = session->dma->busy(); MDSS_XLOG(0x222, dmap_busy); if (dmap_busy) { if (--retry_count) { pr_err("dmap is busy, retry %d\n", Loading @@ -222,7 +221,7 @@ static void mdp3_dispatch_clk_off(struct work_struct *work) goto retry_dma_done; } pr_err("dmap is still busy, bug_on\n"); WARN_ON(1); BUG_ON(1); } else { pr_debug("dmap is not busy, continue\n"); } Loading Loading @@ -303,17 +302,22 @@ void vsync_count_down(void *arg) struct mdp3_session_data *session = (struct mdp3_session_data *)arg; /* We are counting down to turn off clocks */ if (atomic_read(&session->vsync_countdown) > 0) if (atomic_read(&session->vsync_countdown) > 0) { atomic_dec(&session->vsync_countdown); MDSS_XLOG(atomic_read(&session->vsync_countdown), session->dma->vsync_period); if (atomic_read(&session->vsync_countdown) == 0) schedule_work(&session->clk_off_work); } } void mdp3_ctrl_reset_countdown(struct mdp3_session_data *session, struct msm_fb_data_type *mfd) { if (mdp3_ctrl_get_intf_type(mfd) == MDP3_DMA_OUTPUT_SEL_DSI_CMD) atomic_set(&session->vsync_countdown, VSYNC_EXPIRE_TICK); MDSS_XLOG(atomic_read(&session->vsync_countdown)); } static int mdp3_ctrl_vsync_enable(struct msm_fb_data_type *mfd, int enable) Loading Loading @@ -378,7 +382,7 @@ static int mdp3_ctrl_vsync_enable(struct msm_fb_data_type *mfd, int enable) */ if (mod_vsync_timer && (intf_type != MDP3_DMA_OUTPUT_SEL_SPI_CMD)) { mod_timer(&mdp3_session->vsync_timer, jiffies + msecs_to_jiffies(mdp3_session->vsync_period)); jiffies + msecs_to_jiffies(mdp3_session->dma->vsync_period)); } else if (enable && !mdp3_session->clk_on) { mdp3_ctrl_reset_countdown(mdp3_session, mfd); mdp3_ctrl_clk_enable(mfd, 1); Loading @@ -398,7 +402,7 @@ void mdp3_vsync_timer_func(unsigned long arg) pr_debug("mdp3_vsync_timer_func trigger\n"); vsync_notify_handler(session); mod_timer(&session->vsync_timer, jiffies + msecs_to_jiffies(session->vsync_period)); jiffies + msecs_to_jiffies(session->dma->vsync_period)); } } Loading Loading @@ -905,6 +909,7 @@ static int mdp3_ctrl_on(struct msm_fb_data_type *mfd) int rc = 0; struct mdp3_session_data *mdp3_session; struct mdss_panel_data *panel; u32 framerate = 0; pr_debug("mdp3_ctrl_on\n"); mdp3_session = (struct mdp3_session_data *)mfd->mdp.private1; Loading Loading @@ -1027,7 +1032,7 @@ static int mdp3_ctrl_on(struct msm_fb_data_type *mfd) mdp3_session->status = 1; mdp3_ctrl_pp_resume(mfd); MDSS_XLOG(XLOG_FUNC_EXIT, __LINE__, mfd->panel_power_state); on_error: if (rc || (mdp3_res->idle_pc_enabled && (mfd->panel_info->type == MIPI_CMD_PANEL))) { Loading @@ -1038,6 +1043,12 @@ static int mdp3_ctrl_on(struct msm_fb_data_type *mfd) pm_runtime_put(&mdp3_res->pdev->dev); } end: framerate = mdss_panel_get_framerate(mfd->panel_info, FPS_RESOLUTION_HZ); if (framerate != 0) mdp3_session->dma->vsync_period = DIV_ROUND_UP(1000, framerate); MDSS_XLOG(XLOG_FUNC_EXIT, __LINE__, mfd->panel_power_state, framerate); mutex_unlock(&mdp3_session->lock); return rc; } Loading @@ -1054,6 +1065,7 @@ static int mdp3_ctrl_off(struct msm_fb_data_type *mfd) bool intf_stopped = true; struct mdp3_session_data *mdp3_session; struct mdss_panel_data *panel; u32 framerate = 0; pr_debug("mdp3_ctrl_off\n"); mdp3_session = (struct mdp3_session_data *)mfd->mdp.private1; Loading Loading @@ -1242,7 +1254,13 @@ static int mdp3_ctrl_off(struct msm_fb_data_type *mfd) mdp3_session->overlay.id = MSMFB_NEW_REQUEST; mdp3_bufq_deinit(&mdp3_session->bufq_in, client); } MDSS_XLOG(XLOG_FUNC_EXIT, __LINE__); framerate = mdss_panel_get_framerate(mfd->panel_info, FPS_RESOLUTION_HZ); if (framerate != 0) mdp3_session->dma->vsync_period = DIV_ROUND_UP(1000, framerate); MDSS_XLOG(XLOG_FUNC_EXIT, __LINE__, framerate); mutex_unlock(&mdp3_session->lock); /* Release the last reference to the runtime device */ pm_runtime_put(&mdp3_res->pdev->dev); Loading Loading @@ -1511,6 +1529,7 @@ static int mdp3_ctrl_display_commit_kickoff(struct msm_fb_data_type *mfd, struct mdss_panel_data *panel; int frame_rate = DEFAULT_FRAME_RATE; int stride; int prev_bl; if (!mfd || !mfd->mdp.private1) return -EINVAL; Loading @@ -1528,22 +1547,6 @@ static int mdp3_ctrl_display_commit_kickoff(struct msm_fb_data_type *mfd, return -EPERM; } if (panel_info->partial_update_enabled && is_roi_valid(mdp3_session->dma->source_config, cmt_data->l_roi) && update_roi(mdp3_session->dma->roi, cmt_data->l_roi)) { mdp3_session->dma->roi.x = cmt_data->l_roi.x; mdp3_session->dma->roi.y = cmt_data->l_roi.y; mdp3_session->dma->roi.w = cmt_data->l_roi.w; mdp3_session->dma->roi.h = cmt_data->l_roi.h; mdp3_session->dma->update_src_cfg = true; pr_debug("%s: ROI: x=%d y=%d w=%d h=%d\n", __func__, mdp3_session->dma->roi.x, mdp3_session->dma->roi.y, mdp3_session->dma->roi.w, mdp3_session->dma->roi.h); } panel = mdp3_session->panel; mutex_lock(&mdp3_res->fs_idle_pc_lock); if (mdp3_session->in_splash_screen || Loading @@ -1556,6 +1559,9 @@ static int mdp3_ctrl_display_commit_kickoff(struct msm_fb_data_type *mfd, mutex_unlock(&mdp3_res->fs_idle_pc_lock); return -EINVAL; } if ((mdp3_session->dma->roi.x || mdp3_session->dma->roi.y) && panel_info->partial_update_enabled) mdp3_session->dma->update_src_cfg = true; } mutex_unlock(&mdp3_res->fs_idle_pc_lock); Loading @@ -1567,7 +1573,8 @@ static int mdp3_ctrl_display_commit_kickoff(struct msm_fb_data_type *mfd, mutex_unlock(&mdp3_session->lock); return -EPERM; } MDSS_XLOG(0x111); MDSS_XLOG(0x111, mdp3_session->dma->vsync_period); mdp3_ctrl_notify(mdp3_session, MDP_NOTIFY_FRAME_BEGIN); data = mdp3_bufq_pop(&mdp3_session->bufq_in); if (data) { Loading Loading @@ -1637,9 +1644,15 @@ static int mdp3_ctrl_display_commit_kickoff(struct msm_fb_data_type *mfd, } mdp3_session->vsync_before_commit = 0; prev_bl = mfd->bl_level; if (!splash_done || mdp3_session->esd_recovery == true) { if (panel && panel->set_backlight) panel->set_backlight(panel, panel->panel_info.bl_max); if (panel && panel->set_backlight) { if (mdp3_session->esd_recovery == true && prev_bl > 0) panel->set_backlight(panel, prev_bl); else panel->set_backlight(panel, panel->panel_info.bl_max); } splash_done = true; mdp3_session->esd_recovery = false; } Loading Loading @@ -2894,7 +2907,7 @@ int mdp3_wait_for_dma_done(struct mdp3_session_data *session) if (session->dma_active) { rc = wait_for_completion_timeout(&session->dma_completion, KOFF_TIMEOUT); dma_timeout_value(session->dma)); if (rc > 0) { session->dma_active = 0; rc = 0; Loading Loading @@ -3071,7 +3084,11 @@ int mdp3_ctrl_init(struct msm_fb_data_type *mfd) init_timer(&mdp3_session->vsync_timer); mdp3_session->vsync_timer.function = mdp3_vsync_timer_func; mdp3_session->vsync_timer.data = (u32)mdp3_session; mdp3_session->vsync_period = 1000 / frame_rate; if (frame_rate != 0) mdp3_session->dma->vsync_period = DIV_ROUND_UP(1000, frame_rate); mfd->mdp.private1 = mdp3_session; init_completion(&mdp3_session->dma_completion); if (intf_type != MDP3_DMA_OUTPUT_SEL_DSI_VIDEO || Loading drivers/video/fbdev/msm/mdp3_ctrl.h +0 −1 Original line number Diff line number Diff line Loading @@ -45,7 +45,6 @@ struct mdp3_session_data { struct msm_fb_data_type *mfd; ktime_t vsync_time; struct timer_list vsync_timer; int vsync_period; struct kernfs_node *vsync_event_sd; struct kernfs_node *bl_event_sd; struct mdp_overlay overlay; Loading Loading
arch/arm64/boot/dts/qcom/dsi-panel-390p-auo-cmd.dtsi +1 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ qcom,mdss-dsi-underflow-color = <0xff>; qcom,mdss-dsi-border-color = <0>; qcom,mdss-tear-check-frame-rate = <4500>; qcom,mdss-dsi-idle-fps = <10>; qcom,mdss-dsi-on-command = [ 15 01 00 00 00 00 02 fe 01 15 01 00 00 00 00 02 0a f0 Loading
arch/arm64/boot/dts/qcom/msm8909-mdss.dtsi +15 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,21 @@ clock-names = "iface_clk", "bus_clk", "core_clk_src", "core_clk", "vsync_clk"; qcom,regs-dump-mdp = <0x0300 0x0358>, <0x10000 0x101E0>, <0x20004 0x0020044>, <0x90000 0x90074>; qcom,regs-dump-names-mdp = "MDP_SYNC", "PPP","PPP_FETCH", "DMA_P"; qcom,regs-dump-vbif = <0x0004 0x0010>, <0x0194 0x01b0>, <0x0200 0x020c>; qcom,regs-dump-names-vbif = "VBIF_CLK", "VBIF_ERR","VBIF_XIN_HALT"; mdss_fb0: qcom,mdss_fb_primary { cell-index = <0>; compatible = "qcom,mdss-fb"; Loading
drivers/video/fbdev/msm/mdp3.c +25 −3 Original line number Diff line number Diff line Loading @@ -1812,7 +1812,8 @@ static int mdp3_continuous_splash_on(struct mdss_panel_data *pdata) pr_err("invalid bus handle %d\n", bus_handle->handle); return -EINVAL; } mdp3_calc_dma_res(panel_info, &mdp_clk_rate, &ab, &ib, panel_info->bpp); mdp3_calc_dma_res(panel_info, &mdp_clk_rate, &ab, &ib, MAX_BPP_SUPPORTED); mdp3_clk_set_rate(MDP3_CLK_VSYNC, MDP_VSYNC_CLK_RATE, MDP3_CLIENT_DMA_P); Loading Loading @@ -1968,6 +1969,8 @@ static int mdp3_debug_init(struct platform_device *pdev) int rc; struct mdss_data_type *mdata; struct mdss_debug_data *mdd; struct mdss_debug_base *mdp_dbg_blk = NULL; struct mdss_debug_base *vbif_dbg_blk = NULL; mdata = devm_kzalloc(&pdev->dev, sizeof(*mdata), GFP_KERNEL); if (!mdata) Loading Loading @@ -1996,8 +1999,27 @@ static int mdp3_debug_init(struct platform_device *pdev) debugfs_create_file("stat", 0644, mdd->root, mdp3_res, &mdp3_debug_dump_stats_fops); rc = mdss_debug_register_base(NULL, mdp3_res->mdp_base, mdp3_res->mdp_reg_size, NULL); /* MDP Debug base registration */ rc = mdss_debug_register_base("mdp", mdp3_res->mdp_base, mdp3_res->mdp_reg_size, &mdp_dbg_blk); if (rc) return rc; mdss_debug_register_dump_range(pdev, mdp_dbg_blk, "qcom,regs-dump-mdp", "qcom,regs-dump-names-mdp", "qcom,regs-dump-xin-id-mdp"); /* VBIF Debug base registration */ if (mdp3_res->vbif_base) { rc = mdss_debug_register_base("vbif", mdp3_res->vbif_base, mdp3_res->vbif_reg_size, &vbif_dbg_blk); if (rc) return rc; mdss_debug_register_dump_range(pdev, vbif_dbg_blk, "qcom,regs-dump-vbif", "qcom,regs-dump-names-vbif", "qcom,regs-dump-xin-id-vbif"); } return rc; } Loading
drivers/video/fbdev/msm/mdp3_ctrl.c +51 −34 Original line number Diff line number Diff line Loading @@ -32,8 +32,6 @@ #include "mdss_spi_panel.h" #include "mdss_sync.h" #define VSYNC_EXPIRE_TICK 4 static void mdp3_ctrl_pan_display(struct msm_fb_data_type *mfd); static int mdp3_overlay_unset(struct msm_fb_data_type *mfd, int ndx); static int mdp3_histogram_stop(struct mdp3_session_data *session, Loading Loading @@ -188,7 +186,8 @@ static void mdp3_dispatch_clk_off(struct work_struct *work) return; mutex_lock(&session->lock); MDSS_XLOG(0x111); MDSS_XLOG(0x111, atomic_read(&session->vsync_countdown), session->dma->vsync_period); if (session->vsync_enabled || atomic_read(&session->vsync_countdown) > 0) { mutex_unlock(&session->lock); Loading @@ -206,14 +205,14 @@ static void mdp3_dispatch_clk_off(struct work_struct *work) if (session->intf->active) { retry_dma_done: rc = wait_for_completion_timeout(&session->dma_completion, WAIT_DMA_TIMEOUT); MDSS_XLOG(0x222); dma_timeout_value(session->dma)); if (rc <= 0) { struct mdss_panel_data *panel; panel = session->panel; pr_debug("cmd kickoff timed out (%d)\n", rc); dmap_busy = session->dma->busy(); MDSS_XLOG(0x222, dmap_busy); if (dmap_busy) { if (--retry_count) { pr_err("dmap is busy, retry %d\n", Loading @@ -222,7 +221,7 @@ static void mdp3_dispatch_clk_off(struct work_struct *work) goto retry_dma_done; } pr_err("dmap is still busy, bug_on\n"); WARN_ON(1); BUG_ON(1); } else { pr_debug("dmap is not busy, continue\n"); } Loading Loading @@ -303,17 +302,22 @@ void vsync_count_down(void *arg) struct mdp3_session_data *session = (struct mdp3_session_data *)arg; /* We are counting down to turn off clocks */ if (atomic_read(&session->vsync_countdown) > 0) if (atomic_read(&session->vsync_countdown) > 0) { atomic_dec(&session->vsync_countdown); MDSS_XLOG(atomic_read(&session->vsync_countdown), session->dma->vsync_period); if (atomic_read(&session->vsync_countdown) == 0) schedule_work(&session->clk_off_work); } } void mdp3_ctrl_reset_countdown(struct mdp3_session_data *session, struct msm_fb_data_type *mfd) { if (mdp3_ctrl_get_intf_type(mfd) == MDP3_DMA_OUTPUT_SEL_DSI_CMD) atomic_set(&session->vsync_countdown, VSYNC_EXPIRE_TICK); MDSS_XLOG(atomic_read(&session->vsync_countdown)); } static int mdp3_ctrl_vsync_enable(struct msm_fb_data_type *mfd, int enable) Loading Loading @@ -378,7 +382,7 @@ static int mdp3_ctrl_vsync_enable(struct msm_fb_data_type *mfd, int enable) */ if (mod_vsync_timer && (intf_type != MDP3_DMA_OUTPUT_SEL_SPI_CMD)) { mod_timer(&mdp3_session->vsync_timer, jiffies + msecs_to_jiffies(mdp3_session->vsync_period)); jiffies + msecs_to_jiffies(mdp3_session->dma->vsync_period)); } else if (enable && !mdp3_session->clk_on) { mdp3_ctrl_reset_countdown(mdp3_session, mfd); mdp3_ctrl_clk_enable(mfd, 1); Loading @@ -398,7 +402,7 @@ void mdp3_vsync_timer_func(unsigned long arg) pr_debug("mdp3_vsync_timer_func trigger\n"); vsync_notify_handler(session); mod_timer(&session->vsync_timer, jiffies + msecs_to_jiffies(session->vsync_period)); jiffies + msecs_to_jiffies(session->dma->vsync_period)); } } Loading Loading @@ -905,6 +909,7 @@ static int mdp3_ctrl_on(struct msm_fb_data_type *mfd) int rc = 0; struct mdp3_session_data *mdp3_session; struct mdss_panel_data *panel; u32 framerate = 0; pr_debug("mdp3_ctrl_on\n"); mdp3_session = (struct mdp3_session_data *)mfd->mdp.private1; Loading Loading @@ -1027,7 +1032,7 @@ static int mdp3_ctrl_on(struct msm_fb_data_type *mfd) mdp3_session->status = 1; mdp3_ctrl_pp_resume(mfd); MDSS_XLOG(XLOG_FUNC_EXIT, __LINE__, mfd->panel_power_state); on_error: if (rc || (mdp3_res->idle_pc_enabled && (mfd->panel_info->type == MIPI_CMD_PANEL))) { Loading @@ -1038,6 +1043,12 @@ static int mdp3_ctrl_on(struct msm_fb_data_type *mfd) pm_runtime_put(&mdp3_res->pdev->dev); } end: framerate = mdss_panel_get_framerate(mfd->panel_info, FPS_RESOLUTION_HZ); if (framerate != 0) mdp3_session->dma->vsync_period = DIV_ROUND_UP(1000, framerate); MDSS_XLOG(XLOG_FUNC_EXIT, __LINE__, mfd->panel_power_state, framerate); mutex_unlock(&mdp3_session->lock); return rc; } Loading @@ -1054,6 +1065,7 @@ static int mdp3_ctrl_off(struct msm_fb_data_type *mfd) bool intf_stopped = true; struct mdp3_session_data *mdp3_session; struct mdss_panel_data *panel; u32 framerate = 0; pr_debug("mdp3_ctrl_off\n"); mdp3_session = (struct mdp3_session_data *)mfd->mdp.private1; Loading Loading @@ -1242,7 +1254,13 @@ static int mdp3_ctrl_off(struct msm_fb_data_type *mfd) mdp3_session->overlay.id = MSMFB_NEW_REQUEST; mdp3_bufq_deinit(&mdp3_session->bufq_in, client); } MDSS_XLOG(XLOG_FUNC_EXIT, __LINE__); framerate = mdss_panel_get_framerate(mfd->panel_info, FPS_RESOLUTION_HZ); if (framerate != 0) mdp3_session->dma->vsync_period = DIV_ROUND_UP(1000, framerate); MDSS_XLOG(XLOG_FUNC_EXIT, __LINE__, framerate); mutex_unlock(&mdp3_session->lock); /* Release the last reference to the runtime device */ pm_runtime_put(&mdp3_res->pdev->dev); Loading Loading @@ -1511,6 +1529,7 @@ static int mdp3_ctrl_display_commit_kickoff(struct msm_fb_data_type *mfd, struct mdss_panel_data *panel; int frame_rate = DEFAULT_FRAME_RATE; int stride; int prev_bl; if (!mfd || !mfd->mdp.private1) return -EINVAL; Loading @@ -1528,22 +1547,6 @@ static int mdp3_ctrl_display_commit_kickoff(struct msm_fb_data_type *mfd, return -EPERM; } if (panel_info->partial_update_enabled && is_roi_valid(mdp3_session->dma->source_config, cmt_data->l_roi) && update_roi(mdp3_session->dma->roi, cmt_data->l_roi)) { mdp3_session->dma->roi.x = cmt_data->l_roi.x; mdp3_session->dma->roi.y = cmt_data->l_roi.y; mdp3_session->dma->roi.w = cmt_data->l_roi.w; mdp3_session->dma->roi.h = cmt_data->l_roi.h; mdp3_session->dma->update_src_cfg = true; pr_debug("%s: ROI: x=%d y=%d w=%d h=%d\n", __func__, mdp3_session->dma->roi.x, mdp3_session->dma->roi.y, mdp3_session->dma->roi.w, mdp3_session->dma->roi.h); } panel = mdp3_session->panel; mutex_lock(&mdp3_res->fs_idle_pc_lock); if (mdp3_session->in_splash_screen || Loading @@ -1556,6 +1559,9 @@ static int mdp3_ctrl_display_commit_kickoff(struct msm_fb_data_type *mfd, mutex_unlock(&mdp3_res->fs_idle_pc_lock); return -EINVAL; } if ((mdp3_session->dma->roi.x || mdp3_session->dma->roi.y) && panel_info->partial_update_enabled) mdp3_session->dma->update_src_cfg = true; } mutex_unlock(&mdp3_res->fs_idle_pc_lock); Loading @@ -1567,7 +1573,8 @@ static int mdp3_ctrl_display_commit_kickoff(struct msm_fb_data_type *mfd, mutex_unlock(&mdp3_session->lock); return -EPERM; } MDSS_XLOG(0x111); MDSS_XLOG(0x111, mdp3_session->dma->vsync_period); mdp3_ctrl_notify(mdp3_session, MDP_NOTIFY_FRAME_BEGIN); data = mdp3_bufq_pop(&mdp3_session->bufq_in); if (data) { Loading Loading @@ -1637,9 +1644,15 @@ static int mdp3_ctrl_display_commit_kickoff(struct msm_fb_data_type *mfd, } mdp3_session->vsync_before_commit = 0; prev_bl = mfd->bl_level; if (!splash_done || mdp3_session->esd_recovery == true) { if (panel && panel->set_backlight) panel->set_backlight(panel, panel->panel_info.bl_max); if (panel && panel->set_backlight) { if (mdp3_session->esd_recovery == true && prev_bl > 0) panel->set_backlight(panel, prev_bl); else panel->set_backlight(panel, panel->panel_info.bl_max); } splash_done = true; mdp3_session->esd_recovery = false; } Loading Loading @@ -2894,7 +2907,7 @@ int mdp3_wait_for_dma_done(struct mdp3_session_data *session) if (session->dma_active) { rc = wait_for_completion_timeout(&session->dma_completion, KOFF_TIMEOUT); dma_timeout_value(session->dma)); if (rc > 0) { session->dma_active = 0; rc = 0; Loading Loading @@ -3071,7 +3084,11 @@ int mdp3_ctrl_init(struct msm_fb_data_type *mfd) init_timer(&mdp3_session->vsync_timer); mdp3_session->vsync_timer.function = mdp3_vsync_timer_func; mdp3_session->vsync_timer.data = (u32)mdp3_session; mdp3_session->vsync_period = 1000 / frame_rate; if (frame_rate != 0) mdp3_session->dma->vsync_period = DIV_ROUND_UP(1000, frame_rate); mfd->mdp.private1 = mdp3_session; init_completion(&mdp3_session->dma_completion); if (intf_type != MDP3_DMA_OUTPUT_SEL_DSI_VIDEO || Loading
drivers/video/fbdev/msm/mdp3_ctrl.h +0 −1 Original line number Diff line number Diff line Loading @@ -45,7 +45,6 @@ struct mdp3_session_data { struct msm_fb_data_type *mfd; ktime_t vsync_time; struct timer_list vsync_timer; int vsync_period; struct kernfs_node *vsync_event_sd; struct kernfs_node *bl_event_sd; struct mdp_overlay overlay; Loading