]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
ENGR00285283 PXP: make pxp driver compatible for G2D
authorFancy Fang <B47543@freescale.com>
Wed, 20 Nov 2013 02:25:45 +0000 (10:25 +0800)
committerLothar Waßmann <LW@KARO-electronics.de>
Wed, 20 Aug 2014 08:06:44 +0000 (10:06 +0200)
Use stride to set AS and PS pitch by default, if stride is 0, then use
width to set AS and PS pitch instead. This will make PXP driver both
work for PXP kernel users and G2D applications.

Signed-off-by: Fancy Fang <B47543@freescale.com>
drivers/dma/pxp/pxp_dma_v2.c

index f195a475d2177b7bf1e9d636e054e4a7b618ae06..42a853cfba48a7e664ae4bc7cfacc458c8ea6bb0 100644 (file)
@@ -476,6 +476,8 @@ static void pxp_set_oln(int layer_no, struct pxps *pxp)
        struct pxp_layer_param *olparams_data = &pxp_conf->ol_param[layer_no];
        dma_addr_t phys_addr = olparams_data->paddr;
        __raw_writel(phys_addr, pxp->base + HW_PXP_AS_BUF);
+       u32 pitch = olparams_data->stride ? olparams_data->stride :
+                                           olparams_data->width;
 
        /* Fixme */
        if (olparams_data->width == 0 && olparams_data->height == 0) {
@@ -503,10 +505,10 @@ static void pxp_set_oln(int layer_no, struct pxps *pxp)
 
        if ((olparams_data->pixel_fmt == PXP_PIX_FMT_BGRA32) |
                 (olparams_data->pixel_fmt == PXP_PIX_FMT_RGB32)) {
-               __raw_writel(olparams_data->width << 2,
+               __raw_writel(pitch << 2,
                                pxp->base + HW_PXP_AS_PITCH);
        } else if (olparams_data->pixel_fmt == PXP_PIX_FMT_RGB565) {
-               __raw_writel(olparams_data->width << 1,
+               __raw_writel(pitch << 1,
                                pxp->base + HW_PXP_AS_PITCH);
        } else {
                __raw_writel(0, pxp->base + HW_PXP_AS_PITCH);
@@ -884,6 +886,8 @@ static void pxp_set_s0buf(struct pxps *pxp)
        dma_addr_t Y, U, V;
        dma_addr_t Y1, U1, V1;
        u32 offset, bpp = 1;
+       u32 pitch = s0_params->stride ? s0_params->stride :
+                                       s0_params->width;
 
        Y = s0_params->paddr;
 
@@ -935,22 +939,22 @@ static void pxp_set_s0buf(struct pxps *pxp)
            s0_params->pixel_fmt == PXP_PIX_FMT_NV21 ||
            s0_params->pixel_fmt == PXP_PIX_FMT_NV16 ||
            s0_params->pixel_fmt == PXP_PIX_FMT_NV61) {
-               __raw_writel(s0_params->width, pxp->base + HW_PXP_PS_PITCH);
+               __raw_writel(pitch, pxp->base + HW_PXP_PS_PITCH);
        }
        else if (s0_params->pixel_fmt == PXP_PIX_FMT_GY04)
-               __raw_writel(s0_params->width >> 1,
+               __raw_writel(pitch >> 1,
                                pxp->base + HW_PXP_PS_PITCH);
        else if (s0_params->pixel_fmt == PXP_PIX_FMT_RGB32)
-               __raw_writel(s0_params->width << 2,
+               __raw_writel(pitch << 2,
                                pxp->base + HW_PXP_PS_PITCH);
        else if (s0_params->pixel_fmt == PXP_PIX_FMT_UYVY ||
                 s0_params->pixel_fmt == PXP_PIX_FMT_YUYV ||
                 s0_params->pixel_fmt == PXP_PIX_FMT_VYUY ||
                 s0_params->pixel_fmt == PXP_PIX_FMT_YVYU)
-               __raw_writel(s0_params->width << 1,
+               __raw_writel(pitch << 1,
                                pxp->base + HW_PXP_PS_PITCH);
        else if (s0_params->pixel_fmt == PXP_PIX_FMT_RGB565)
-               __raw_writel(s0_params->width << 1,
+               __raw_writel(pitch << 1,
                                pxp->base + HW_PXP_PS_PITCH);
        else
                __raw_writel(0, pxp->base + HW_PXP_PS_PITCH);