summaryrefslogtreecommitdiff
path: root/drivers/video/fbdev
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/video/fbdev')
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp_overlay.c55
1 files changed, 31 insertions, 24 deletions
diff --git a/drivers/video/fbdev/msm/mdss_mdp_overlay.c b/drivers/video/fbdev/msm/mdss_mdp_overlay.c
index f04202b820d7..c87f9796415d 100644
--- a/drivers/video/fbdev/msm/mdss_mdp_overlay.c
+++ b/drivers/video/fbdev/msm/mdss_mdp_overlay.c
@@ -2781,7 +2781,7 @@ static int mdss_mdp_hw_cursor_pipe_update(struct msm_fb_data_type *mfd,
struct mdss_mdp_mixer *mixer;
struct fb_image *img = &cursor->image;
struct mdss_data_type *mdata = mdss_mdp_get_mdata();
- struct mdp_overlay req;
+ struct mdp_overlay *req = NULL;
struct mdss_rect roi;
int ret = 0;
u32 xres = mfd->fbi->var.xres;
@@ -2879,24 +2879,30 @@ static int mdss_mdp_hw_cursor_pipe_update(struct msm_fb_data_type *mfd,
roi.w = min(xres - start_x, img->width - roi.x);
roi.h = min(yres - start_y, img->height - roi.y);
- memset(&req, 0, sizeof(struct mdp_overlay));
- req.pipe_type = PIPE_TYPE_CURSOR;
- req.z_order = MDSS_MDP_STAGE_6;
+ req = kzalloc(sizeof(struct mdp_overlay), GFP_KERNEL);
+ if (!req) {
+ pr_err("not able to allocate memory for req\n");
+ goto done;
+ }
- req.src.width = img->width;
- req.src.height = img->height;
- req.src.format = MDP_ARGB_8888;
+ req->pipe_type = PIPE_TYPE_CURSOR;
+ req->z_order = MDSS_MDP_STAGE_6;
- mdss_mdp_set_rect(&req.src_rect, roi.x, roi.y, img->width, img->height);
- mdss_mdp_set_rect(&req.dst_rect, start_x, start_y, roi.w, roi.h);
+ req->src.width = img->width;
+ req->src.height = img->height;
+ req->src.format = MDP_ARGB_8888;
- req.bg_color = img->bg_color;
- req.alpha = (img->fg_color & 0xff000000) >> 24;
- if (req.alpha == 0xff)
- req.blend_op = BLEND_OP_OPAQUE;
+ mdss_mdp_set_rect(&req->src_rect, roi.x, roi.y, img->width,
+ img->height);
+ mdss_mdp_set_rect(&req->dst_rect, start_x, start_y, roi.w, roi.h);
+
+ req->bg_color = img->bg_color;
+ req->alpha = (img->fg_color & 0xff000000) >> 24;
+ if (req->alpha == 0xff)
+ req->blend_op = BLEND_OP_OPAQUE;
else
- req.blend_op = BLEND_OP_COVERAGE;
- req.transp_mask = (img->bg_color & 0xffffff);
+ req->blend_op = BLEND_OP_COVERAGE;
+ req->transp_mask = (img->bg_color & 0xffffff);
if (mfd->cursor_buf && (cursor->set & FB_CUR_SETIMAGE)) {
u32 cursor_addr;
@@ -2925,29 +2931,30 @@ static int mdss_mdp_hw_cursor_pipe_update(struct msm_fb_data_type *mfd,
}
if (start_x + roi.w <= left_lm_w) {
- ret = mdss_mdp_cursor_pipe_setup(mfd, &req, CURSOR_PIPE_LEFT);
+ ret = mdss_mdp_cursor_pipe_setup(mfd, req, CURSOR_PIPE_LEFT);
mdss_mdp_curor_pipe_cleanup(mfd, CURSOR_PIPE_RIGHT);
} else if (start_x >= left_lm_w) {
- ret = mdss_mdp_cursor_pipe_setup(mfd, &req, CURSOR_PIPE_RIGHT);
+ ret = mdss_mdp_cursor_pipe_setup(mfd, req, CURSOR_PIPE_RIGHT);
mdss_mdp_curor_pipe_cleanup(mfd, CURSOR_PIPE_LEFT);
} else {
- mdss_mdp_set_rect(&req.dst_rect, start_x, start_y,
+ mdss_mdp_set_rect(&req->dst_rect, start_x, start_y,
(left_lm_w - start_x), roi.h);
- mdss_mdp_set_rect(&req.src_rect, 0, 0, (left_lm_w -
+ mdss_mdp_set_rect(&req->src_rect, 0, 0, (left_lm_w -
start_x), img->height);
- ret = mdss_mdp_cursor_pipe_setup(mfd, &req, CURSOR_PIPE_LEFT);
+ ret = mdss_mdp_cursor_pipe_setup(mfd, req, CURSOR_PIPE_LEFT);
if (ret)
goto done;
- mdss_mdp_set_rect(&req.dst_rect, left_lm_w, start_y, ((start_x +
- roi.w) - left_lm_w), roi.h);
- mdss_mdp_set_rect(&req.src_rect, (left_lm_w - start_x), 0,
+ mdss_mdp_set_rect(&req->dst_rect, left_lm_w, start_y,
+ ((start_x + roi.w) - left_lm_w), roi.h);
+ mdss_mdp_set_rect(&req->src_rect, (left_lm_w - start_x), 0,
(img->width - (left_lm_w - start_x)),
img->height);
- ret = mdss_mdp_cursor_pipe_setup(mfd, &req, CURSOR_PIPE_RIGHT);
+ ret = mdss_mdp_cursor_pipe_setup(mfd, req, CURSOR_PIPE_RIGHT);
}
done:
+ kfree(req);
mutex_unlock(&mdp5_data->ov_lock);
return ret;
}