[PATCH DNI 22/26] media: pisp_be: Add support for subdev state
Jacopo Mondi
jacopo.mondi at ideasonboard.com
Thu Jul 17 03:45:48 PDT 2025
Add support for subdev state in the ISP subdevice by providing an
init_state() callback and by calling init_finalize() before registering
the subdev.
Signed-off-by: Jacopo Mondi <jacopo.mondi at ideasonboard.com>
---
.../media/platform/raspberrypi/pisp_be/pisp_be.c | 41 ++++++++++++++++++++++
1 file changed, 41 insertions(+)
diff --git a/drivers/media/platform/raspberrypi/pisp_be/pisp_be.c b/drivers/media/platform/raspberrypi/pisp_be/pisp_be.c
index 423cb21298309c2ba51214b129fbf6e875370c98..5aec4f8979053500c870e71ce7171bbd1cac9606 100644
--- a/drivers/media/platform/raspberrypi/pisp_be/pisp_be.c
+++ b/drivers/media/platform/raspberrypi/pisp_be/pisp_be.c
@@ -1496,12 +1496,49 @@ static const struct v4l2_subdev_ops pispbe_sd_ops = {
.pad = &pispbe_pad_ops,
};
+static int pispbe_init_state(struct v4l2_subdev *sd,
+ struct v4l2_subdev_state *state)
+{
+ struct v4l2_mbus_framefmt *fmt;
+
+ for (unsigned int i = 0; i < PISPBE_NUM_NODES; i++) {
+ fmt = v4l2_subdev_state_get_format(state, i);
+
+ switch (i) {
+ case MAIN_INPUT_NODE:
+ fallthrough;
+ case OUTPUT0_NODE:
+ fallthrough;
+ case OUTPUT1_NODE:
+ fmt->width = 1920;
+ fmt->height = 1080;
+ fmt->code = MEDIA_BUS_FMT_FIXED;
+ break;
+ case CONFIG_NODE:
+ fmt->width = sizeof(struct pisp_be_tiles_config);
+ fmt->height = 1;
+ fmt->code = MEDIA_BUS_FMT_METADATA_FIXED;
+ break;
+ default:
+ /* No need to configure other nodes. */
+ continue;
+ }
+ }
+
+ return 0;
+}
+
+static const struct v4l2_subdev_internal_ops pispbe_subdev_internal_ops = {
+ .init_state = pispbe_init_state,
+};
+
static int pispbe_init_subdev(struct pispbe_dev *pispbe)
{
struct v4l2_subdev *sd = &pispbe->sd;
int ret;
v4l2_subdev_init(sd, &pispbe_sd_ops);
+ sd->internal_ops = &pispbe_subdev_internal_ops;
sd->entity.function = MEDIA_ENT_F_PROC_VIDEO_PIXEL_FORMATTER;
sd->owner = THIS_MODULE;
sd->dev = pispbe->dev;
@@ -1517,6 +1554,10 @@ static int pispbe_init_subdev(struct pispbe_dev *pispbe)
if (ret)
goto error;
+ ret = v4l2_subdev_init_finalize(sd);
+ if (ret)
+ goto error;
+
ret = v4l2_device_register_subdev(&pispbe->v4l2_dev, sd);
if (ret)
goto error;
--
2.49.0
More information about the linux-arm-kernel
mailing list