Loading drivers/video/fbdev/msm/mdss_dsi.c +7 −2 Original line number Original line Diff line number Diff line Loading @@ -1576,10 +1576,12 @@ static int mdss_dsi_unblank(struct mdss_panel_data *pdata) mdss_dsi_clk_ctrl(sctrl, sctrl->dsi_clk_handle, mdss_dsi_clk_ctrl(sctrl, sctrl->dsi_clk_handle, MDSS_DSI_ALL_CLKS, MDSS_DSI_CLK_ON); MDSS_DSI_ALL_CLKS, MDSS_DSI_CLK_ON); if (mdss_dsi_is_panel_on_lp(pdata)) { if (ctrl_pdata->ctrl_state & CTRL_STATE_PANEL_LP) { pr_debug("%s: dsi_unblank with panel always on\n", __func__); pr_debug("%s: dsi_unblank with panel always on\n", __func__); if (ctrl_pdata->low_power_config) if (ctrl_pdata->low_power_config) ret = ctrl_pdata->low_power_config(pdata, false); ret = ctrl_pdata->low_power_config(pdata, false); if (!ret) ctrl_pdata->ctrl_state &= ~CTRL_STATE_PANEL_LP; goto error; goto error; } } Loading Loading @@ -1644,6 +1646,8 @@ static int mdss_dsi_blank(struct mdss_panel_data *pdata, int power_state) pr_debug("%s: low power state requested\n", __func__); pr_debug("%s: low power state requested\n", __func__); if (ctrl_pdata->low_power_config) if (ctrl_pdata->low_power_config) ret = ctrl_pdata->low_power_config(pdata, true); ret = ctrl_pdata->low_power_config(pdata, true); if (!ret) ctrl_pdata->ctrl_state |= CTRL_STATE_PANEL_LP; goto error; goto error; } } Loading Loading @@ -1686,7 +1690,8 @@ static int mdss_dsi_blank(struct mdss_panel_data *pdata, int power_state) } } ATRACE_END("dsi_panel_off"); ATRACE_END("dsi_panel_off"); } } ctrl_pdata->ctrl_state &= ~CTRL_STATE_PANEL_INIT; ctrl_pdata->ctrl_state &= ~(CTRL_STATE_PANEL_INIT | CTRL_STATE_PANEL_LP); } } error: error: Loading drivers/video/fbdev/msm/mdss_dsi.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -166,6 +166,7 @@ enum dsi_pm_type { #define CTRL_STATE_PANEL_INIT BIT(0) #define CTRL_STATE_PANEL_INIT BIT(0) #define CTRL_STATE_MDP_ACTIVE BIT(1) #define CTRL_STATE_MDP_ACTIVE BIT(1) #define CTRL_STATE_DSI_ACTIVE BIT(2) #define CTRL_STATE_DSI_ACTIVE BIT(2) #define CTRL_STATE_PANEL_LP BIT(3) #define DSI_NON_BURST_SYNCH_PULSE 0 #define DSI_NON_BURST_SYNCH_PULSE 0 #define DSI_NON_BURST_SYNCH_EVENT 1 #define DSI_NON_BURST_SYNCH_EVENT 1 Loading drivers/video/fbdev/msm/mdss_dsi_host.c +27 −6 Original line number Original line Diff line number Diff line Loading @@ -766,6 +766,8 @@ static void mdss_dsi_ctl_phy_reset(struct mdss_dsi_ctrl_pdata *ctrl, u32 event) u32 data0, data1, mask = 0, data_lane_en = 0; u32 data0, data1, mask = 0, data_lane_en = 0; struct mdss_dsi_ctrl_pdata *ctrl0, *ctrl1; struct mdss_dsi_ctrl_pdata *ctrl0, *ctrl1; u32 ln0, ln1, ln_ctrl0, ln_ctrl1, i; u32 ln0, ln1, ln_ctrl0, ln_ctrl1, i; int rc = 0; /* /* * Add 2 ms delay suggested by HW team. * Add 2 ms delay suggested by HW team. * Check clk lane stop state after every 200 us * Check clk lane stop state after every 200 us Loading @@ -787,9 +789,15 @@ static void mdss_dsi_ctl_phy_reset(struct mdss_dsi_ctrl_pdata *ctrl, u32 event) ctrl0 = mdss_dsi_get_ctrl_by_index(DSI_CTRL_0); ctrl0 = mdss_dsi_get_ctrl_by_index(DSI_CTRL_0); ctrl1 = mdss_dsi_get_ctrl_by_index(DSI_CTRL_1); ctrl1 = mdss_dsi_get_ctrl_by_index(DSI_CTRL_1); if (ctrl0->recovery) if (ctrl0->recovery) { ctrl0->recovery->fxn(ctrl0->recovery->data, rc = ctrl0->recovery->fxn(ctrl0->recovery->data, MDP_INTF_DSI_VIDEO_FIFO_OVERFLOW); MDP_INTF_DSI_VIDEO_FIFO_OVERFLOW); if (rc < 0) { pr_debug("%s: Target is in suspend/shutdown\n", __func__); return; } } /* /* * Disable PHY contention detection and receive. * Disable PHY contention detection and receive. * Configure the strength ctrl 1 register. * Configure the strength ctrl 1 register. Loading Loading @@ -879,9 +887,15 @@ static void mdss_dsi_ctl_phy_reset(struct mdss_dsi_ctrl_pdata *ctrl, u32 event) */ */ udelay(200); udelay(200); } else { } else { if (ctrl->recovery) if (ctrl->recovery) { ctrl->recovery->fxn(ctrl->recovery->data, rc = ctrl->recovery->fxn(ctrl->recovery->data, MDP_INTF_DSI_VIDEO_FIFO_OVERFLOW); MDP_INTF_DSI_VIDEO_FIFO_OVERFLOW); if (rc < 0) { pr_debug("%s: Target is in suspend/shutdown\n", __func__); return; } } /* Disable PHY contention detection and receive */ /* Disable PHY contention detection and receive */ MIPI_OUTP((ctrl->phy_io.base) + 0x0188, 0); MIPI_OUTP((ctrl->phy_io.base) + 0x0188, 0); Loading Loading @@ -2134,8 +2148,8 @@ static int mdss_dsi_cmd_dma_tx(struct mdss_dsi_ctrl_pdata *ctrl, status = reg_val & DSI_INTR_CMD_DMA_DONE; status = reg_val & DSI_INTR_CMD_DMA_DONE; if (status) { if (status) { reg_val &= DSI_INTR_MASK_ALL; reg_val &= DSI_INTR_MASK_ALL; /* clear CMD DMA isr only */ /* clear CMD DMA and BTA_DONE isr only */ reg_val |= DSI_INTR_CMD_DMA_DONE; reg_val |= (DSI_INTR_CMD_DMA_DONE | DSI_INTR_BTA_DONE); MIPI_OUTP(ctrl->ctrl_base + 0x0110, reg_val); MIPI_OUTP(ctrl->ctrl_base + 0x0110, reg_val); mdss_dsi_disable_irq_nosync(ctrl, DSI_CMD_TERM); mdss_dsi_disable_irq_nosync(ctrl, DSI_CMD_TERM); complete(&ctrl->dma_comp); complete(&ctrl->dma_comp); Loading Loading @@ -3030,6 +3044,13 @@ static bool mdss_dsi_fifo_status(struct mdss_dsi_ctrl_pdata *ctrl) pr_err("%s: status=%x\n", __func__, status); pr_err("%s: status=%x\n", __func__, status); /* * if DSI FIFO overflow is masked, * do not report overflow error */ if (MIPI_INP(base + 0x10c) & 0xf0000) status = status & 0xaaaaffff; if (status & 0x44440000) {/* DLNx_HS_FIFO_OVERFLOW */ if (status & 0x44440000) {/* DLNx_HS_FIFO_OVERFLOW */ dsi_send_events(ctrl, DSI_EV_DLNx_FIFO_OVERFLOW, 0); dsi_send_events(ctrl, DSI_EV_DLNx_FIFO_OVERFLOW, 0); /* Ignore FIFO EMPTY when overflow happens */ /* Ignore FIFO EMPTY when overflow happens */ Loading drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c +16 −10 Original line number Original line Diff line number Diff line Loading @@ -1197,7 +1197,7 @@ static int mdss_mdp_cmd_wait4readptr(struct mdss_mdp_cmd_ctx *ctx) return rc; return rc; } } static void mdss_mdp_cmd_intf_callback(void *data, int event) static int mdss_mdp_cmd_intf_callback(void *data, int event) { { struct mdss_mdp_cmd_ctx *ctx = data; struct mdss_mdp_cmd_ctx *ctx = data; struct mdss_mdp_pp_tear_check *te = NULL; struct mdss_mdp_pp_tear_check *te = NULL; Loading @@ -1206,11 +1206,11 @@ static void mdss_mdp_cmd_intf_callback(void *data, int event) if (!data) { if (!data) { pr_err("%s: invalid ctx\n", __func__); pr_err("%s: invalid ctx\n", __func__); return; return -EINVAL; } } if (!ctx->ctl) if (!ctx->ctl) return; return -EINVAL; switch (event) { switch (event) { case MDP_INTF_CALLBACK_DSI_WAIT: case MDP_INTF_CALLBACK_DSI_WAIT: Loading @@ -1222,7 +1222,7 @@ static void mdss_mdp_cmd_intf_callback(void *data, int event) * just return * just return */ */ if (ctx->intf_stopped || !is_pingpong_split(ctx->ctl->mfd)) if (ctx->intf_stopped || !is_pingpong_split(ctx->ctl->mfd)) return; return -EINVAL; atomic_inc(&ctx->rdptr_cnt); atomic_inc(&ctx->rdptr_cnt); /* enable clks and rd_ptr interrupt */ /* enable clks and rd_ptr interrupt */ Loading @@ -1231,7 +1231,7 @@ static void mdss_mdp_cmd_intf_callback(void *data, int event) mixer = mdss_mdp_mixer_get(ctx->ctl, MDSS_MDP_MIXER_MUX_LEFT); mixer = mdss_mdp_mixer_get(ctx->ctl, MDSS_MDP_MIXER_MUX_LEFT); if (!mixer) { if (!mixer) { pr_err("%s: null mixer\n", __func__); pr_err("%s: null mixer\n", __func__); return; return -EINVAL; } } /* wait for read pointer */ /* wait for read pointer */ Loading @@ -1255,6 +1255,7 @@ static void mdss_mdp_cmd_intf_callback(void *data, int event) pr_debug("%s: unhandled event=%d\n", __func__, event); pr_debug("%s: unhandled event=%d\n", __func__, event); break; break; } } return 0; } } static void mdss_mdp_cmd_lineptr_done(void *arg) static void mdss_mdp_cmd_lineptr_done(void *arg) Loading @@ -1280,7 +1281,7 @@ static void mdss_mdp_cmd_lineptr_done(void *arg) spin_unlock(&ctx->clk_lock); spin_unlock(&ctx->clk_lock); } } static void mdss_mdp_cmd_intf_recovery(void *data, int event) static int mdss_mdp_cmd_intf_recovery(void *data, int event) { { struct mdss_mdp_cmd_ctx *ctx = data; struct mdss_mdp_cmd_ctx *ctx = data; unsigned long flags; unsigned long flags; Loading @@ -1288,11 +1289,11 @@ static void mdss_mdp_cmd_intf_recovery(void *data, int event) if (!data) { if (!data) { pr_err("%s: invalid ctx\n", __func__); pr_err("%s: invalid ctx\n", __func__); return; return -EINVAL; } } if (!ctx->ctl) if (!ctx->ctl) return; return -EINVAL; /* /* * Currently, only intf_fifo_underflow is * Currently, only intf_fifo_underflow is Loading @@ -1302,7 +1303,7 @@ static void mdss_mdp_cmd_intf_recovery(void *data, int event) if (event != MDP_INTF_DSI_CMD_FIFO_UNDERFLOW) { if (event != MDP_INTF_DSI_CMD_FIFO_UNDERFLOW) { pr_warn("%s: unsupported recovery event:%d\n", pr_warn("%s: unsupported recovery event:%d\n", __func__, event); __func__, event); return; return -EPERM; } } if (atomic_read(&ctx->koff_cnt)) { if (atomic_read(&ctx->koff_cnt)) { Loading @@ -1326,6 +1327,7 @@ static void mdss_mdp_cmd_intf_recovery(void *data, int event) if (notify_frame_timeout) if (notify_frame_timeout) mdss_mdp_ctl_notify(ctx->ctl, MDP_NOTIFY_FRAME_TIMEOUT); mdss_mdp_ctl_notify(ctx->ctl, MDP_NOTIFY_FRAME_TIMEOUT); return 0; } } static void mdss_mdp_cmd_pingpong_done(void *arg) static void mdss_mdp_cmd_pingpong_done(void *arg) Loading Loading @@ -3315,7 +3317,11 @@ int mdss_mdp_cmd_stop(struct mdss_mdp_ctl *ctl, int panel_power_state) ctx->intf_stopped = 0; ctx->intf_stopped = 0; if (sctx) if (sctx) sctx->intf_stopped = 0; sctx->intf_stopped = 0; /* * Tearcheck was disabled while entering LP2 state. * Enable it back to allow updates in LP1 state. */ mdss_mdp_tearcheck_enable(ctl, true); goto end; goto end; } } } } Loading drivers/video/fbdev/msm/mdss_mdp_intf_video.c +7 −7 Original line number Original line Diff line number Diff line Loading @@ -315,7 +315,7 @@ int mdss_mdp_video_addr_setup(struct mdss_data_type *mdata, return 0; return 0; } } static void mdss_mdp_video_intf_recovery(void *data, int event) static int mdss_mdp_video_intf_recovery(void *data, int event) { { struct mdss_mdp_video_ctx *ctx; struct mdss_mdp_video_ctx *ctx; struct mdss_mdp_ctl *ctl = data; struct mdss_mdp_ctl *ctl = data; Loading @@ -327,7 +327,7 @@ static void mdss_mdp_video_intf_recovery(void *data, int event) if (!data) { if (!data) { pr_err("%s: invalid ctl\n", __func__); pr_err("%s: invalid ctl\n", __func__); return; return -EINVAL; } } /* /* Loading @@ -338,7 +338,7 @@ static void mdss_mdp_video_intf_recovery(void *data, int event) if (event != MDP_INTF_DSI_VIDEO_FIFO_OVERFLOW) { if (event != MDP_INTF_DSI_VIDEO_FIFO_OVERFLOW) { pr_warn("%s: unsupported recovery event:%d\n", pr_warn("%s: unsupported recovery event:%d\n", __func__, event); __func__, event); return; return -EPERM; } } ctx = ctl->intf_ctx[MASTER_CTX]; ctx = ctl->intf_ctx[MASTER_CTX]; Loading @@ -353,7 +353,7 @@ static void mdss_mdp_video_intf_recovery(void *data, int event) clk_rate = DIV_ROUND_UP_ULL(clk_rate, 1000); /* in kHz */ clk_rate = DIV_ROUND_UP_ULL(clk_rate, 1000); /* in kHz */ if (!clk_rate) { if (!clk_rate) { pr_err("Unable to get proper clk_rate\n"); pr_err("Unable to get proper clk_rate\n"); return; return -EINVAL; } } /* /* * calculate clk_period as pico second to maintain good * calculate clk_period as pico second to maintain good Loading @@ -363,7 +363,7 @@ static void mdss_mdp_video_intf_recovery(void *data, int event) clk_period = DIV_ROUND_UP_ULL(1000000000, clk_rate); clk_period = DIV_ROUND_UP_ULL(1000000000, clk_rate); if (!clk_period) { if (!clk_period) { pr_err("Unable to calculate clock period\n"); pr_err("Unable to calculate clock period\n"); return; return -EINVAL; } } min_ln_cnt = pinfo->lcdc.v_back_porch + pinfo->lcdc.v_pulse_width; min_ln_cnt = pinfo->lcdc.v_back_porch + pinfo->lcdc.v_pulse_width; active_lns_cnt = pinfo->yres; active_lns_cnt = pinfo->yres; Loading @@ -389,7 +389,7 @@ static void mdss_mdp_video_intf_recovery(void *data, int event) !ctx->timegen_en) { !ctx->timegen_en) { pr_warn("Target is in suspend or shutdown pending\n"); pr_warn("Target is in suspend or shutdown pending\n"); mutex_unlock(&ctl->offlock); mutex_unlock(&ctl->offlock); return; return -EPERM; } } line_cnt = mdss_mdp_video_line_count(ctl); line_cnt = mdss_mdp_video_line_count(ctl); Loading @@ -399,7 +399,7 @@ static void mdss_mdp_video_intf_recovery(void *data, int event) pr_debug("%s, Needed lines left line_cnt=%d\n", pr_debug("%s, Needed lines left line_cnt=%d\n", __func__, line_cnt); __func__, line_cnt); mutex_unlock(&ctl->offlock); mutex_unlock(&ctl->offlock); return; return 0; } else { } else { pr_warn("line count is less. line_cnt = %d\n", pr_warn("line count is less. line_cnt = %d\n", line_cnt); line_cnt); Loading Loading
drivers/video/fbdev/msm/mdss_dsi.c +7 −2 Original line number Original line Diff line number Diff line Loading @@ -1576,10 +1576,12 @@ static int mdss_dsi_unblank(struct mdss_panel_data *pdata) mdss_dsi_clk_ctrl(sctrl, sctrl->dsi_clk_handle, mdss_dsi_clk_ctrl(sctrl, sctrl->dsi_clk_handle, MDSS_DSI_ALL_CLKS, MDSS_DSI_CLK_ON); MDSS_DSI_ALL_CLKS, MDSS_DSI_CLK_ON); if (mdss_dsi_is_panel_on_lp(pdata)) { if (ctrl_pdata->ctrl_state & CTRL_STATE_PANEL_LP) { pr_debug("%s: dsi_unblank with panel always on\n", __func__); pr_debug("%s: dsi_unblank with panel always on\n", __func__); if (ctrl_pdata->low_power_config) if (ctrl_pdata->low_power_config) ret = ctrl_pdata->low_power_config(pdata, false); ret = ctrl_pdata->low_power_config(pdata, false); if (!ret) ctrl_pdata->ctrl_state &= ~CTRL_STATE_PANEL_LP; goto error; goto error; } } Loading Loading @@ -1644,6 +1646,8 @@ static int mdss_dsi_blank(struct mdss_panel_data *pdata, int power_state) pr_debug("%s: low power state requested\n", __func__); pr_debug("%s: low power state requested\n", __func__); if (ctrl_pdata->low_power_config) if (ctrl_pdata->low_power_config) ret = ctrl_pdata->low_power_config(pdata, true); ret = ctrl_pdata->low_power_config(pdata, true); if (!ret) ctrl_pdata->ctrl_state |= CTRL_STATE_PANEL_LP; goto error; goto error; } } Loading Loading @@ -1686,7 +1690,8 @@ static int mdss_dsi_blank(struct mdss_panel_data *pdata, int power_state) } } ATRACE_END("dsi_panel_off"); ATRACE_END("dsi_panel_off"); } } ctrl_pdata->ctrl_state &= ~CTRL_STATE_PANEL_INIT; ctrl_pdata->ctrl_state &= ~(CTRL_STATE_PANEL_INIT | CTRL_STATE_PANEL_LP); } } error: error: Loading
drivers/video/fbdev/msm/mdss_dsi.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -166,6 +166,7 @@ enum dsi_pm_type { #define CTRL_STATE_PANEL_INIT BIT(0) #define CTRL_STATE_PANEL_INIT BIT(0) #define CTRL_STATE_MDP_ACTIVE BIT(1) #define CTRL_STATE_MDP_ACTIVE BIT(1) #define CTRL_STATE_DSI_ACTIVE BIT(2) #define CTRL_STATE_DSI_ACTIVE BIT(2) #define CTRL_STATE_PANEL_LP BIT(3) #define DSI_NON_BURST_SYNCH_PULSE 0 #define DSI_NON_BURST_SYNCH_PULSE 0 #define DSI_NON_BURST_SYNCH_EVENT 1 #define DSI_NON_BURST_SYNCH_EVENT 1 Loading
drivers/video/fbdev/msm/mdss_dsi_host.c +27 −6 Original line number Original line Diff line number Diff line Loading @@ -766,6 +766,8 @@ static void mdss_dsi_ctl_phy_reset(struct mdss_dsi_ctrl_pdata *ctrl, u32 event) u32 data0, data1, mask = 0, data_lane_en = 0; u32 data0, data1, mask = 0, data_lane_en = 0; struct mdss_dsi_ctrl_pdata *ctrl0, *ctrl1; struct mdss_dsi_ctrl_pdata *ctrl0, *ctrl1; u32 ln0, ln1, ln_ctrl0, ln_ctrl1, i; u32 ln0, ln1, ln_ctrl0, ln_ctrl1, i; int rc = 0; /* /* * Add 2 ms delay suggested by HW team. * Add 2 ms delay suggested by HW team. * Check clk lane stop state after every 200 us * Check clk lane stop state after every 200 us Loading @@ -787,9 +789,15 @@ static void mdss_dsi_ctl_phy_reset(struct mdss_dsi_ctrl_pdata *ctrl, u32 event) ctrl0 = mdss_dsi_get_ctrl_by_index(DSI_CTRL_0); ctrl0 = mdss_dsi_get_ctrl_by_index(DSI_CTRL_0); ctrl1 = mdss_dsi_get_ctrl_by_index(DSI_CTRL_1); ctrl1 = mdss_dsi_get_ctrl_by_index(DSI_CTRL_1); if (ctrl0->recovery) if (ctrl0->recovery) { ctrl0->recovery->fxn(ctrl0->recovery->data, rc = ctrl0->recovery->fxn(ctrl0->recovery->data, MDP_INTF_DSI_VIDEO_FIFO_OVERFLOW); MDP_INTF_DSI_VIDEO_FIFO_OVERFLOW); if (rc < 0) { pr_debug("%s: Target is in suspend/shutdown\n", __func__); return; } } /* /* * Disable PHY contention detection and receive. * Disable PHY contention detection and receive. * Configure the strength ctrl 1 register. * Configure the strength ctrl 1 register. Loading Loading @@ -879,9 +887,15 @@ static void mdss_dsi_ctl_phy_reset(struct mdss_dsi_ctrl_pdata *ctrl, u32 event) */ */ udelay(200); udelay(200); } else { } else { if (ctrl->recovery) if (ctrl->recovery) { ctrl->recovery->fxn(ctrl->recovery->data, rc = ctrl->recovery->fxn(ctrl->recovery->data, MDP_INTF_DSI_VIDEO_FIFO_OVERFLOW); MDP_INTF_DSI_VIDEO_FIFO_OVERFLOW); if (rc < 0) { pr_debug("%s: Target is in suspend/shutdown\n", __func__); return; } } /* Disable PHY contention detection and receive */ /* Disable PHY contention detection and receive */ MIPI_OUTP((ctrl->phy_io.base) + 0x0188, 0); MIPI_OUTP((ctrl->phy_io.base) + 0x0188, 0); Loading Loading @@ -2134,8 +2148,8 @@ static int mdss_dsi_cmd_dma_tx(struct mdss_dsi_ctrl_pdata *ctrl, status = reg_val & DSI_INTR_CMD_DMA_DONE; status = reg_val & DSI_INTR_CMD_DMA_DONE; if (status) { if (status) { reg_val &= DSI_INTR_MASK_ALL; reg_val &= DSI_INTR_MASK_ALL; /* clear CMD DMA isr only */ /* clear CMD DMA and BTA_DONE isr only */ reg_val |= DSI_INTR_CMD_DMA_DONE; reg_val |= (DSI_INTR_CMD_DMA_DONE | DSI_INTR_BTA_DONE); MIPI_OUTP(ctrl->ctrl_base + 0x0110, reg_val); MIPI_OUTP(ctrl->ctrl_base + 0x0110, reg_val); mdss_dsi_disable_irq_nosync(ctrl, DSI_CMD_TERM); mdss_dsi_disable_irq_nosync(ctrl, DSI_CMD_TERM); complete(&ctrl->dma_comp); complete(&ctrl->dma_comp); Loading Loading @@ -3030,6 +3044,13 @@ static bool mdss_dsi_fifo_status(struct mdss_dsi_ctrl_pdata *ctrl) pr_err("%s: status=%x\n", __func__, status); pr_err("%s: status=%x\n", __func__, status); /* * if DSI FIFO overflow is masked, * do not report overflow error */ if (MIPI_INP(base + 0x10c) & 0xf0000) status = status & 0xaaaaffff; if (status & 0x44440000) {/* DLNx_HS_FIFO_OVERFLOW */ if (status & 0x44440000) {/* DLNx_HS_FIFO_OVERFLOW */ dsi_send_events(ctrl, DSI_EV_DLNx_FIFO_OVERFLOW, 0); dsi_send_events(ctrl, DSI_EV_DLNx_FIFO_OVERFLOW, 0); /* Ignore FIFO EMPTY when overflow happens */ /* Ignore FIFO EMPTY when overflow happens */ Loading
drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c +16 −10 Original line number Original line Diff line number Diff line Loading @@ -1197,7 +1197,7 @@ static int mdss_mdp_cmd_wait4readptr(struct mdss_mdp_cmd_ctx *ctx) return rc; return rc; } } static void mdss_mdp_cmd_intf_callback(void *data, int event) static int mdss_mdp_cmd_intf_callback(void *data, int event) { { struct mdss_mdp_cmd_ctx *ctx = data; struct mdss_mdp_cmd_ctx *ctx = data; struct mdss_mdp_pp_tear_check *te = NULL; struct mdss_mdp_pp_tear_check *te = NULL; Loading @@ -1206,11 +1206,11 @@ static void mdss_mdp_cmd_intf_callback(void *data, int event) if (!data) { if (!data) { pr_err("%s: invalid ctx\n", __func__); pr_err("%s: invalid ctx\n", __func__); return; return -EINVAL; } } if (!ctx->ctl) if (!ctx->ctl) return; return -EINVAL; switch (event) { switch (event) { case MDP_INTF_CALLBACK_DSI_WAIT: case MDP_INTF_CALLBACK_DSI_WAIT: Loading @@ -1222,7 +1222,7 @@ static void mdss_mdp_cmd_intf_callback(void *data, int event) * just return * just return */ */ if (ctx->intf_stopped || !is_pingpong_split(ctx->ctl->mfd)) if (ctx->intf_stopped || !is_pingpong_split(ctx->ctl->mfd)) return; return -EINVAL; atomic_inc(&ctx->rdptr_cnt); atomic_inc(&ctx->rdptr_cnt); /* enable clks and rd_ptr interrupt */ /* enable clks and rd_ptr interrupt */ Loading @@ -1231,7 +1231,7 @@ static void mdss_mdp_cmd_intf_callback(void *data, int event) mixer = mdss_mdp_mixer_get(ctx->ctl, MDSS_MDP_MIXER_MUX_LEFT); mixer = mdss_mdp_mixer_get(ctx->ctl, MDSS_MDP_MIXER_MUX_LEFT); if (!mixer) { if (!mixer) { pr_err("%s: null mixer\n", __func__); pr_err("%s: null mixer\n", __func__); return; return -EINVAL; } } /* wait for read pointer */ /* wait for read pointer */ Loading @@ -1255,6 +1255,7 @@ static void mdss_mdp_cmd_intf_callback(void *data, int event) pr_debug("%s: unhandled event=%d\n", __func__, event); pr_debug("%s: unhandled event=%d\n", __func__, event); break; break; } } return 0; } } static void mdss_mdp_cmd_lineptr_done(void *arg) static void mdss_mdp_cmd_lineptr_done(void *arg) Loading @@ -1280,7 +1281,7 @@ static void mdss_mdp_cmd_lineptr_done(void *arg) spin_unlock(&ctx->clk_lock); spin_unlock(&ctx->clk_lock); } } static void mdss_mdp_cmd_intf_recovery(void *data, int event) static int mdss_mdp_cmd_intf_recovery(void *data, int event) { { struct mdss_mdp_cmd_ctx *ctx = data; struct mdss_mdp_cmd_ctx *ctx = data; unsigned long flags; unsigned long flags; Loading @@ -1288,11 +1289,11 @@ static void mdss_mdp_cmd_intf_recovery(void *data, int event) if (!data) { if (!data) { pr_err("%s: invalid ctx\n", __func__); pr_err("%s: invalid ctx\n", __func__); return; return -EINVAL; } } if (!ctx->ctl) if (!ctx->ctl) return; return -EINVAL; /* /* * Currently, only intf_fifo_underflow is * Currently, only intf_fifo_underflow is Loading @@ -1302,7 +1303,7 @@ static void mdss_mdp_cmd_intf_recovery(void *data, int event) if (event != MDP_INTF_DSI_CMD_FIFO_UNDERFLOW) { if (event != MDP_INTF_DSI_CMD_FIFO_UNDERFLOW) { pr_warn("%s: unsupported recovery event:%d\n", pr_warn("%s: unsupported recovery event:%d\n", __func__, event); __func__, event); return; return -EPERM; } } if (atomic_read(&ctx->koff_cnt)) { if (atomic_read(&ctx->koff_cnt)) { Loading @@ -1326,6 +1327,7 @@ static void mdss_mdp_cmd_intf_recovery(void *data, int event) if (notify_frame_timeout) if (notify_frame_timeout) mdss_mdp_ctl_notify(ctx->ctl, MDP_NOTIFY_FRAME_TIMEOUT); mdss_mdp_ctl_notify(ctx->ctl, MDP_NOTIFY_FRAME_TIMEOUT); return 0; } } static void mdss_mdp_cmd_pingpong_done(void *arg) static void mdss_mdp_cmd_pingpong_done(void *arg) Loading Loading @@ -3315,7 +3317,11 @@ int mdss_mdp_cmd_stop(struct mdss_mdp_ctl *ctl, int panel_power_state) ctx->intf_stopped = 0; ctx->intf_stopped = 0; if (sctx) if (sctx) sctx->intf_stopped = 0; sctx->intf_stopped = 0; /* * Tearcheck was disabled while entering LP2 state. * Enable it back to allow updates in LP1 state. */ mdss_mdp_tearcheck_enable(ctl, true); goto end; goto end; } } } } Loading
drivers/video/fbdev/msm/mdss_mdp_intf_video.c +7 −7 Original line number Original line Diff line number Diff line Loading @@ -315,7 +315,7 @@ int mdss_mdp_video_addr_setup(struct mdss_data_type *mdata, return 0; return 0; } } static void mdss_mdp_video_intf_recovery(void *data, int event) static int mdss_mdp_video_intf_recovery(void *data, int event) { { struct mdss_mdp_video_ctx *ctx; struct mdss_mdp_video_ctx *ctx; struct mdss_mdp_ctl *ctl = data; struct mdss_mdp_ctl *ctl = data; Loading @@ -327,7 +327,7 @@ static void mdss_mdp_video_intf_recovery(void *data, int event) if (!data) { if (!data) { pr_err("%s: invalid ctl\n", __func__); pr_err("%s: invalid ctl\n", __func__); return; return -EINVAL; } } /* /* Loading @@ -338,7 +338,7 @@ static void mdss_mdp_video_intf_recovery(void *data, int event) if (event != MDP_INTF_DSI_VIDEO_FIFO_OVERFLOW) { if (event != MDP_INTF_DSI_VIDEO_FIFO_OVERFLOW) { pr_warn("%s: unsupported recovery event:%d\n", pr_warn("%s: unsupported recovery event:%d\n", __func__, event); __func__, event); return; return -EPERM; } } ctx = ctl->intf_ctx[MASTER_CTX]; ctx = ctl->intf_ctx[MASTER_CTX]; Loading @@ -353,7 +353,7 @@ static void mdss_mdp_video_intf_recovery(void *data, int event) clk_rate = DIV_ROUND_UP_ULL(clk_rate, 1000); /* in kHz */ clk_rate = DIV_ROUND_UP_ULL(clk_rate, 1000); /* in kHz */ if (!clk_rate) { if (!clk_rate) { pr_err("Unable to get proper clk_rate\n"); pr_err("Unable to get proper clk_rate\n"); return; return -EINVAL; } } /* /* * calculate clk_period as pico second to maintain good * calculate clk_period as pico second to maintain good Loading @@ -363,7 +363,7 @@ static void mdss_mdp_video_intf_recovery(void *data, int event) clk_period = DIV_ROUND_UP_ULL(1000000000, clk_rate); clk_period = DIV_ROUND_UP_ULL(1000000000, clk_rate); if (!clk_period) { if (!clk_period) { pr_err("Unable to calculate clock period\n"); pr_err("Unable to calculate clock period\n"); return; return -EINVAL; } } min_ln_cnt = pinfo->lcdc.v_back_porch + pinfo->lcdc.v_pulse_width; min_ln_cnt = pinfo->lcdc.v_back_porch + pinfo->lcdc.v_pulse_width; active_lns_cnt = pinfo->yres; active_lns_cnt = pinfo->yres; Loading @@ -389,7 +389,7 @@ static void mdss_mdp_video_intf_recovery(void *data, int event) !ctx->timegen_en) { !ctx->timegen_en) { pr_warn("Target is in suspend or shutdown pending\n"); pr_warn("Target is in suspend or shutdown pending\n"); mutex_unlock(&ctl->offlock); mutex_unlock(&ctl->offlock); return; return -EPERM; } } line_cnt = mdss_mdp_video_line_count(ctl); line_cnt = mdss_mdp_video_line_count(ctl); Loading @@ -399,7 +399,7 @@ static void mdss_mdp_video_intf_recovery(void *data, int event) pr_debug("%s, Needed lines left line_cnt=%d\n", pr_debug("%s, Needed lines left line_cnt=%d\n", __func__, line_cnt); __func__, line_cnt); mutex_unlock(&ctl->offlock); mutex_unlock(&ctl->offlock); return; return 0; } else { } else { pr_warn("line count is less. line_cnt = %d\n", pr_warn("line count is less. line_cnt = %d\n", line_cnt); line_cnt); Loading