Skip to content

Commit

Permalink
msm: rotator: Add support to YCBYCR rotator format
Browse files Browse the repository at this point in the history
Add support for MDP_YCBYCR_H2V1 interleaved YUV format in rotator
block.

Change-Id: I4bb192aaab1e72f6e5687ae222a5f9ea2c254bd4
Signed-off-by: Mayank Chopra <makchopra@codeaurora.org>
  • Loading branch information
Mayank Chopra authored and hyperb1iss committed Oct 1, 2013
1 parent c53fb6d commit 07cbfb9
Showing 1 changed file with 34 additions and 8 deletions.
42 changes: 34 additions & 8 deletions drivers/char/msm_rotator.c
Expand Up @@ -745,6 +745,7 @@ static int get_bpp(int format)
case MDP_YCRCB_H1V1:
return 3;

case MDP_YCBYCR_H2V1:
case MDP_YCRYCB_H2V1:
return 2;/* YCrYCb interleave */

Expand Down Expand Up @@ -788,6 +789,7 @@ static int msm_rotator_get_plane_sizes(uint32_t format, uint32_t w, uint32_t h,
case MDP_RGB_888:
case MDP_RGB_565:
case MDP_BGR_565:
case MDP_YCBYCR_H2V1:
case MDP_YCRYCB_H2V1:
case MDP_YCBCR_H1V1:
case MDP_YCRCB_H1V1:
Expand Down Expand Up @@ -1480,7 +1482,7 @@ static int msm_rotator_ycxcx_h2v2_2pass(struct msm_rotator_img_info *info,
return 0;
}

static int msm_rotator_ycrycb(struct msm_rotator_img_info *info,
static int msm_rotator_ycxycx(struct msm_rotator_img_info *info,
unsigned int in_paddr,
unsigned int out_paddr,
unsigned int use_imem,
Expand All @@ -1490,13 +1492,22 @@ static int msm_rotator_ycrycb(struct msm_rotator_img_info *info,
int bpp;
uint32_t dst_format;

if (info->src.format == MDP_YCRYCB_H2V1) {
switch (info->src.format) {
case MDP_YCBYCR_H2V1:
if (info->rotations & MDP_ROT_90)
dst_format = MDP_Y_CBCR_H1V2;
else
dst_format = MDP_Y_CBCR_H2V1;
break;
case MDP_YCRYCB_H2V1:
if (info->rotations & MDP_ROT_90)
dst_format = MDP_Y_CRCB_H1V2;
else
dst_format = MDP_Y_CRCB_H2V1;
} else
break;
default:
return -EINVAL;
}

if (info->dst.format != dst_format)
return -EINVAL;
Expand Down Expand Up @@ -1525,10 +1536,18 @@ static int msm_rotator_ycrycb(struct msm_rotator_img_info *info,
(info->dst.width) << 16,
MSM_ROTATOR_OUT_YSTRIDE1);

iowrite32(GET_PACK_PATTERN(CLR_Y, CLR_CR, CLR_Y, CLR_CB, 8),
MSM_ROTATOR_SRC_UNPACK_PATTERN1);
iowrite32(GET_PACK_PATTERN(0, 0, CLR_CR, CLR_CB, 8),
MSM_ROTATOR_OUT_PACK_PATTERN1);
if (dst_format == MDP_Y_CBCR_H1V2 ||
dst_format == MDP_Y_CBCR_H2V1) {
iowrite32(GET_PACK_PATTERN(0, CLR_CB, 0, CLR_CR, 8),
MSM_ROTATOR_SRC_UNPACK_PATTERN1);
iowrite32(GET_PACK_PATTERN(0, 0, CLR_CB, CLR_CR, 8),
MSM_ROTATOR_OUT_PACK_PATTERN1);
} else {
iowrite32(GET_PACK_PATTERN(0, CLR_CR, 0, CLR_CB, 8),
MSM_ROTATOR_SRC_UNPACK_PATTERN1);
iowrite32(GET_PACK_PATTERN(0, 0, CLR_CR, CLR_CB, 8),
MSM_ROTATOR_OUT_PACK_PATTERN1);
}
iowrite32((1 << 18) | /* chroma sampling 1=H2V1 */
(ROTATIONS_TO_BITMASK(info->rotations) << 9) |
1 << 8 | /* ROT_EN */
Expand Down Expand Up @@ -2097,8 +2116,9 @@ static int msm_rotator_do_rotate_sub(
in_chroma_paddr,
out_chroma_paddr);
break;
case MDP_YCBYCR_H2V1:
case MDP_YCRYCB_H2V1:
rc = msm_rotator_ycrycb(img_info,
rc = msm_rotator_ycxycx(img_info,
in_paddr, out_paddr, use_imem,
msm_rotator_dev->last_session_idx != s,
out_chroma_paddr);
Expand Down Expand Up @@ -2490,6 +2510,12 @@ static int msm_rotator_start(unsigned long arg,
case MDP_YCRCB_H1V1:
info.dst.format = info.src.format;
break;
case MDP_YCBYCR_H2V1:
if (info.rotations & MDP_ROT_90)
info.dst.format = MDP_Y_CBCR_H1V2;
else
info.dst.format = MDP_Y_CBCR_H2V1;
break;
case MDP_YCRYCB_H2V1:
if (info.rotations & MDP_ROT_90)
info.dst.format = MDP_Y_CRCB_H1V2;
Expand Down

0 comments on commit 07cbfb9

Please sign in to comment.