Loading drivers/video/msm/mdss/mdss_dsi_host.c +15 −4 Original line number Diff line number Diff line Loading @@ -494,7 +494,7 @@ static inline bool mdss_dsi_poll_clk_lane(struct mdss_dsi_ctrl_pdata *ctrl) if (readl_poll_timeout(((ctrl->ctrl_base) + 0x00a8), clk, (clk & 0x0010), 10, 1000)) { 100, 20000)) { pr_err("%s: ndx=%d clk lane NOT stopped, clk=%x\n", __func__, ctrl->ndx, clk); Loading Loading @@ -530,11 +530,12 @@ static void mdss_dsi_stop_hs_clk_lane(struct mdss_dsi_ctrl_pdata *ctrl); */ static void mdss_dsi_start_hs_clk_lane(struct mdss_dsi_ctrl_pdata *ctrl) { /* make sure clk lane is stopped */ mdss_dsi_stop_hs_clk_lane(ctrl); mutex_lock(&ctrl->clk_lane_mutex); MDSS_XLOG(ctrl->ndx, ctrl->clk_lane_cnt, current->pid, XLOG_FUNC_ENTRY); mdss_dsi_clk_ctrl(ctrl, DSI_ALL_CLKS, 1); if (ctrl->clk_lane_cnt) { pr_err("%s: ndx=%d do-wait, cnt=%d\n", Loading @@ -548,6 +549,8 @@ static void mdss_dsi_start_hs_clk_lane(struct mdss_dsi_ctrl_pdata *ctrl) pr_debug("%s: ndx=%d, set_hs, cnt=%d\n", __func__, ctrl->ndx, ctrl->clk_lane_cnt); mdss_dsi_clk_ctrl(ctrl, DSI_ALL_CLKS, 0); MDSS_XLOG(ctrl->ndx, ctrl->clk_lane_cnt, current->pid, XLOG_FUNC_EXIT); mutex_unlock(&ctrl->clk_lane_mutex); } Loading @@ -555,6 +558,10 @@ static void mdss_dsi_start_hs_clk_lane(struct mdss_dsi_ctrl_pdata *ctrl) * mdss_dsi_stop_hs_clk_lane: * this function is work around solution for 8994 dsi clk lane * may stuck at HS problem * since this function is called by event_thread, it may wakeup * after next kickoff had been lunched and start_hs_clk_lane * had been started. Therefore more than 1 vsync polling time is needed. * Use 50ms timeout to cover 30 FPS case. */ static void mdss_dsi_stop_hs_clk_lane(struct mdss_dsi_ctrl_pdata *ctrl) { Loading @@ -562,6 +569,8 @@ static void mdss_dsi_stop_hs_clk_lane(struct mdss_dsi_ctrl_pdata *ctrl) u32 lane = 0; mutex_lock(&ctrl->clk_lane_mutex); MDSS_XLOG(ctrl->ndx, ctrl->clk_lane_cnt, current->pid, XLOG_FUNC_ENTRY); if (ctrl->clk_lane_cnt == 0) /* stopped already */ goto release; Loading @@ -570,7 +579,7 @@ static void mdss_dsi_stop_hs_clk_lane(struct mdss_dsi_ctrl_pdata *ctrl) if (readl_poll_timeout(((ctrl->ctrl_base) + 0x000c), fifo, ((fifo & 0x11110000) == 0x11110000), 10, 1000)) { 100, 50000)) { pr_err("%s: fifo NOT empty, fifo=%x\n", __func__, fifo); goto end; Loading @@ -580,7 +589,7 @@ static void mdss_dsi_stop_hs_clk_lane(struct mdss_dsi_ctrl_pdata *ctrl) if (readl_poll_timeout(((ctrl->ctrl_base) + 0x00a8), lane, ((lane & 0x000f) == 0x000f), 100, 2000)) { 100, 20000)) { pr_err("%s: datalane NOT stopped, lane=%x\n", __func__, lane); } Loading @@ -596,6 +605,8 @@ release: pr_debug("%s: ndx=%d, cnt=%d\n", __func__, ctrl->ndx, ctrl->clk_lane_cnt); MDSS_XLOG(ctrl->ndx, ctrl->clk_lane_cnt, current->pid, XLOG_FUNC_EXIT); mutex_unlock(&ctrl->clk_lane_mutex); } Loading Loading
drivers/video/msm/mdss/mdss_dsi_host.c +15 −4 Original line number Diff line number Diff line Loading @@ -494,7 +494,7 @@ static inline bool mdss_dsi_poll_clk_lane(struct mdss_dsi_ctrl_pdata *ctrl) if (readl_poll_timeout(((ctrl->ctrl_base) + 0x00a8), clk, (clk & 0x0010), 10, 1000)) { 100, 20000)) { pr_err("%s: ndx=%d clk lane NOT stopped, clk=%x\n", __func__, ctrl->ndx, clk); Loading Loading @@ -530,11 +530,12 @@ static void mdss_dsi_stop_hs_clk_lane(struct mdss_dsi_ctrl_pdata *ctrl); */ static void mdss_dsi_start_hs_clk_lane(struct mdss_dsi_ctrl_pdata *ctrl) { /* make sure clk lane is stopped */ mdss_dsi_stop_hs_clk_lane(ctrl); mutex_lock(&ctrl->clk_lane_mutex); MDSS_XLOG(ctrl->ndx, ctrl->clk_lane_cnt, current->pid, XLOG_FUNC_ENTRY); mdss_dsi_clk_ctrl(ctrl, DSI_ALL_CLKS, 1); if (ctrl->clk_lane_cnt) { pr_err("%s: ndx=%d do-wait, cnt=%d\n", Loading @@ -548,6 +549,8 @@ static void mdss_dsi_start_hs_clk_lane(struct mdss_dsi_ctrl_pdata *ctrl) pr_debug("%s: ndx=%d, set_hs, cnt=%d\n", __func__, ctrl->ndx, ctrl->clk_lane_cnt); mdss_dsi_clk_ctrl(ctrl, DSI_ALL_CLKS, 0); MDSS_XLOG(ctrl->ndx, ctrl->clk_lane_cnt, current->pid, XLOG_FUNC_EXIT); mutex_unlock(&ctrl->clk_lane_mutex); } Loading @@ -555,6 +558,10 @@ static void mdss_dsi_start_hs_clk_lane(struct mdss_dsi_ctrl_pdata *ctrl) * mdss_dsi_stop_hs_clk_lane: * this function is work around solution for 8994 dsi clk lane * may stuck at HS problem * since this function is called by event_thread, it may wakeup * after next kickoff had been lunched and start_hs_clk_lane * had been started. Therefore more than 1 vsync polling time is needed. * Use 50ms timeout to cover 30 FPS case. */ static void mdss_dsi_stop_hs_clk_lane(struct mdss_dsi_ctrl_pdata *ctrl) { Loading @@ -562,6 +569,8 @@ static void mdss_dsi_stop_hs_clk_lane(struct mdss_dsi_ctrl_pdata *ctrl) u32 lane = 0; mutex_lock(&ctrl->clk_lane_mutex); MDSS_XLOG(ctrl->ndx, ctrl->clk_lane_cnt, current->pid, XLOG_FUNC_ENTRY); if (ctrl->clk_lane_cnt == 0) /* stopped already */ goto release; Loading @@ -570,7 +579,7 @@ static void mdss_dsi_stop_hs_clk_lane(struct mdss_dsi_ctrl_pdata *ctrl) if (readl_poll_timeout(((ctrl->ctrl_base) + 0x000c), fifo, ((fifo & 0x11110000) == 0x11110000), 10, 1000)) { 100, 50000)) { pr_err("%s: fifo NOT empty, fifo=%x\n", __func__, fifo); goto end; Loading @@ -580,7 +589,7 @@ static void mdss_dsi_stop_hs_clk_lane(struct mdss_dsi_ctrl_pdata *ctrl) if (readl_poll_timeout(((ctrl->ctrl_base) + 0x00a8), lane, ((lane & 0x000f) == 0x000f), 100, 2000)) { 100, 20000)) { pr_err("%s: datalane NOT stopped, lane=%x\n", __func__, lane); } Loading @@ -596,6 +605,8 @@ release: pr_debug("%s: ndx=%d, cnt=%d\n", __func__, ctrl->ndx, ctrl->clk_lane_cnt); MDSS_XLOG(ctrl->ndx, ctrl->clk_lane_cnt, current->pid, XLOG_FUNC_EXIT); mutex_unlock(&ctrl->clk_lane_mutex); } Loading