Loading drivers/video/msm/mdss/mdp3_ctrl.c +16 −0 Original line number Diff line number Diff line Loading @@ -839,6 +839,14 @@ static int mdp3_overlay_set(struct msm_fb_data_type *mfd, { int rc = 0; struct mdp3_session_data *mdp3_session = mfd->mdp.private1; struct fb_var_screeninfo *var; struct fb_fix_screeninfo *fix; struct fb_info *fbi = mfd->fbi; int stride; fix = &fbi->fix; var = &fbi->var; stride = req->src.width * var->bits_per_pixel/8; mutex_lock(&mdp3_session->lock); Loading @@ -847,6 +855,9 @@ static int mdp3_overlay_set(struct msm_fb_data_type *mfd, mdp3_session->overlay = *req; if (req->id == MSMFB_NEW_REQUEST) { if (fix->line_length != stride) mdp3_session->dma->config_stride( mdp3_session->dma, stride); mdp3_session->overlay.id = 1; req->id = 1; } Loading @@ -860,10 +871,15 @@ static int mdp3_overlay_unset(struct msm_fb_data_type *mfd, int ndx) { int rc = 0; struct mdp3_session_data *mdp3_session = mfd->mdp.private1; struct fb_info *fbi = mfd->fbi; struct fb_fix_screeninfo *fix; fix = &fbi->fix; mutex_lock(&mdp3_session->lock); if (mdp3_session->overlay.id == ndx && ndx == 1) { mdp3_session->dma->config_stride(mdp3_session->dma, fix->line_length); mdp3_session->overlay.id = MSMFB_NEW_REQUEST; mdp3_bufq_deinit(&mdp3_session->bufq_in); } else { Loading drivers/video/msm/mdss/mdp3_dma.c +19 −0 Original line number Diff line number Diff line Loading @@ -268,6 +268,23 @@ static int mdp3_dma_sync_config(struct mdp3_dma *dma, return 0; } static void mdp3_dma_stride_config(struct mdp3_dma *dma, int stride) { struct mdp3_dma_source *source_config; u32 dma_stride_offset; if (dma->dma_sel == MDP3_DMA_P) dma_stride_offset = MDP3_REG_DMA_P_IBUF_Y_STRIDE; else dma_stride_offset = MDP3_REG_DMA_S_IBUF_Y_STRIDE; source_config = &dma->source_config; source_config->stride = stride; pr_debug("%s: Update the fb stride for DMA to %d", __func__, (u32)source_config->stride); MDP3_REG_WRITE(dma_stride_offset, source_config->stride); } static int mdp3_dmap_config(struct mdp3_dma *dma, struct mdp3_dma_source *source_config, struct mdp3_dma_output_config *output_config) Loading Loading @@ -855,6 +872,7 @@ int mdp3_dma_init(struct mdp3_dma *dma) dma->vsync_enable = mdp3_dma_vsync_enable; dma->start = mdp3_dma_start; dma->stop = mdp3_dma_stop; dma->config_stride = mdp3_dma_stride_config; break; case MDP3_DMA_S: dma->dma_config = mdp3_dmas_config; Loading @@ -869,6 +887,7 @@ int mdp3_dma_init(struct mdp3_dma *dma) dma->vsync_enable = mdp3_dma_vsync_enable; dma->start = mdp3_dma_start; dma->stop = mdp3_dma_stop; dma->config_stride = mdp3_dma_stride_config; break; case MDP3_DMA_E: default: Loading drivers/video/msm/mdss/mdp3_dma.h +2 −0 Original line number Diff line number Diff line Loading @@ -287,6 +287,8 @@ struct mdp3_dma { int (*histo_op)(struct mdp3_dma *dma, u32 op); void (*config_stride)(struct mdp3_dma *dma, int stride); void (*vsync_enable)(struct mdp3_dma *dma, struct mdp3_vsync_notification *vsync_client); }; Loading Loading
drivers/video/msm/mdss/mdp3_ctrl.c +16 −0 Original line number Diff line number Diff line Loading @@ -839,6 +839,14 @@ static int mdp3_overlay_set(struct msm_fb_data_type *mfd, { int rc = 0; struct mdp3_session_data *mdp3_session = mfd->mdp.private1; struct fb_var_screeninfo *var; struct fb_fix_screeninfo *fix; struct fb_info *fbi = mfd->fbi; int stride; fix = &fbi->fix; var = &fbi->var; stride = req->src.width * var->bits_per_pixel/8; mutex_lock(&mdp3_session->lock); Loading @@ -847,6 +855,9 @@ static int mdp3_overlay_set(struct msm_fb_data_type *mfd, mdp3_session->overlay = *req; if (req->id == MSMFB_NEW_REQUEST) { if (fix->line_length != stride) mdp3_session->dma->config_stride( mdp3_session->dma, stride); mdp3_session->overlay.id = 1; req->id = 1; } Loading @@ -860,10 +871,15 @@ static int mdp3_overlay_unset(struct msm_fb_data_type *mfd, int ndx) { int rc = 0; struct mdp3_session_data *mdp3_session = mfd->mdp.private1; struct fb_info *fbi = mfd->fbi; struct fb_fix_screeninfo *fix; fix = &fbi->fix; mutex_lock(&mdp3_session->lock); if (mdp3_session->overlay.id == ndx && ndx == 1) { mdp3_session->dma->config_stride(mdp3_session->dma, fix->line_length); mdp3_session->overlay.id = MSMFB_NEW_REQUEST; mdp3_bufq_deinit(&mdp3_session->bufq_in); } else { Loading
drivers/video/msm/mdss/mdp3_dma.c +19 −0 Original line number Diff line number Diff line Loading @@ -268,6 +268,23 @@ static int mdp3_dma_sync_config(struct mdp3_dma *dma, return 0; } static void mdp3_dma_stride_config(struct mdp3_dma *dma, int stride) { struct mdp3_dma_source *source_config; u32 dma_stride_offset; if (dma->dma_sel == MDP3_DMA_P) dma_stride_offset = MDP3_REG_DMA_P_IBUF_Y_STRIDE; else dma_stride_offset = MDP3_REG_DMA_S_IBUF_Y_STRIDE; source_config = &dma->source_config; source_config->stride = stride; pr_debug("%s: Update the fb stride for DMA to %d", __func__, (u32)source_config->stride); MDP3_REG_WRITE(dma_stride_offset, source_config->stride); } static int mdp3_dmap_config(struct mdp3_dma *dma, struct mdp3_dma_source *source_config, struct mdp3_dma_output_config *output_config) Loading Loading @@ -855,6 +872,7 @@ int mdp3_dma_init(struct mdp3_dma *dma) dma->vsync_enable = mdp3_dma_vsync_enable; dma->start = mdp3_dma_start; dma->stop = mdp3_dma_stop; dma->config_stride = mdp3_dma_stride_config; break; case MDP3_DMA_S: dma->dma_config = mdp3_dmas_config; Loading @@ -869,6 +887,7 @@ int mdp3_dma_init(struct mdp3_dma *dma) dma->vsync_enable = mdp3_dma_vsync_enable; dma->start = mdp3_dma_start; dma->stop = mdp3_dma_stop; dma->config_stride = mdp3_dma_stride_config; break; case MDP3_DMA_E: default: Loading
drivers/video/msm/mdss/mdp3_dma.h +2 −0 Original line number Diff line number Diff line Loading @@ -287,6 +287,8 @@ struct mdp3_dma { int (*histo_op)(struct mdp3_dma *dma, u32 op); void (*config_stride)(struct mdp3_dma *dma, int stride); void (*vsync_enable)(struct mdp3_dma *dma, struct mdp3_vsync_notification *vsync_client); }; Loading