[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20240220-v6-8-topic-rk3568-vicap-v1-10-2680a1fa640b@wolfvision.net>
Date: Tue, 20 Feb 2024 10:39:20 +0100
From: Michael Riesch <michael.riesch@...fvision.net>
To: Mehdi Djait <mehdi.djait.k@...il.com>,
Théo Lebrun <theo.lebrun@...tlin.com>,
Thomas Petazzoni <thomas.petazzoni@...tlin.com>,
Laurent Pinchart <laurent.pinchart@...asonboard.com>,
Mauro Carvalho Chehab <mchehab@...nel.org>,
Rob Herring <robh+dt@...nel.org>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@...aro.org>,
Conor Dooley <conor+dt@...nel.org>, Heiko Stuebner <heiko@...ech.de>,
Sakari Ailus <sakari.ailus@...ux.intel.com>
Cc: linux-media@...r.kernel.org, devicetree@...r.kernel.org,
linux-kernel@...r.kernel.org, linux-arm-kernel@...ts.infradead.org,
linux-rockchip@...ts.infradead.org,
Michael Riesch <michael.riesch@...fvision.net>
Subject: [PATCH 10/14] media: rockchip: cif: add variant specific input
format list
The different variants of the Rockchip CIF may feature different input
formats. Add a variant specific input format list to account for this.
Signed-off-by: Michael Riesch <michael.riesch@...fvision.net>
---
drivers/media/platform/rockchip/cif/cif-capture.c | 154 +---------------------
drivers/media/platform/rockchip/cif/cif-common.h | 2 +
drivers/media/platform/rockchip/cif/cif-dev.c | 147 +++++++++++++++++++++
3 files changed, 154 insertions(+), 149 deletions(-)
diff --git a/drivers/media/platform/rockchip/cif/cif-capture.c b/drivers/media/platform/rockchip/cif/cif-capture.c
index c80a52028a21..b26e6023c2b0 100644
--- a/drivers/media/platform/rockchip/cif/cif-capture.c
+++ b/drivers/media/platform/rockchip/cif/cif-capture.c
@@ -109,154 +109,10 @@ static struct cif_output_fmt out_fmts[] = {
}
};
-static const struct cif_input_fmt in_fmts[] = {
- {
- .mbus_code = MEDIA_BUS_FMT_YUYV8_2X8,
- .dvp_fmt_val = CIF_FORMAT_YUV_INPUT_422 |
- CIF_FORMAT_YUV_INPUT_ORDER_YUYV,
- .fmt_type = CIF_FMT_TYPE_YUV,
- .field = V4L2_FIELD_NONE,
- }, {
- .mbus_code = MEDIA_BUS_FMT_YUYV8_2X8,
- .dvp_fmt_val = CIF_FORMAT_YUV_INPUT_422 |
- CIF_FORMAT_YUV_INPUT_ORDER_YUYV,
- .fmt_type = CIF_FMT_TYPE_YUV,
- .field = V4L2_FIELD_INTERLACED,
- }, {
- .mbus_code = MEDIA_BUS_FMT_YVYU8_2X8,
- .dvp_fmt_val = CIF_FORMAT_YUV_INPUT_422 |
- CIF_FORMAT_YUV_INPUT_ORDER_YVYU,
- .fmt_type = CIF_FMT_TYPE_YUV,
- .field = V4L2_FIELD_NONE,
- }, {
- .mbus_code = MEDIA_BUS_FMT_YVYU8_2X8,
- .dvp_fmt_val = CIF_FORMAT_YUV_INPUT_422 |
- CIF_FORMAT_YUV_INPUT_ORDER_YVYU,
- .fmt_type = CIF_FMT_TYPE_YUV,
- .field = V4L2_FIELD_INTERLACED,
- }, {
- .mbus_code = MEDIA_BUS_FMT_UYVY8_2X8,
- .dvp_fmt_val = CIF_FORMAT_YUV_INPUT_422 |
- CIF_FORMAT_YUV_INPUT_ORDER_UYVY,
- .fmt_type = CIF_FMT_TYPE_YUV,
- .field = V4L2_FIELD_NONE,
- }, {
- .mbus_code = MEDIA_BUS_FMT_UYVY8_2X8,
- .dvp_fmt_val = CIF_FORMAT_YUV_INPUT_422 |
- CIF_FORMAT_YUV_INPUT_ORDER_UYVY,
- .fmt_type = CIF_FMT_TYPE_YUV,
- .field = V4L2_FIELD_INTERLACED,
- }, {
- .mbus_code = MEDIA_BUS_FMT_VYUY8_2X8,
- .dvp_fmt_val = CIF_FORMAT_YUV_INPUT_422 |
- CIF_FORMAT_YUV_INPUT_ORDER_VYUY,
- .fmt_type = CIF_FMT_TYPE_YUV,
- .field = V4L2_FIELD_NONE,
- }, {
- .mbus_code = MEDIA_BUS_FMT_VYUY8_2X8,
- .dvp_fmt_val = CIF_FORMAT_YUV_INPUT_422 |
- CIF_FORMAT_YUV_INPUT_ORDER_VYUY,
- .fmt_type = CIF_FMT_TYPE_YUV,
- .field = V4L2_FIELD_INTERLACED,
- }, {
- .mbus_code = MEDIA_BUS_FMT_SBGGR8_1X8,
- .dvp_fmt_val = CIF_FORMAT_INPUT_MODE_RAW |
- CIF_FORMAT_RAW_DATA_WIDTH_8,
- .fmt_type = CIF_FMT_TYPE_RAW,
- .field = V4L2_FIELD_NONE,
- }, {
- .mbus_code = MEDIA_BUS_FMT_SGBRG8_1X8,
- .dvp_fmt_val = CIF_FORMAT_INPUT_MODE_RAW |
- CIF_FORMAT_RAW_DATA_WIDTH_8,
- .fmt_type = CIF_FMT_TYPE_RAW,
- .field = V4L2_FIELD_NONE,
- }, {
- .mbus_code = MEDIA_BUS_FMT_SGRBG8_1X8,
- .dvp_fmt_val = CIF_FORMAT_INPUT_MODE_RAW |
- CIF_FORMAT_RAW_DATA_WIDTH_8,
- .fmt_type = CIF_FMT_TYPE_RAW,
- .field = V4L2_FIELD_NONE,
- }, {
- .mbus_code = MEDIA_BUS_FMT_SRGGB8_1X8,
- .dvp_fmt_val = CIF_FORMAT_INPUT_MODE_RAW |
- CIF_FORMAT_RAW_DATA_WIDTH_8,
- .fmt_type = CIF_FMT_TYPE_RAW,
- .field = V4L2_FIELD_NONE,
- }, {
- .mbus_code = MEDIA_BUS_FMT_SBGGR10_1X10,
- .dvp_fmt_val = CIF_FORMAT_INPUT_MODE_RAW |
- CIF_FORMAT_RAW_DATA_WIDTH_10,
- .fmt_type = CIF_FMT_TYPE_RAW,
- .field = V4L2_FIELD_NONE,
- }, {
- .mbus_code = MEDIA_BUS_FMT_SGBRG10_1X10,
- .dvp_fmt_val = CIF_FORMAT_INPUT_MODE_RAW |
- CIF_FORMAT_RAW_DATA_WIDTH_10,
- .fmt_type = CIF_FMT_TYPE_RAW,
- .field = V4L2_FIELD_NONE,
- }, {
- .mbus_code = MEDIA_BUS_FMT_SGRBG10_1X10,
- .dvp_fmt_val = CIF_FORMAT_INPUT_MODE_RAW |
- CIF_FORMAT_RAW_DATA_WIDTH_10,
- .fmt_type = CIF_FMT_TYPE_RAW,
- .field = V4L2_FIELD_NONE,
- }, {
- .mbus_code = MEDIA_BUS_FMT_SRGGB10_1X10,
- .dvp_fmt_val = CIF_FORMAT_INPUT_MODE_RAW |
- CIF_FORMAT_RAW_DATA_WIDTH_10,
- .fmt_type = CIF_FMT_TYPE_RAW,
- .field = V4L2_FIELD_NONE,
- }, {
- .mbus_code = MEDIA_BUS_FMT_SBGGR12_1X12,
- .dvp_fmt_val = CIF_FORMAT_INPUT_MODE_RAW |
- CIF_FORMAT_RAW_DATA_WIDTH_12,
- .fmt_type = CIF_FMT_TYPE_RAW,
- .field = V4L2_FIELD_NONE,
- }, {
- .mbus_code = MEDIA_BUS_FMT_SGBRG12_1X12,
- .dvp_fmt_val = CIF_FORMAT_INPUT_MODE_RAW |
- CIF_FORMAT_RAW_DATA_WIDTH_12,
- .fmt_type = CIF_FMT_TYPE_RAW,
- .field = V4L2_FIELD_NONE,
- }, {
- .mbus_code = MEDIA_BUS_FMT_SGRBG12_1X12,
- .dvp_fmt_val = CIF_FORMAT_INPUT_MODE_RAW |
- CIF_FORMAT_RAW_DATA_WIDTH_12,
- .fmt_type = CIF_FMT_TYPE_RAW,
- .field = V4L2_FIELD_NONE,
- }, {
- .mbus_code = MEDIA_BUS_FMT_SRGGB12_1X12,
- .dvp_fmt_val = CIF_FORMAT_INPUT_MODE_RAW |
- CIF_FORMAT_RAW_DATA_WIDTH_12,
- .fmt_type = CIF_FMT_TYPE_RAW,
- .field = V4L2_FIELD_NONE,
- }, {
- .mbus_code = MEDIA_BUS_FMT_RGB888_1X24,
- .field = V4L2_FIELD_NONE,
- }, {
- .mbus_code = MEDIA_BUS_FMT_Y8_1X8,
- .dvp_fmt_val = CIF_FORMAT_INPUT_MODE_RAW |
- CIF_FORMAT_RAW_DATA_WIDTH_8,
- .fmt_type = CIF_FMT_TYPE_RAW,
- .field = V4L2_FIELD_NONE,
- }, {
- .mbus_code = MEDIA_BUS_FMT_Y10_1X10,
- .dvp_fmt_val = CIF_FORMAT_INPUT_MODE_RAW |
- CIF_FORMAT_RAW_DATA_WIDTH_10,
- .fmt_type = CIF_FMT_TYPE_RAW,
- .field = V4L2_FIELD_NONE,
- }, {
- .mbus_code = MEDIA_BUS_FMT_Y12_1X12,
- .dvp_fmt_val = CIF_FORMAT_INPUT_MODE_RAW |
- CIF_FORMAT_RAW_DATA_WIDTH_12,
- .fmt_type = CIF_FMT_TYPE_RAW,
- .field = V4L2_FIELD_NONE,
- }
-};
-
-static const struct
-cif_input_fmt *get_input_fmt(struct v4l2_subdev *sd)
+static const struct cif_input_fmt *get_input_fmt(struct cif_device *cif_dev,
+ struct v4l2_subdev *sd)
{
+ const struct cif_input_fmt *in_fmts = cif_dev->match_data->in_fmts;
struct v4l2_subdev_format fmt;
u32 i;
@@ -264,7 +120,7 @@ cif_input_fmt *get_input_fmt(struct v4l2_subdev *sd)
fmt.pad = 0;
v4l2_subdev_call(sd, pad, get_fmt, NULL, &fmt);
- for (i = 0; i < ARRAY_SIZE(in_fmts); i++)
+ for (i = 0; i < cif_dev->match_data->in_fmts_num; i++)
if (fmt.format.code == in_fmts[i].mbus_code &&
fmt.format.field == in_fmts[i].field)
return &in_fmts[i];
@@ -550,7 +406,7 @@ static int cif_start_streaming(struct vb2_queue *queue, unsigned int count)
sd = cif_dev->remote.sd;
- stream->cif_fmt_in = get_input_fmt(cif_dev->remote.sd);
+ stream->cif_fmt_in = get_input_fmt(cif_dev, sd);
if (!stream->cif_fmt_in)
goto runtime_put;
diff --git a/drivers/media/platform/rockchip/cif/cif-common.h b/drivers/media/platform/rockchip/cif/cif-common.h
index ae8fedeadd1c..84a7545422e1 100644
--- a/drivers/media/platform/rockchip/cif/cif-common.h
+++ b/drivers/media/platform/rockchip/cif/cif-common.h
@@ -97,6 +97,8 @@ static inline struct cif_stream *to_cif_stream(struct video_device *vdev)
struct cif_match_data {
struct clk_bulk_data *clks;
int clks_num;
+ const struct cif_input_fmt *in_fmts;
+ int in_fmts_num;
void (*grf_dvp_setup)(struct cif_device *cif_dev);
};
diff --git a/drivers/media/platform/rockchip/cif/cif-dev.c b/drivers/media/platform/rockchip/cif/cif-dev.c
index b75b76508793..fb80e8f8dcab 100644
--- a/drivers/media/platform/rockchip/cif/cif-dev.c
+++ b/drivers/media/platform/rockchip/cif/cif-dev.c
@@ -132,9 +132,156 @@ static struct clk_bulk_data px30_cif_clks[] = {
{ .id = "pclk", },
};
+static const struct cif_input_fmt px30_in_fmts[] = {
+ {
+ .mbus_code = MEDIA_BUS_FMT_YUYV8_2X8,
+ .dvp_fmt_val = CIF_FORMAT_YUV_INPUT_422 |
+ CIF_FORMAT_YUV_INPUT_ORDER_YUYV,
+ .fmt_type = CIF_FMT_TYPE_YUV,
+ .field = V4L2_FIELD_NONE,
+ }, {
+ .mbus_code = MEDIA_BUS_FMT_YUYV8_2X8,
+ .dvp_fmt_val = CIF_FORMAT_YUV_INPUT_422 |
+ CIF_FORMAT_YUV_INPUT_ORDER_YUYV,
+ .fmt_type = CIF_FMT_TYPE_YUV,
+ .field = V4L2_FIELD_INTERLACED,
+ }, {
+ .mbus_code = MEDIA_BUS_FMT_YVYU8_2X8,
+ .dvp_fmt_val = CIF_FORMAT_YUV_INPUT_422 |
+ CIF_FORMAT_YUV_INPUT_ORDER_YVYU,
+ .fmt_type = CIF_FMT_TYPE_YUV,
+ .field = V4L2_FIELD_NONE,
+ }, {
+ .mbus_code = MEDIA_BUS_FMT_YVYU8_2X8,
+ .dvp_fmt_val = CIF_FORMAT_YUV_INPUT_422 |
+ CIF_FORMAT_YUV_INPUT_ORDER_YVYU,
+ .fmt_type = CIF_FMT_TYPE_YUV,
+ .field = V4L2_FIELD_INTERLACED,
+ }, {
+ .mbus_code = MEDIA_BUS_FMT_UYVY8_2X8,
+ .dvp_fmt_val = CIF_FORMAT_YUV_INPUT_422 |
+ CIF_FORMAT_YUV_INPUT_ORDER_UYVY,
+ .fmt_type = CIF_FMT_TYPE_YUV,
+ .field = V4L2_FIELD_NONE,
+ }, {
+ .mbus_code = MEDIA_BUS_FMT_UYVY8_2X8,
+ .dvp_fmt_val = CIF_FORMAT_YUV_INPUT_422 |
+ CIF_FORMAT_YUV_INPUT_ORDER_UYVY,
+ .fmt_type = CIF_FMT_TYPE_YUV,
+ .field = V4L2_FIELD_INTERLACED,
+ }, {
+ .mbus_code = MEDIA_BUS_FMT_VYUY8_2X8,
+ .dvp_fmt_val = CIF_FORMAT_YUV_INPUT_422 |
+ CIF_FORMAT_YUV_INPUT_ORDER_VYUY,
+ .fmt_type = CIF_FMT_TYPE_YUV,
+ .field = V4L2_FIELD_NONE,
+ }, {
+ .mbus_code = MEDIA_BUS_FMT_VYUY8_2X8,
+ .dvp_fmt_val = CIF_FORMAT_YUV_INPUT_422 |
+ CIF_FORMAT_YUV_INPUT_ORDER_VYUY,
+ .fmt_type = CIF_FMT_TYPE_YUV,
+ .field = V4L2_FIELD_INTERLACED,
+ }, {
+ .mbus_code = MEDIA_BUS_FMT_SBGGR8_1X8,
+ .dvp_fmt_val = CIF_FORMAT_INPUT_MODE_RAW |
+ CIF_FORMAT_RAW_DATA_WIDTH_8,
+ .fmt_type = CIF_FMT_TYPE_RAW,
+ .field = V4L2_FIELD_NONE,
+ }, {
+ .mbus_code = MEDIA_BUS_FMT_SGBRG8_1X8,
+ .dvp_fmt_val = CIF_FORMAT_INPUT_MODE_RAW |
+ CIF_FORMAT_RAW_DATA_WIDTH_8,
+ .fmt_type = CIF_FMT_TYPE_RAW,
+ .field = V4L2_FIELD_NONE,
+ }, {
+ .mbus_code = MEDIA_BUS_FMT_SGRBG8_1X8,
+ .dvp_fmt_val = CIF_FORMAT_INPUT_MODE_RAW |
+ CIF_FORMAT_RAW_DATA_WIDTH_8,
+ .fmt_type = CIF_FMT_TYPE_RAW,
+ .field = V4L2_FIELD_NONE,
+ }, {
+ .mbus_code = MEDIA_BUS_FMT_SRGGB8_1X8,
+ .dvp_fmt_val = CIF_FORMAT_INPUT_MODE_RAW |
+ CIF_FORMAT_RAW_DATA_WIDTH_8,
+ .fmt_type = CIF_FMT_TYPE_RAW,
+ .field = V4L2_FIELD_NONE,
+ }, {
+ .mbus_code = MEDIA_BUS_FMT_SBGGR10_1X10,
+ .dvp_fmt_val = CIF_FORMAT_INPUT_MODE_RAW |
+ CIF_FORMAT_RAW_DATA_WIDTH_10,
+ .fmt_type = CIF_FMT_TYPE_RAW,
+ .field = V4L2_FIELD_NONE,
+ }, {
+ .mbus_code = MEDIA_BUS_FMT_SGBRG10_1X10,
+ .dvp_fmt_val = CIF_FORMAT_INPUT_MODE_RAW |
+ CIF_FORMAT_RAW_DATA_WIDTH_10,
+ .fmt_type = CIF_FMT_TYPE_RAW,
+ .field = V4L2_FIELD_NONE,
+ }, {
+ .mbus_code = MEDIA_BUS_FMT_SGRBG10_1X10,
+ .dvp_fmt_val = CIF_FORMAT_INPUT_MODE_RAW |
+ CIF_FORMAT_RAW_DATA_WIDTH_10,
+ .fmt_type = CIF_FMT_TYPE_RAW,
+ .field = V4L2_FIELD_NONE,
+ }, {
+ .mbus_code = MEDIA_BUS_FMT_SRGGB10_1X10,
+ .dvp_fmt_val = CIF_FORMAT_INPUT_MODE_RAW |
+ CIF_FORMAT_RAW_DATA_WIDTH_10,
+ .fmt_type = CIF_FMT_TYPE_RAW,
+ .field = V4L2_FIELD_NONE,
+ }, {
+ .mbus_code = MEDIA_BUS_FMT_SBGGR12_1X12,
+ .dvp_fmt_val = CIF_FORMAT_INPUT_MODE_RAW |
+ CIF_FORMAT_RAW_DATA_WIDTH_12,
+ .fmt_type = CIF_FMT_TYPE_RAW,
+ .field = V4L2_FIELD_NONE,
+ }, {
+ .mbus_code = MEDIA_BUS_FMT_SGBRG12_1X12,
+ .dvp_fmt_val = CIF_FORMAT_INPUT_MODE_RAW |
+ CIF_FORMAT_RAW_DATA_WIDTH_12,
+ .fmt_type = CIF_FMT_TYPE_RAW,
+ .field = V4L2_FIELD_NONE,
+ }, {
+ .mbus_code = MEDIA_BUS_FMT_SGRBG12_1X12,
+ .dvp_fmt_val = CIF_FORMAT_INPUT_MODE_RAW |
+ CIF_FORMAT_RAW_DATA_WIDTH_12,
+ .fmt_type = CIF_FMT_TYPE_RAW,
+ .field = V4L2_FIELD_NONE,
+ }, {
+ .mbus_code = MEDIA_BUS_FMT_SRGGB12_1X12,
+ .dvp_fmt_val = CIF_FORMAT_INPUT_MODE_RAW |
+ CIF_FORMAT_RAW_DATA_WIDTH_12,
+ .fmt_type = CIF_FMT_TYPE_RAW,
+ .field = V4L2_FIELD_NONE,
+ }, {
+ .mbus_code = MEDIA_BUS_FMT_RGB888_1X24,
+ .field = V4L2_FIELD_NONE,
+ }, {
+ .mbus_code = MEDIA_BUS_FMT_Y8_1X8,
+ .dvp_fmt_val = CIF_FORMAT_INPUT_MODE_RAW |
+ CIF_FORMAT_RAW_DATA_WIDTH_8,
+ .fmt_type = CIF_FMT_TYPE_RAW,
+ .field = V4L2_FIELD_NONE,
+ }, {
+ .mbus_code = MEDIA_BUS_FMT_Y10_1X10,
+ .dvp_fmt_val = CIF_FORMAT_INPUT_MODE_RAW |
+ CIF_FORMAT_RAW_DATA_WIDTH_10,
+ .fmt_type = CIF_FMT_TYPE_RAW,
+ .field = V4L2_FIELD_NONE,
+ }, {
+ .mbus_code = MEDIA_BUS_FMT_Y12_1X12,
+ .dvp_fmt_val = CIF_FORMAT_INPUT_MODE_RAW |
+ CIF_FORMAT_RAW_DATA_WIDTH_12,
+ .fmt_type = CIF_FMT_TYPE_RAW,
+ .field = V4L2_FIELD_NONE,
+ }
+};
+
static const struct cif_match_data px30_cif_match_data = {
.clks = px30_cif_clks,
.clks_num = ARRAY_SIZE(px30_cif_clks),
+ .in_fmts = px30_in_fmts,
+ .in_fmts_num = ARRAY_SIZE(px30_in_fmts),
};
static const struct of_device_id cif_plat_of_match[] = {
--
2.30.2
Powered by blists - more mailing lists