Commit d3e4e610 authored by Philipp Zabel's avatar Philipp Zabel Committed by Greg Kroah-Hartman

staging: drm/imx: Add YVU420 support to i.MX IPUv3 base driver

Signed-off-by: default avatarPhilipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: default avatarSascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent c096ae13
...@@ -234,6 +234,11 @@ void ipu_cpmem_set_yuv_planar_full(struct ipu_ch_param __iomem *p, ...@@ -234,6 +234,11 @@ void ipu_cpmem_set_yuv_planar_full(struct ipu_ch_param __iomem *p,
ipu_ch_param_write_field(p, IPU_FIELD_UBO, u_offset / 8); ipu_ch_param_write_field(p, IPU_FIELD_UBO, u_offset / 8);
ipu_ch_param_write_field(p, IPU_FIELD_VBO, v_offset / 8); ipu_ch_param_write_field(p, IPU_FIELD_VBO, v_offset / 8);
break; break;
case V4L2_PIX_FMT_YVU420:
ipu_ch_param_write_field(p, IPU_FIELD_SLUV, (stride / 2) - 1);
ipu_ch_param_write_field(p, IPU_FIELD_UBO, v_offset / 8);
ipu_ch_param_write_field(p, IPU_FIELD_VBO, u_offset / 8);
break;
} }
} }
EXPORT_SYMBOL_GPL(ipu_cpmem_set_yuv_planar_full); EXPORT_SYMBOL_GPL(ipu_cpmem_set_yuv_planar_full);
...@@ -246,10 +251,11 @@ void ipu_cpmem_set_yuv_planar(struct ipu_ch_param __iomem *p, u32 pixel_format, ...@@ -246,10 +251,11 @@ void ipu_cpmem_set_yuv_planar(struct ipu_ch_param __iomem *p, u32 pixel_format,
switch (pixel_format) { switch (pixel_format) {
case V4L2_PIX_FMT_YUV420: case V4L2_PIX_FMT_YUV420:
case V4L2_PIX_FMT_YVU420:
uv_stride = stride / 2; uv_stride = stride / 2;
u_offset = stride * height; u_offset = stride * height;
v_offset = u_offset + (uv_stride * height / 2); v_offset = u_offset + (uv_stride * height / 2);
ipu_cpmem_set_yuv_planar_full(p, V4L2_PIX_FMT_YUV420, stride, ipu_cpmem_set_yuv_planar_full(p, pixel_format, stride,
u_offset, v_offset); u_offset, v_offset);
break; break;
} }
...@@ -307,6 +313,7 @@ int ipu_cpmem_set_fmt(struct ipu_ch_param __iomem *cpmem, u32 pixelformat) ...@@ -307,6 +313,7 @@ int ipu_cpmem_set_fmt(struct ipu_ch_param __iomem *cpmem, u32 pixelformat)
{ {
switch (pixelformat) { switch (pixelformat) {
case V4L2_PIX_FMT_YUV420: case V4L2_PIX_FMT_YUV420:
case V4L2_PIX_FMT_YVU420:
/* pix format */ /* pix format */
ipu_ch_param_write_field(cpmem, IPU_FIELD_PFS, 2); ipu_ch_param_write_field(cpmem, IPU_FIELD_PFS, 2);
/* burst size */ /* burst size */
...@@ -369,6 +376,7 @@ int ipu_cpmem_set_image(struct ipu_ch_param __iomem *cpmem, ...@@ -369,6 +376,7 @@ int ipu_cpmem_set_image(struct ipu_ch_param __iomem *cpmem,
switch (pix->pixelformat) { switch (pix->pixelformat) {
case V4L2_PIX_FMT_YUV420: case V4L2_PIX_FMT_YUV420:
case V4L2_PIX_FMT_YVU420:
y_offset = Y_OFFSET(pix, image->rect.left, image->rect.top); y_offset = Y_OFFSET(pix, image->rect.left, image->rect.top);
u_offset = U_OFFSET(pix, image->rect.left, u_offset = U_OFFSET(pix, image->rect.left,
image->rect.top) - y_offset; image->rect.top) - y_offset;
...@@ -414,6 +422,7 @@ enum ipu_color_space ipu_pixelformat_to_colorspace(u32 pixelformat) ...@@ -414,6 +422,7 @@ enum ipu_color_space ipu_pixelformat_to_colorspace(u32 pixelformat)
{ {
switch (pixelformat) { switch (pixelformat) {
case V4L2_PIX_FMT_YUV420: case V4L2_PIX_FMT_YUV420:
case V4L2_PIX_FMT_YVU420:
case V4L2_PIX_FMT_UYVY: case V4L2_PIX_FMT_UYVY:
case V4L2_PIX_FMT_YUYV: case V4L2_PIX_FMT_YUYV:
return IPUV3_COLORSPACE_YUV; return IPUV3_COLORSPACE_YUV;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment