Linux Media Controller development
 help / color / mirror / Atom feed
From: Sakari Ailus <sakari.ailus@linux.intel.com>
To: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: linux-media@vger.kernel.org,
	Jacopo Mondi <jacopo.mondi@ideasonboard.com>,
	hverkuil@xs4all.nl
Subject: Re: [PATCH v7 2/5] media: v4l: Support obtaining link frequency via get_mbus_config
Date: Mon, 16 Dec 2024 12:15:31 +0000	[thread overview]
Message-ID: <Z2AZ4xD_HTxDD8wH@kekkonen.localdomain> (raw)
In-Reply-To: <20241216111645.GL32204@pendragon.ideasonboard.com>

Hi Laurent,

On Mon, Dec 16, 2024 at 01:16:45PM +0200, Laurent Pinchart wrote:
> On Mon, Dec 16, 2024 at 08:46:43AM +0000, Sakari Ailus wrote:
> > On Sun, Dec 15, 2024 at 06:59:35PM +0200, Laurent Pinchart wrote:
> > > On Tue, Dec 10, 2024 at 09:59:03AM +0200, Sakari Ailus wrote:
> > > > Add link_freq field to struct v4l2_mbus_config in order to pass the link
> > > > frequency to the receiving sub-device.
> > > 
> > > The documentation of v4l2_get_link_freq() should be expanded to explain
> > > the new mode of operation. It should document which of the supported
> > > methods are recommended for new drivers.
> > > 
> > > > 
> > > > Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
> > > > ---
> > > >  drivers/media/v4l2-core/v4l2-common.c | 11 ++++++++---
> > > >  include/media/v4l2-mediabus.h         |  2 ++
> > > >  2 files changed, 10 insertions(+), 3 deletions(-)
> > > > 
> > > > diff --git a/drivers/media/v4l2-core/v4l2-common.c b/drivers/media/v4l2-core/v4l2-common.c
> > > > index 9fe74c7e064f..88fbd5608f00 100644
> > > > --- a/drivers/media/v4l2-core/v4l2-common.c
> > > > +++ b/drivers/media/v4l2-core/v4l2-common.c
> > > > @@ -508,13 +508,18 @@ EXPORT_SYMBOL_GPL(__v4l2_get_link_freq_ctrl);
> > > >  s64 __v4l2_get_link_freq_pad(struct media_pad *pad, unsigned int mul,
> > > >  			     unsigned int div)
> > > >  {
> > > > +	struct v4l2_mbus_config mbus_config = {};
> > > 
> > > Isn't mbus_config fully populated by the .get_mbus_config() operation ?
> > > That should be documented in the .get_mbus_config() operation
> > > documentation.
> > 
> > It's a good practice to zero the memory before drivers get to work on it. I
> > presume drivers will set the fields that are relevant for them and ignore
> > the rest.
> > 
> > I can add a note on get_mbus_config() the drivers should set all struct
> > fields to known values.
> 
> Thanks.
> 
> > > >  	struct v4l2_subdev *sd;
> > > > +	int ret;
> > > >  
> > > >  	sd = media_entity_to_v4l2_subdev(pad->entity);
> > > > -	if (!sd)
> > > > -		return -ENODEV;
> > > > +	ret = v4l2_subdev_call(sd, pad, get_mbus_config, pad->index,
> > > > +			       &mbus_config);
> > > > +	if (ret < 0 && ret != -ENOIOCTLCMD)
> > > > +		return ret;
> > > >  
> > > > -	return __v4l2_get_link_freq_ctrl(sd->ctrl_handler, mul, div);
> > > > +	return mbus_config.link_freq ?:
> > > > +		__v4l2_get_link_freq_ctrl(sd->ctrl_handler, mul, div);
> > > 
> > > 	if (mbus_config.link_freq)
> > > 		return mbus_config.link_freq;
> > > 
> > > 	return __v4l2_get_link_freq_ctrl(sd->ctrl_handler, mul, div);
> > 
> > Whether this would be cleaner is debatable at least. I can switch if you
> > insist though.
> 
> I think it's nicer. You could even write
> 
>  	if (mbus_config.link_freq)
>  		return mbus_config.link_freq;
> 
> 	/*
> 	 * Fall back to using the link frequency control if the media bus config
> 	 * doesn't provide a link frequency.
> 	 */
>  	return __v4l2_get_link_freq_ctrl(sd->ctrl_handler, mul, div);

I can use this.

> 
> > > I wonder if we should also add a message in case link_freq is 0, to get
> > > drivers to convert to reporting the link frequency through
> > > .get_mbus_config() if they already implement the operation.
> > 
> > I'm not sure this will be useful: in most cases the LINK_FREQ control is
> > used and for a reason: it's user-configurable. Drivers should only populate
> > the field if the link frequency is determined by the driver. For the
> > receiver drivers it does not matter: they use v4l2_get_link_freq().
> 
> I think this depends on whether or not driver that have a configurable
> link frequency should report the current value through
> .get_mbus_config(). I think that drivers that implement
> .get_mbus_config() should, for consistency.

We should have a helper that obtains information using get_mbus_config() as
well as the fwnode endpoint. I've proposed that a few times over the years.
I'm hoping for someone who needs dynamic configuration e.g. for lane
numbers to implement it. :-)

I wouldn't try to add more burden for drivers on this. Beyond that, it's
common that if you have multiple implementations of something, one of them
(the unused one) eventually breaks. What we really need is to obtain the
information from the sub-device API, using the method the driver uses to
report it.

-- 
Regards,

Sakari Ailus

  reply	other threads:[~2024-12-16 12:15 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-12-10  7:59 [PATCH v7 0/5] Use V4L2 mbus config for conveying MEI CSI link frequency Sakari Ailus
2024-12-10  7:59 ` [PATCH v7 1/5] media: v4l: Support passing media pad argument to v4l2_get_link_freq() Sakari Ailus
2024-12-12 17:04   ` Jacopo Mondi
2024-12-15 16:45   ` Laurent Pinchart
2024-12-16  8:38     ` Sakari Ailus
2024-12-10  7:59 ` [PATCH v7 2/5] media: v4l: Support obtaining link frequency via get_mbus_config Sakari Ailus
2024-12-12 17:05   ` Jacopo Mondi
2024-12-15 16:59   ` Laurent Pinchart
2024-12-16  8:46     ` Sakari Ailus
2024-12-16 11:16       ` Laurent Pinchart
2024-12-16 12:15         ` Sakari Ailus [this message]
2024-12-16 13:51           ` Laurent Pinchart
2024-12-10  7:59 ` [PATCH v7 3/5] media: Documentation: Update link frequency driver documentation Sakari Ailus
2024-12-12 16:53   ` Jacopo Mondi
2024-12-13  7:15     ` Sakari Ailus
2024-12-15 17:02       ` Laurent Pinchart
2024-12-16  8:07         ` Sakari Ailus
2024-12-16  8:08           ` Sakari Ailus
2024-12-16 11:20           ` Laurent Pinchart
2024-12-16 12:05             ` Sakari Ailus
2024-12-16 13:51               ` Laurent Pinchart
2024-12-10  7:59 ` [PATCH v7 4/5] media: ivsc: csi: Obtain link frequency from the media pad Sakari Ailus
2024-12-10  7:59 ` [PATCH v7 5/5] media: intel/ipu6: Obtain link frequency from a sub-device Sakari Ailus
2024-12-15 17:08   ` Laurent Pinchart
2024-12-16  7:47     ` Sakari Ailus
2024-12-16  9:07       ` Laurent Pinchart
2024-12-16  9:18         ` Sakari Ailus
2024-12-16  9:40           ` Laurent Pinchart
2024-12-16  8:03     ` Sakari Ailus
2024-12-16 11:13       ` Laurent Pinchart
2024-12-16 11:21         ` Sakari Ailus

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Z2AZ4xD_HTxDD8wH@kekkonen.localdomain \
    --to=sakari.ailus@linux.intel.com \
    --cc=hverkuil@xs4all.nl \
    --cc=jacopo.mondi@ideasonboard.com \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linux-media@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox