diff options
Diffstat (limited to 'drivers/video/fbdev/msm/mdp3_ctrl.c')
| -rw-r--r-- | drivers/video/fbdev/msm/mdp3_ctrl.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/video/fbdev/msm/mdp3_ctrl.c b/drivers/video/fbdev/msm/mdp3_ctrl.c index c85104c86c2f..7907051c24e8 100644 --- a/drivers/video/fbdev/msm/mdp3_ctrl.c +++ b/drivers/video/fbdev/msm/mdp3_ctrl.c @@ -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); @@ -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; } @@ -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 { |
