Re: [PATCH] media: i2c: add ov01a10 image sensor driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Bingbu,

On Wed, Apr 19, 2023 at 03:44:25PM +0800, Bingbu Cao wrote:
> 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;
> }

v4l2_subdev_state_get_stream_format() will access streams and I presume you
won't have any in this case (not even streams support right now as it's a
sensor driver with a single sub-device).

-- 
Kind regards,

Sakari Ailus



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux