]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
media: i2c: og01a1b: Replace .open with .init_state internal ops
authorVladimir Zapolskiy <vladimir.zapolskiy@linaro.org>
Thu, 26 Feb 2026 13:37:37 +0000 (15:37 +0200)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Wed, 11 Mar 2026 00:05:36 +0000 (01:05 +0100)
Instead of wiping the camera sensor subdevice initial state on every
open() syscall it would be better to set the initial state just once.

Signed-off-by: Vladimir Zapolskiy <vladimir.zapolskiy@linaro.org>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
drivers/media/i2c/og01a1b.c

index 6c788bd512e9f3bdfdfe0425b5980920d486691e..c0ab230940f8300950481e79b7173ea37c44aabc 100644 (file)
@@ -746,10 +746,21 @@ static int og01a1b_enum_frame_size(struct v4l2_subdev *sd,
        return 0;
 }
 
-static int og01a1b_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
+static int og01a1b_init_state(struct v4l2_subdev *sd,
+                             struct v4l2_subdev_state *state)
 {
-       og01a1b_update_pad_format(&supported_modes[0],
-                                 v4l2_subdev_state_get_format(fh->state, 0));
+       struct og01a1b *og01a1b = to_og01a1b(sd);
+       struct v4l2_subdev_format fmt = {
+               .which = V4L2_SUBDEV_FORMAT_TRY,
+               .pad = 0,
+               .format = {
+                       .width = og01a1b->cur_mode->width,
+                       .height = og01a1b->cur_mode->height,
+                       .code = MEDIA_BUS_FMT_Y10_1X10,
+               },
+       };
+
+       og01a1b_set_format(sd, state, &fmt);
 
        return 0;
 }
@@ -777,7 +788,7 @@ static const struct media_entity_operations og01a1b_subdev_entity_ops = {
 };
 
 static const struct v4l2_subdev_internal_ops og01a1b_internal_ops = {
-       .open = og01a1b_open,
+       .init_state = og01a1b_init_state,
 };
 
 static int og01a1b_identify_module(struct og01a1b *og01a1b)