Commit 35deee14 authored by Chen-Yu Tsai's avatar Chen-Yu Tsai Committed by Mauro Carvalho Chehab

media: sun6i: Add support for JPEG media bus format

The CSI controller can take raw data from the data bus and output it
directly to capture buffers. This can be used to support the JPEG media
bus format.

While the controller can report minimum and maximum bytes per line, it
has no way to report how many lines were captured in the last frame.
Thus, even when the on-bus data is framed correctly, we have no way to
accertain the actual amount of data captured, unless we scan the buffer
for JPEG EOI markers, or sequential zeros. For now we leave bytesused
alone, and leave it up to userspace applications to parse the data.
Signed-off-by: default avatarChen-Yu Tsai <wens@csie.org>
Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+samsung@kernel.org>
parent 19b18e78
...@@ -150,6 +150,9 @@ bool sun6i_csi_is_format_supported(struct sun6i_csi *csi, ...@@ -150,6 +150,9 @@ bool sun6i_csi_is_format_supported(struct sun6i_csi *csi,
case V4L2_PIX_FMT_RGB565X: case V4L2_PIX_FMT_RGB565X:
return (mbus_code == MEDIA_BUS_FMT_RGB565_2X8_BE); return (mbus_code == MEDIA_BUS_FMT_RGB565_2X8_BE);
case V4L2_PIX_FMT_JPEG:
return (mbus_code == MEDIA_BUS_FMT_JPEG_1X8);
default: default:
dev_dbg(sdev->dev, "Unsupported pixformat: 0x%x\n", pixformat); dev_dbg(sdev->dev, "Unsupported pixformat: 0x%x\n", pixformat);
break; break;
...@@ -289,6 +292,9 @@ static enum csi_output_fmt get_csi_output_format(struct sun6i_csi_dev *sdev, ...@@ -289,6 +292,9 @@ static enum csi_output_fmt get_csi_output_format(struct sun6i_csi_dev *sdev,
case V4L2_PIX_FMT_RGB565X: case V4L2_PIX_FMT_RGB565X:
return buf_interlaced ? CSI_FRAME_RGB565 : CSI_FIELD_RGB565; return buf_interlaced ? CSI_FRAME_RGB565 : CSI_FIELD_RGB565;
case V4L2_PIX_FMT_JPEG:
return buf_interlaced ? CSI_FRAME_RAW_8 : CSI_FIELD_RAW_8;
default: default:
dev_warn(sdev->dev, "Unsupported pixformat: 0x%x\n", pixformat); dev_warn(sdev->dev, "Unsupported pixformat: 0x%x\n", pixformat);
break; break;
......
...@@ -94,6 +94,7 @@ static inline int sun6i_csi_get_bpp(unsigned int pixformat) ...@@ -94,6 +94,7 @@ static inline int sun6i_csi_get_bpp(unsigned int pixformat)
case V4L2_PIX_FMT_SGBRG8: case V4L2_PIX_FMT_SGBRG8:
case V4L2_PIX_FMT_SGRBG8: case V4L2_PIX_FMT_SGRBG8:
case V4L2_PIX_FMT_SRGGB8: case V4L2_PIX_FMT_SRGGB8:
case V4L2_PIX_FMT_JPEG:
return 8; return 8;
case V4L2_PIX_FMT_SBGGR10: case V4L2_PIX_FMT_SBGGR10:
case V4L2_PIX_FMT_SGBRG10: case V4L2_PIX_FMT_SGBRG10:
......
...@@ -58,6 +58,7 @@ static const u32 supported_pixformats[] = { ...@@ -58,6 +58,7 @@ static const u32 supported_pixformats[] = {
V4L2_PIX_FMT_YUV422P, V4L2_PIX_FMT_YUV422P,
V4L2_PIX_FMT_RGB565, V4L2_PIX_FMT_RGB565,
V4L2_PIX_FMT_RGB565X, V4L2_PIX_FMT_RGB565X,
V4L2_PIX_FMT_JPEG,
}; };
static bool is_pixformat_valid(unsigned int pixformat) static bool is_pixformat_valid(unsigned int pixformat)
......
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