Sakari, On 4/12/23 8:19 PM, Sakari Ailus wrote: > Hi Bingbu, > > On Wed, Apr 12, 2023 at 07:40:19PM +0800, Bingbu Cao wrote: >>>> +static int ov01a10_set_format(struct v4l2_subdev *sd, >>>> + struct v4l2_subdev_state *sd_state, >>>> + struct v4l2_subdev_format *fmt) >>>> +{ >>>> + struct ov01a10 *ov01a10 = to_ov01a10(sd); >>>> + const struct ov01a10_mode *mode; >>>> + s32 vblank_def, h_blank; >>>> + >>>> + mode = v4l2_find_nearest_size(supported_modes, >>>> + ARRAY_SIZE(supported_modes), width, >>>> + height, fmt->format.width, >>>> + fmt->format.height); >>>> + >>>> + mutex_lock(&ov01a10->mutex); >>>> + ov01a10_update_pad_format(mode, &fmt->format); >>> >>> Could you switch to the sub-device state? That is now the preferred way to >>> serialise access to e.g. the format. >>> >>> See e.g. >>> <URL:https://git.kernel.org/pub/scm/linux/kernel/git/tomba/linux.git/tree/drivers/media/i2c/ov1063x.c?h=streams/work-v16>. >>> >>> The control handler's mutex doubles as a sub-device state mutex. >> >> Is it fine to use v4l2_subdev_get_fmt()? Or will it be deprecated soon? > > Sure, it's fine to use it. > I tried to use the v4l2_subdev_state_get_stream_format() in set_fmt, but I see that the pad format of camera sensor was missing in media information. - entity 105: ov01a10 3-0036 (1 pad, 1 link) type V4L2 subdev subtype Sensor flags 0 device node name /dev/v4l-subdev8 pad0: Source -> "Intel IPU6 CSI2 2":0 [ENABLED] And the link validation cannot work as expected, is there something missing? My kernel head is Linux 6.3-rc2. static int ov01a10_set_format(struct v4l2_subdev *sd, struct v4l2_subdev_state *sd_state, struct v4l2_subdev_format *fmt) { ... format = v4l2_subdev_state_get_stream_format(sd_state, fmt->pad, fmt->stream); if (!format) { dev_err(&client->dev, "Failed to get stream format\n"); return -EINVAL; } ... ov01a10_update_pad_format(mode, &fmt->format); *format = fmt->format; return 0; } -- Best regards, Bingbu Cao