[PATCH 4/7] media: v4l2-isp: Use centrally-held data in framework
Daniel Scally
dan.scally at ideasonboard.com
Wed Nov 4 04:28:19 PST 2026
Update the framework's APIs to use the centrally held data rather
than require users to pass data in to each function call.
Signed-off-by: Daniel Scally <dan.scally at ideasonboard.com>
---
drivers/media/platform/amlogic/c3/isp/c3-isp-params.c | 9 +++------
drivers/media/platform/arm/mali-c55/mali-c55-params.c | 8 ++------
drivers/media/platform/dreamchip/rppx1/rpp_params.c | 7 ++-----
.../media/platform/rockchip/rkisp1/rkisp1-params.c | 9 +++------
drivers/media/v4l2-core/v4l2-isp.c | 19 +++++++++----------
include/media/v4l2-isp.h | 18 ++++++------------
6 files changed, 25 insertions(+), 45 deletions(-)
diff --git a/drivers/media/platform/amlogic/c3/isp/c3-isp-params.c b/drivers/media/platform/amlogic/c3/isp/c3-isp-params.c
index 25f6a7d9bad9d61d641690f43faceaae0f938da5..f0b330520f97ad3bb701de3aed35670158508829 100644
--- a/drivers/media/platform/amlogic/c3/isp/c3-isp-params.c
+++ b/drivers/media/platform/amlogic/c3/isp/c3-isp-params.c
@@ -809,8 +809,7 @@ static int c3_isp_params_vb2_buf_prepare(struct vb2_buffer *vb)
struct c3_isp_params_cfg *cfg = buf->cfg;
int ret;
- ret = v4l2_isp_params_validate_buffer_size(params->isp->dev, vb,
- params->vfmt.fmt.meta.buffersize);
+ ret = v4l2_isp_params_validate_buffer_size(¶ms->v4l2_isp, vb);
if (ret)
return ret;
@@ -820,10 +819,8 @@ static int c3_isp_params_vb2_buf_prepare(struct vb2_buffer *vb)
*/
memcpy(cfg, usr_cfg, payload_size);
- return v4l2_isp_params_validate_buffer(params->isp->dev, vb,
- (struct v4l2_isp_params_buffer *)cfg,
- c3_isp_params_block_types_info,
- ARRAY_SIZE(c3_isp_params_block_types_info));
+ return v4l2_isp_params_validate_buffer(¶ms->v4l2_isp, vb,
+ (struct v4l2_isp_params_buffer *)cfg);
}
static int c3_isp_params_vb2_buf_init(struct vb2_buffer *vb)
diff --git a/drivers/media/platform/arm/mali-c55/mali-c55-params.c b/drivers/media/platform/arm/mali-c55/mali-c55-params.c
index 06509152a51a1d47355d3c7c9985112ce3c20450..7b9d2650ce8730ccc05eee0c9dc33a88d022acf1 100644
--- a/drivers/media/platform/arm/mali-c55/mali-c55-params.c
+++ b/drivers/media/platform/arm/mali-c55/mali-c55-params.c
@@ -707,14 +707,12 @@ static int mali_c55_params_buf_prepare(struct vb2_buffer *vb)
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
struct mali_c55_params_buf *buf = to_mali_c55_params_buf(vbuf);
struct v4l2_isp_params_buffer *config = vb2_plane_vaddr(vb, 0);
- struct mali_c55 *mali_c55 = params->mali_c55;
int ret;
if (!config)
return -EFAULT;
- ret = v4l2_isp_params_validate_buffer_size(mali_c55->dev, vb,
- v4l2_isp_buffer_size(MALI_C55_PARAMS_MAX_SIZE));
+ ret = v4l2_isp_params_validate_buffer_size(¶ms->v4l2_isp, vb);
if (ret)
return ret;
@@ -726,9 +724,7 @@ static int mali_c55_params_buf_prepare(struct vb2_buffer *vb)
memcpy(buf->config, config, v4l2_isp_buffer_size(MALI_C55_PARAMS_MAX_SIZE));
- return v4l2_isp_params_validate_buffer(mali_c55->dev, vb, buf->config,
- mali_c55_params_block_types_info,
- ARRAY_SIZE(mali_c55_params_block_types_info));
+ return v4l2_isp_params_validate_buffer(¶ms->v4l2_isp, vb, buf->config);
}
static void mali_c55_params_buf_queue(struct vb2_buffer *vb)
diff --git a/drivers/media/platform/dreamchip/rppx1/rpp_params.c b/drivers/media/platform/dreamchip/rppx1/rpp_params.c
index 5b8b471198ec1d540f31c0ac1b15d0d54bd808fc..aff3f3a997b4134b753fd1e1faf2058216f4b939 100644
--- a/drivers/media/platform/dreamchip/rppx1/rpp_params.c
+++ b/drivers/media/platform/dreamchip/rppx1/rpp_params.c
@@ -57,16 +57,13 @@ int rppx1_params(struct rppx1 *rpp, struct vb2_buffer *vb,
size_t block_offset;
int ret;
- ret = v4l2_isp_params_validate_buffer_size(rpp->dev, vb,
- v4l2_isp_buffer_size(RPPX1_PARAMS_MAX_SIZE));
+ ret = v4l2_isp_params_validate_buffer_size(&rpp->isp, vb);
if (ret)
return ret;
cfg = vb2_plane_vaddr(&vbuf->vb2_buf, 0);
- ret = v4l2_isp_params_validate_buffer(rpp->dev, vb, cfg,
- rppx1_ext_params_blocks_info,
- ARRAY_SIZE(rppx1_ext_params_blocks_info));
+ ret = v4l2_isp_params_validate_buffer(&rpp->isp, vb, cfg);
if (ret)
return ret;
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
index 756332d8bd154c3175ad5d563f6e5cf615f42499..8974c520d1879f3f0f642819a41984f6ac3ee01d 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
@@ -2735,8 +2735,7 @@ static int rkisp1_params_prepare_ext_params(struct rkisp1_params *params,
vb2_plane_vaddr(&vbuf->vb2_buf, 0);
int ret;
- ret = v4l2_isp_params_validate_buffer_size(params->rkisp1->dev, vb,
- params->metafmt->buffersize);
+ ret = v4l2_isp_params_validate_buffer_size(¶ms->v4l2_isp, vb);
if (ret)
return ret;
@@ -2746,10 +2745,8 @@ static int rkisp1_params_prepare_ext_params(struct rkisp1_params *params,
*/
memcpy(cfg, usr_cfg, payload_size);
- return v4l2_isp_params_validate_buffer(params->rkisp1->dev, vb,
- (struct v4l2_isp_params_buffer *)cfg,
- rkisp1_ext_params_block_types_info,
- ARRAY_SIZE(rkisp1_ext_params_block_types_info));
+ return v4l2_isp_params_validate_buffer(¶ms->v4l2_isp, vb,
+ (struct v4l2_isp_params_buffer *)cfg);
}
static int rkisp1_params_vb2_buf_prepare(struct vb2_buffer *vb)
diff --git a/drivers/media/v4l2-core/v4l2-isp.c b/drivers/media/v4l2-core/v4l2-isp.c
index a979c0690d19d9956a45657561b510546b3aa8c2..925632e1037db18f0948ceb0ce7c652e167516c9 100644
--- a/drivers/media/v4l2-core/v4l2-isp.c
+++ b/drivers/media/v4l2-core/v4l2-isp.c
@@ -54,15 +54,15 @@ int v4l2_isp_validate(struct v4l2_isp *isp)
}
EXPORT_SYMBOL_GPL(v4l2_isp_validate);
-int v4l2_isp_params_validate_buffer_size(struct device *dev,
- struct vb2_buffer *vb,
- size_t max_size)
+int v4l2_isp_params_validate_buffer_size(struct v4l2_isp *isp,
+ struct vb2_buffer *vb)
{
size_t header_size = offsetof(struct v4l2_isp_params_buffer, data);
size_t payload_size = vb2_get_plane_payload(vb, 0);
+ struct device *dev = isp->dev;
/* Payload size can't be greater than the destination buffer size */
- if (payload_size > max_size) {
+ if (payload_size > isp->params.max_size) {
dev_dbg(dev, "Payload size is too large: %zu\n", payload_size);
return -EINVAL;
}
@@ -77,13 +77,12 @@ int v4l2_isp_params_validate_buffer_size(struct device *dev,
}
EXPORT_SYMBOL_GPL(v4l2_isp_params_validate_buffer_size);
-int v4l2_isp_params_validate_buffer(struct device *dev, struct vb2_buffer *vb,
- const struct v4l2_isp_params_buffer *buffer,
- const struct v4l2_isp_params_block_type_info *type_info,
- size_t num_block_types)
+int v4l2_isp_params_validate_buffer(struct v4l2_isp *isp, struct vb2_buffer *vb,
+ const struct v4l2_isp_params_buffer *buffer)
{
size_t header_size = offsetof(struct v4l2_isp_params_buffer, data);
size_t payload_size = vb2_get_plane_payload(vb, 0);
+ struct device *dev = isp->dev;
size_t block_offset = 0;
size_t buffer_size;
@@ -118,7 +117,7 @@ int v4l2_isp_params_validate_buffer(struct device *dev, struct vb2_buffer *vb,
block = (const struct v4l2_isp_params_block_header *)
(buffer->data + block_offset);
- if (block->type >= num_block_types) {
+ if (block->type >= isp->params.num_block_types) {
dev_dbg(dev,
"Invalid block type %u at offset %zu\n",
block->type, block_offset);
@@ -147,7 +146,7 @@ int v4l2_isp_params_validate_buffer(struct device *dev, struct vb2_buffer *vb,
* with data that a later kernel, once it implements the type,
* would validate and possibly reject.
*/
- info = &type_info[block->type];
+ info = &isp->params.types_info[block->type];
if (!info->size) {
dev_dbg(dev, "Unsupported block type %u at offset %zu\n",
block->type, block_offset);
diff --git a/include/media/v4l2-isp.h b/include/media/v4l2-isp.h
index dc3e612ef79ea510ec1535f483fc16c6ec3d4569..b758d9b0e7f5c29cd8c4197f4a4a86cf3e5334fc 100644
--- a/include/media/v4l2-isp.h
+++ b/include/media/v4l2-isp.h
@@ -91,9 +91,8 @@ int v4l2_isp_validate(struct v4l2_isp *isp);
/**
* v4l2_isp_params_validate_buffer_size - Validate a V4L2 ISP buffer sizes
- * @dev: the driver's device pointer
+ * @isp: the driver's &struct v4l2_isp pointer
* @vb: the videobuf2 buffer
- * @max_size: the maximum allowed buffer size
*
* This function performs validation of the size of a V4L2 ISP parameters buffer
* before the driver can access the actual data buffer content.
@@ -106,17 +105,14 @@ int v4l2_isp_validate(struct v4l2_isp *isp);
* against @max_size and it's validated to be large enough to accommodate at
* least one ISP configuration block.
*/
-int v4l2_isp_params_validate_buffer_size(struct device *dev,
- struct vb2_buffer *vb,
- size_t max_size);
+int v4l2_isp_params_validate_buffer_size(struct v4l2_isp *isp,
+ struct vb2_buffer *vb);
/**
* v4l2_isp_params_validate_buffer - Validate a V4L2 ISP parameters buffer
- * @dev: the driver's device pointer
+ * @isp: the driver's &struct v4l2_isp pointer
* @vb: the videobuf2 buffer
* @buffer: the V4L2 ISP parameters buffer
- * @type_info: the array of per-block-type validation info
- * @num_block_types: the number of block types in the type_info array
*
* This function completes the validation of a V4L2 ISP parameters buffer,
* verifying each configuration block correctness before the driver can use
@@ -129,10 +125,8 @@ int v4l2_isp_params_validate_buffer_size(struct device *dev,
* to prevent userspace from modifying its content after it has been submitted
* to the driver, and then call this function to complete validation.
*/
-int v4l2_isp_params_validate_buffer(struct device *dev, struct vb2_buffer *vb,
- const struct v4l2_isp_params_buffer *buffer,
- const struct v4l2_isp_params_block_type_info *type_info,
- size_t num_block_types);
+int v4l2_isp_params_validate_buffer(struct v4l2_isp *isp, struct vb2_buffer *vb,
+ const struct v4l2_isp_params_buffer *buffer);
/**
* struct v4l2_isp_stats_block_type_info - V4L2 ISP stats per-block-type info
--
2.43.0
More information about the Linux-rockchip
mailing list