diff options
| author | Adrian Salido-Moreno <adrianm@codeaurora.org> | 2013-02-07 14:34:47 -0800 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:14:48 -0700 |
| commit | 1bd3cc3e56d06ee0da775778a68e3619caa3f9eb (patch) | |
| tree | 0a987802eb930fc02b3d97d8ee42718994b39fad | |
| parent | dfdc53d8c422ec7f6c2ec6ec269c44200fe1fd4d (diff) | |
msm: mdss: update overlay parameters checks based on MDSS revision
New MDSS revision has less strict limitations on the surfaces sizes,
update these limitations based on revision
Change-Id: I0c372d322d27602731f3c59669fb7d8b6778c17d
Signed-off-by: Adrian Salido-Moreno <adrianm@codeaurora.org>
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp.h | 2 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_overlay.c | 17 |
2 files changed, 11 insertions, 8 deletions
diff --git a/drivers/video/fbdev/msm/mdss_mdp.h b/drivers/video/fbdev/msm/mdss_mdp.h index 455f725c44ea..5158974b10d2 100644 --- a/drivers/video/fbdev/msm/mdss_mdp.h +++ b/drivers/video/fbdev/msm/mdss_mdp.h @@ -32,8 +32,6 @@ #define MAX_MIXER_HEIGHT 2400 #define MAX_IMG_WIDTH 0x3FFF #define MAX_IMG_HEIGHT 0x3FFF -#define MIN_DST_W 10 -#define MIN_DST_H 10 #define MAX_DST_W MAX_MIXER_WIDTH #define MAX_DST_H MAX_MIXER_HEIGHT #define MAX_PLANES 4 diff --git a/drivers/video/fbdev/msm/mdss_mdp_overlay.c b/drivers/video/fbdev/msm/mdss_mdp_overlay.c index 5e9659f6297a..2f79c0ed7ebf 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_overlay.c +++ b/drivers/video/fbdev/msm/mdss_mdp_overlay.c @@ -57,10 +57,19 @@ static int mdss_mdp_overlay_req_check(struct msm_fb_data_type *mfd, struct mdss_mdp_format_params *fmt) { u32 xres, yres; + u32 min_src_size, min_dst_size; xres = mfd->fbi->var.xres; yres = mfd->fbi->var.yres; + if (mfd->mdata->mdp_rev >= MDSS_MDP_HW_REV_102) { + min_src_size = fmt->is_yuv ? 2 : 1; + min_dst_size = 1; + } else { + min_src_size = fmt->is_yuv ? 10 : 5; + min_dst_size = 2; + } + if (req->z_order >= MDSS_MDP_MAX_STAGE) { pr_err("zorder %d out of range\n", req->z_order); return -ERANGE; @@ -68,7 +77,7 @@ static int mdss_mdp_overlay_req_check(struct msm_fb_data_type *mfd, if (req->src.width > MAX_IMG_WIDTH || req->src.height > MAX_IMG_HEIGHT || - req->src_rect.w == 0 || req->src_rect.h == 0 || + req->src_rect.w < min_src_size || req->src_rect.h < min_src_size || CHECK_BOUNDS(req->src_rect.x, req->src_rect.w, req->src.width) || CHECK_BOUNDS(req->src_rect.y, req->src_rect.h, req->src.height)) { pr_err("invalid source image img wh=%dx%d rect=%d,%d,%d,%d\n", @@ -78,7 +87,7 @@ static int mdss_mdp_overlay_req_check(struct msm_fb_data_type *mfd, return -EOVERFLOW; } - if (req->dst_rect.w < MIN_DST_W || req->dst_rect.h < MIN_DST_H || + if (req->dst_rect.w < min_dst_size || req->dst_rect.h < min_dst_size || req->dst_rect.w > MAX_DST_W || req->dst_rect.h > MAX_DST_H) { pr_err("invalid destination resolution (%dx%d)", req->dst_rect.w, req->dst_rect.h); @@ -151,10 +160,6 @@ static int mdss_mdp_overlay_req_check(struct msm_fb_data_type *mfd, pr_err("invalid odd src resolution or coordinates\n"); return -EINVAL; } - if ((req->dst_rect.w & 0x1) || (req->dst_rect.h & 0x1)) { - pr_err("invalid odd dst resolution\n"); - return -EINVAL; - } } return 0; |
