summaryrefslogtreecommitdiff
path: root/drivers/video/fbdev/msm/mdp3_ctrl.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/video/fbdev/msm/mdp3_ctrl.c')
-rw-r--r--drivers/video/fbdev/msm/mdp3_ctrl.c16
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 {