[PATCH v7 18/28] media: sun6i-csi: Introduce format match structure, list and helper

Sakari Ailus sakari.ailus at iki.fi
Fri Nov 11 02:18:14 PST 2022


Hi Paul,

On Thu, Nov 03, 2022 at 05:31:03PM +0100, Paul Kocialkowski wrote:
> Introduce a list of mbus/pixel format combinations that need an exact
> match between the two sides. This is the case when using raw input
> configuration. The list will be used to replace the
> sun6i_csi_is_format_supported combinatory helper.

This patch introduces an unused function which generates a compiler warning
that is now treated as an error.

I'll squash this to the following patch that uses the function. I think the
commit message will do as-is.

> 
> Signed-off-by: Paul Kocialkowski <paul.kocialkowski at bootlin.com>
> Acked-by: Jernej Skrabec <jernej.skrabec at gmail.com>
> ---
>  .../sunxi/sun6i-csi/sun6i_csi_capture.c       | 117 ++++++++++++++++++
>  .../sunxi/sun6i-csi/sun6i_csi_capture.h       |   5 +
>  2 files changed, 122 insertions(+)
> 
> diff --git a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_capture.c b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_capture.c
> index 99b821d79357..7958419d3c6e 100644
> --- a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_capture.c
> +++ b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_capture.c
> @@ -227,6 +227,123 @@ struct sun6i_csi_capture_format *sun6i_csi_capture_format_find(u32 pixelformat)
>  	return NULL;
>  }
>  
> +/* RAW formats need an exact match between pixel and mbus formats. */
> +static const
> +struct sun6i_csi_capture_format_match sun6i_csi_capture_format_matches[] = {
> +	/* YUV420 */
> +	{
> +		.pixelformat	= V4L2_PIX_FMT_YUYV,
> +		.mbus_code	= MEDIA_BUS_FMT_YUYV8_2X8,
> +	},
> +	{
> +		.pixelformat	= V4L2_PIX_FMT_YUYV,
> +		.mbus_code	= MEDIA_BUS_FMT_YUYV8_1X16,
> +	},
> +	{
> +		.pixelformat	= V4L2_PIX_FMT_YVYU,
> +		.mbus_code	= MEDIA_BUS_FMT_YVYU8_2X8,
> +	},
> +	{
> +		.pixelformat	= V4L2_PIX_FMT_YVYU,
> +		.mbus_code	= MEDIA_BUS_FMT_YVYU8_1X16,
> +	},
> +	{
> +		.pixelformat	= V4L2_PIX_FMT_UYVY,
> +		.mbus_code	= MEDIA_BUS_FMT_UYVY8_2X8,
> +	},
> +	{
> +		.pixelformat	= V4L2_PIX_FMT_UYVY,
> +		.mbus_code	= MEDIA_BUS_FMT_UYVY8_1X16,
> +	},
> +	{
> +		.pixelformat	= V4L2_PIX_FMT_VYUY,
> +		.mbus_code	= MEDIA_BUS_FMT_VYUY8_2X8,
> +	},
> +	{
> +		.pixelformat	= V4L2_PIX_FMT_VYUY,
> +		.mbus_code	= MEDIA_BUS_FMT_VYUY8_1X16,
> +	},
> +	/* RGB */
> +	{
> +		.pixelformat	= V4L2_PIX_FMT_RGB565,
> +		.mbus_code	= MEDIA_BUS_FMT_RGB565_2X8_LE,
> +	},
> +	{
> +		.pixelformat	= V4L2_PIX_FMT_RGB565X,
> +		.mbus_code	= MEDIA_BUS_FMT_RGB565_2X8_BE,
> +	},
> +	/* Bayer */
> +	{
> +		.pixelformat	= V4L2_PIX_FMT_SBGGR8,
> +		.mbus_code	= MEDIA_BUS_FMT_SBGGR8_1X8,
> +	},
> +	{
> +		.pixelformat	= V4L2_PIX_FMT_SGBRG8,
> +		.mbus_code	= MEDIA_BUS_FMT_SGBRG8_1X8,
> +	},
> +	{
> +		.pixelformat	= V4L2_PIX_FMT_SGRBG8,
> +		.mbus_code	= MEDIA_BUS_FMT_SGRBG8_1X8,
> +	},
> +	{
> +		.pixelformat	= V4L2_PIX_FMT_SRGGB8,
> +		.mbus_code	= MEDIA_BUS_FMT_SRGGB8_1X8,
> +	},
> +	{
> +		.pixelformat	= V4L2_PIX_FMT_SBGGR10,
> +		.mbus_code	= MEDIA_BUS_FMT_SBGGR10_1X10,
> +	},
> +	{
> +		.pixelformat	= V4L2_PIX_FMT_SGBRG10,
> +		.mbus_code	= MEDIA_BUS_FMT_SGBRG10_1X10,
> +	},
> +	{
> +		.pixelformat	= V4L2_PIX_FMT_SGRBG10,
> +		.mbus_code	= MEDIA_BUS_FMT_SGRBG10_1X10,
> +	},
> +	{
> +		.pixelformat	= V4L2_PIX_FMT_SRGGB10,
> +		.mbus_code	= MEDIA_BUS_FMT_SRGGB10_1X10,
> +	},
> +	{
> +		.pixelformat	= V4L2_PIX_FMT_SBGGR12,
> +		.mbus_code	= MEDIA_BUS_FMT_SBGGR12_1X12,
> +	},
> +	{
> +		.pixelformat	= V4L2_PIX_FMT_SGBRG12,
> +		.mbus_code	= MEDIA_BUS_FMT_SGBRG12_1X12,
> +	},
> +	{
> +		.pixelformat	= V4L2_PIX_FMT_SGRBG12,
> +		.mbus_code	= MEDIA_BUS_FMT_SGRBG12_1X12,
> +	},
> +	{
> +		.pixelformat	= V4L2_PIX_FMT_SRGGB12,
> +		.mbus_code	= MEDIA_BUS_FMT_SRGGB12_1X12,
> +	},
> +	/* Compressed */
> +	{
> +		.pixelformat	= V4L2_PIX_FMT_JPEG,
> +		.mbus_code	= MEDIA_BUS_FMT_JPEG_1X8,
> +	},
> +};
> +
> +static bool sun6i_csi_capture_format_match(u32 pixelformat, u32 mbus_code)
> +{
> +	unsigned int i;
> +
> +	for (i = 0; i < ARRAY_SIZE(sun6i_csi_capture_format_matches); i++) {
> +		const struct sun6i_csi_capture_format_match *match =
> +			&sun6i_csi_capture_format_matches[i];
> +
> +		if (match->pixelformat == pixelformat &&
> +		    match->mbus_code == mbus_code)
> +			return true;
> +	}
> +
> +	return false;
> +}
> +
>  /* Capture */
>  
>  static void sun6i_csi_capture_irq_enable(struct sun6i_csi_device *csi_dev)
> diff --git a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_capture.h b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_capture.h
> index 4b1ff19edc2f..2605b16f091c 100644
> --- a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_capture.h
> +++ b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_capture.h
> @@ -27,6 +27,11 @@ struct sun6i_csi_capture_format {
>  	u32	hsize_len_factor;
>  };
>  
> +struct sun6i_csi_capture_format_match {
> +	u32	pixelformat;
> +	u32	mbus_code;
> +};
> +
>  #undef current
>  struct sun6i_csi_capture_state {
>  	struct list_head		queue;

-- 
Kind regards,

Sakari Ailus



More information about the linux-arm-kernel mailing list