diff options
author | Guoniu.Zhou <guoniu.zhou@nxp.com> | 2017-09-06 14:23:13 +0800 |
---|---|---|
committer | Guoniu.Zhou <guoniu.zhou@nxp.com> | 2017-09-07 17:46:46 +0800 |
commit | 91da74e81cfdd2774b39a7574edf93de3f2a3f25 (patch) | |
tree | 04c4d2c73bab074a9cb196484b8e7c15c031c0ad /drivers/dma/pxp/pxp_dma_v3.c | |
parent | 4eeefd54cdbb8d1d3ffd64bd444ea7b759101a35 (diff) |
MLK-16374-3: PxP: improve stride parameter setting compatible
In pxp lib, the unit of stride parameter is pixel and stride
is not equal with width parameter of out buffer in some cases.
In order to use latest pxp lib in old version rootfs, PXP_DEVICE_LEGACY
macro is used to distinguish pxp drvier version. Because the
new pxp driver define a new variable and pxp lib can know this
through PXP_DEVICE_LEGACY, and determine if use it.
Signed-off-by: Guoniu.Zhou <guoniu.zhou@nxp.com>
Reviewed-by: Fancy Fang <chen.fang@nxp.com>
Diffstat (limited to 'drivers/dma/pxp/pxp_dma_v3.c')
-rw-r--r-- | drivers/dma/pxp/pxp_dma_v3.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/drivers/dma/pxp/pxp_dma_v3.c b/drivers/dma/pxp/pxp_dma_v3.c index b4886d0c2ace..4787071bab6b 100644 --- a/drivers/dma/pxp/pxp_dma_v3.c +++ b/drivers/dma/pxp/pxp_dma_v3.c @@ -198,6 +198,7 @@ static struct pxp_collision_info col_info; static dma_addr_t paddr; static bool v3p_flag; static int alpha_blending_version; +static bool pxp_legacy; struct pxp_dma { struct dma_device dma; @@ -3618,10 +3619,15 @@ static int convert_param_to_pixmap(struct pxp_pixmap *pixmap, pixmap->paddr = param->paddr; pixmap->bpp = get_bpp_from_fmt(pixmap->format); - if (!param->stride || (param->stride == param->width)) - pixmap->pitch = param->width * pixmap->bpp >> 3; - else - pixmap->pitch = param->stride; + if (pxp_legacy) { + pixmap->pitch = (param->stride) ? (param->stride * pixmap->bpp >> 3) : + (param->width * pixmap->bpp >> 3); + } else { + if (!param->stride || (param->stride == param->width)) + pixmap->pitch = param->width * pixmap->bpp >> 3; + else + pixmap->pitch = param->stride; + } pixmap->crop.x = param->crop.left; pixmap->crop.y = param->crop.top; @@ -3675,6 +3681,8 @@ static void __pxpdma_dostart(struct pxp_channel *pxp_chan) else alpha_blending_version = PXP_ALPHA_BLENDING_NONE; + pxp_legacy = (proc_data->pxp_legacy) ? true : false; + /* Save PxP configuration */ list_for_each_entry(child, &desc->tx_list, list) { if (i == 0) { /* Output */ |