Loading drivers/video/msm/mdss/mdp3.c +4 −2 Original line number Diff line number Diff line Loading @@ -186,6 +186,7 @@ static irqreturn_t mdp3_irq_handler(int irq, void *ptr) int i = 0; struct mdp3_hw_resource *mdata = (struct mdp3_hw_resource *)ptr; u32 mdp_interrupt = 0; u32 mdp_status = 0; spin_lock(&mdata->irq_lock); if (!mdata->irq_mask) Loading @@ -194,8 +195,8 @@ static irqreturn_t mdp3_irq_handler(int irq, void *ptr) clk_enable(mdp3_res->clocks[MDP3_CLK_AHB]); clk_enable(mdp3_res->clocks[MDP3_CLK_CORE]); mdp_interrupt = MDP3_REG_READ(MDP3_REG_INTR_STATUS); MDP3_REG_WRITE(MDP3_REG_INTR_CLEAR, mdp_interrupt); mdp_status = MDP3_REG_READ(MDP3_REG_INTR_STATUS); mdp_interrupt = mdp_status; pr_debug("mdp3_irq_handler irq=%d\n", mdp_interrupt); mdp_interrupt &= mdata->irq_mask; Loading @@ -206,6 +207,7 @@ static irqreturn_t mdp3_irq_handler(int irq, void *ptr) mdp_interrupt = mdp_interrupt >> 1; i++; } MDP3_REG_WRITE(MDP3_REG_INTR_CLEAR, mdp_status); clk_disable(mdp3_res->clocks[MDP3_CLK_AHB]); clk_disable(mdp3_res->clocks[MDP3_CLK_CORE]); Loading drivers/video/msm/mdss/mdp3_ctrl.c +1 −1 Original line number Diff line number Diff line Loading @@ -981,7 +981,7 @@ static int mdp3_ctrl_display_commit_kickoff(struct msm_fb_data_type *mfd, mdp3_bufq_push(&mdp3_session->bufq_out, data); } if (mdp3_bufq_count(&mdp3_session->bufq_out) > 2) { if (mdp3_bufq_count(&mdp3_session->bufq_out) > 1) { data = mdp3_bufq_pop(&mdp3_session->bufq_out); if (data) mdp3_put_img(data, MDP3_CLIENT_DMA_P); Loading drivers/video/msm/mdss/mdp3_dma.c +13 −5 Original line number Diff line number Diff line Loading @@ -28,17 +28,23 @@ static void mdp3_vsync_intr_handler(int type, void *arg) { struct mdp3_dma *dma = (struct mdp3_dma *)arg; struct mdp3_vsync_notification vsync_client; unsigned int wait_for_next_vs; pr_debug("mdp3_vsync_intr_handler\n"); spin_lock(&dma->dma_lock); vsync_client = dma->vsync_client; wait_for_next_vs = !dma->vsync_status; dma->vsync_status = 0; if (wait_for_next_vs) complete(&dma->vsync_comp); spin_unlock(&dma->dma_lock); if (vsync_client.handler) if (vsync_client.handler) { vsync_client.handler(vsync_client.arg); else } else { if (wait_for_next_vs) mdp3_irq_disable_nosync(type); } } static void mdp3_dma_done_intr_handler(int type, void *arg) { Loading Loading @@ -567,7 +573,9 @@ static int mdp3_dmap_update(struct mdp3_dma *dma, void *buf, intf->start(intf); } wmb(); mb(); dma->vsync_status = MDP3_REG_READ(MDP3_REG_INTR_STATUS) & (1 << MDP3_INTR_LCDC_START_OF_FRAME); init_completion(&dma->vsync_comp); spin_unlock_irqrestore(&dma->dma_lock, flag); Loading drivers/video/msm/mdss/mdp3_dma.h +1 −0 Original line number Diff line number Diff line Loading @@ -256,6 +256,7 @@ struct mdp3_dma { struct mdp3_dma_histogram_config histogram_config; int histo_state; struct mdp3_dma_histogram_data histo_data; unsigned int vsync_status; int (*dma_config)(struct mdp3_dma *dma, struct mdp3_dma_source *source_config, Loading Loading
drivers/video/msm/mdss/mdp3.c +4 −2 Original line number Diff line number Diff line Loading @@ -186,6 +186,7 @@ static irqreturn_t mdp3_irq_handler(int irq, void *ptr) int i = 0; struct mdp3_hw_resource *mdata = (struct mdp3_hw_resource *)ptr; u32 mdp_interrupt = 0; u32 mdp_status = 0; spin_lock(&mdata->irq_lock); if (!mdata->irq_mask) Loading @@ -194,8 +195,8 @@ static irqreturn_t mdp3_irq_handler(int irq, void *ptr) clk_enable(mdp3_res->clocks[MDP3_CLK_AHB]); clk_enable(mdp3_res->clocks[MDP3_CLK_CORE]); mdp_interrupt = MDP3_REG_READ(MDP3_REG_INTR_STATUS); MDP3_REG_WRITE(MDP3_REG_INTR_CLEAR, mdp_interrupt); mdp_status = MDP3_REG_READ(MDP3_REG_INTR_STATUS); mdp_interrupt = mdp_status; pr_debug("mdp3_irq_handler irq=%d\n", mdp_interrupt); mdp_interrupt &= mdata->irq_mask; Loading @@ -206,6 +207,7 @@ static irqreturn_t mdp3_irq_handler(int irq, void *ptr) mdp_interrupt = mdp_interrupt >> 1; i++; } MDP3_REG_WRITE(MDP3_REG_INTR_CLEAR, mdp_status); clk_disable(mdp3_res->clocks[MDP3_CLK_AHB]); clk_disable(mdp3_res->clocks[MDP3_CLK_CORE]); Loading
drivers/video/msm/mdss/mdp3_ctrl.c +1 −1 Original line number Diff line number Diff line Loading @@ -981,7 +981,7 @@ static int mdp3_ctrl_display_commit_kickoff(struct msm_fb_data_type *mfd, mdp3_bufq_push(&mdp3_session->bufq_out, data); } if (mdp3_bufq_count(&mdp3_session->bufq_out) > 2) { if (mdp3_bufq_count(&mdp3_session->bufq_out) > 1) { data = mdp3_bufq_pop(&mdp3_session->bufq_out); if (data) mdp3_put_img(data, MDP3_CLIENT_DMA_P); Loading
drivers/video/msm/mdss/mdp3_dma.c +13 −5 Original line number Diff line number Diff line Loading @@ -28,17 +28,23 @@ static void mdp3_vsync_intr_handler(int type, void *arg) { struct mdp3_dma *dma = (struct mdp3_dma *)arg; struct mdp3_vsync_notification vsync_client; unsigned int wait_for_next_vs; pr_debug("mdp3_vsync_intr_handler\n"); spin_lock(&dma->dma_lock); vsync_client = dma->vsync_client; wait_for_next_vs = !dma->vsync_status; dma->vsync_status = 0; if (wait_for_next_vs) complete(&dma->vsync_comp); spin_unlock(&dma->dma_lock); if (vsync_client.handler) if (vsync_client.handler) { vsync_client.handler(vsync_client.arg); else } else { if (wait_for_next_vs) mdp3_irq_disable_nosync(type); } } static void mdp3_dma_done_intr_handler(int type, void *arg) { Loading Loading @@ -567,7 +573,9 @@ static int mdp3_dmap_update(struct mdp3_dma *dma, void *buf, intf->start(intf); } wmb(); mb(); dma->vsync_status = MDP3_REG_READ(MDP3_REG_INTR_STATUS) & (1 << MDP3_INTR_LCDC_START_OF_FRAME); init_completion(&dma->vsync_comp); spin_unlock_irqrestore(&dma->dma_lock, flag); Loading
drivers/video/msm/mdss/mdp3_dma.h +1 −0 Original line number Diff line number Diff line Loading @@ -256,6 +256,7 @@ struct mdp3_dma { struct mdp3_dma_histogram_config histogram_config; int histo_state; struct mdp3_dma_histogram_data histo_data; unsigned int vsync_status; int (*dma_config)(struct mdp3_dma *dma, struct mdp3_dma_source *source_config, Loading