From 100eca10873483613a4a76cf0857f4cbbbc13d7b Mon Sep 17 00:00:00 2001 From: Robby Cai Date: Fri, 24 Aug 2012 16:43:13 +0800 Subject: [PATCH] ENGR00220796-1: pxp: Add stride configuration for some pixel format Set correct PITCH (aka, stride) for AS, PS, Output buffer. This is needed for V4L2. Signed-off-by: Robby Cai --- drivers/dma/pxp/pxp_dma_v2.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/drivers/dma/pxp/pxp_dma_v2.c b/drivers/dma/pxp/pxp_dma_v2.c index ceb72edbd39e..87b8f558ae8c 100644 --- a/drivers/dma/pxp/pxp_dma_v2.c +++ b/drivers/dma/pxp/pxp_dma_v2.c @@ -339,7 +339,14 @@ static void pxp_set_outbuf(struct pxps *pxp) BF_PXP_OUT_LRC_Y(out_params->height - 1), pxp->base + HW_PXP_OUT_LRC); - __raw_writel(out_params->stride, pxp->base + HW_PXP_OUT_PITCH); + if (out_params->pixel_fmt == PXP_PIX_FMT_RGB24) + __raw_writel(out_params->stride << 2, + pxp->base + HW_PXP_OUT_PITCH); + else if (out_params->pixel_fmt == PXP_PIX_FMT_RGB565) + __raw_writel(out_params->stride << 1, + pxp->base + HW_PXP_OUT_PITCH); + else + __raw_writel(out_params->stride, pxp->base + HW_PXP_OUT_PITCH); } static void pxp_set_s0colorkey(struct pxps *pxp) @@ -390,6 +397,13 @@ static void pxp_set_oln(int layer_no, struct pxps *pxp) __raw_writel(BF_PXP_OUT_AS_LRC_X(olparams_data->width) | BF_PXP_OUT_AS_LRC_Y(olparams_data->height), pxp->base + HW_PXP_OUT_AS_LRC); + + if (olparams_data->pixel_fmt == PXP_PIX_FMT_RGB24) + __raw_writel(olparams_data->width << 2, + pxp->base + HW_PXP_AS_PITCH); + else + __raw_writel(olparams_data->width << 1, + pxp->base + HW_PXP_AS_PITCH); } static void pxp_set_olparam(int layer_no, struct pxps *pxp) @@ -704,8 +718,9 @@ static void pxp_set_s0buf(struct pxps *pxp) __raw_writel(V, pxp->base + HW_PXP_PS_VBUF); } - /* TODO: only support RGB565, Y8, Y4 */ - if (s0_params->pixel_fmt == PXP_PIX_FMT_GREY) + /* TODO: only support RGB565, Y8, Y4, YUV420 */ + if (s0_params->pixel_fmt == PXP_PIX_FMT_GREY || + s0_params->pixel_fmt == PXP_PIX_FMT_YUV420P) __raw_writel(s0_params->width, pxp->base + HW_PXP_PS_PITCH); else if (s0_params->pixel_fmt == PXP_PIX_FMT_GY04) __raw_writel(s0_params->width >> 1, pxp->base + HW_PXP_PS_PITCH); -- 2.39.5