All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marco Felsch <m.felsch@pengutronix.de>
To: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Jacopo Mondi <jacopo@jmondi.org>,
	mchehab@kernel.org, sakari.ailus@linux.intel.com,
	akinobu.mita@gmail.com, jacopo+renesas@jmondi.org,
	linux-media@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 1/3] media: mt9m111: add V4L2_CID_LINK_FREQ support
Date: Tue, 20 Sep 2022 16:37:32 +0200	[thread overview]
Message-ID: <20220920143732.o5zu4e23a26rjlsn@pengutronix.de> (raw)
In-Reply-To: <YymMdRV0XvXAfh8e@pendragon.ideasonboard.com>

On 22-09-20, Laurent Pinchart wrote:
> On Tue, Sep 20, 2022 at 11:43:37AM +0200, Jacopo Mondi wrote:
> > On Fri, Sep 16, 2022 at 03:57:11PM +0200, Marco Felsch wrote:
> > > Add support to report the link frequency.
> > >
> > > Signed-off-by: Marco Felsch <m.felsch@pengutronix.de>
> > > ---
> > > The v1 of this small series can be found here:
> > > https://lore.kernel.org/all/20220818144712.997477-1-m.felsch@pengutronix.de/
> > >
> > > Thanks a lot to Jacopo for the review feedback on my v1.
> > >
> > > Changelog:
> > >
> > > v2:
> > > - use V4L2_CID_LINK_FREQ instead of V4L2_CID_PIXEL_RATE
> > > ---
> > >  drivers/media/i2c/mt9m111.c | 21 ++++++++++++++++++++-
> > >  1 file changed, 20 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/drivers/media/i2c/mt9m111.c b/drivers/media/i2c/mt9m111.c
> > > index afc86efa9e3e..52be1c310455 100644
> > > --- a/drivers/media/i2c/mt9m111.c
> > > +++ b/drivers/media/i2c/mt9m111.c
> > > @@ -1249,6 +1249,8 @@ static int mt9m111_probe(struct i2c_client *client)
> > >  {
> > >  	struct mt9m111 *mt9m111;
> > >  	struct i2c_adapter *adapter = client->adapter;
> > > +	static s64 extclk_rate;
> > 
> > Why static ?
> 
> I missed that one indeed. I assume it's static because the pointer is
> stored in the v4l2_ctrl structure by v4l2_ctrl_new_int_menu(), but
> that's wrong. The data should be in the mt9m111 structure instead,
> otherwise it won't work right when using multiple sensors.

Yes, thats the reason. Didn't had in mind, the fact of using multiple
sensor of the same type. Sry. I will move it to the driver struct of
course.

> > Also clk_get_rate() returns an unsigned long
> 
> v4l2_ctrl_new_int_menu() requires an s64 pointer.

Yes.

Regards,
  Marco

> > > +	struct v4l2_ctrl *ctrl;
> > >  	int ret;
> > >
> > >  	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_WORD_DATA)) {
> > > @@ -1271,6 +1273,13 @@ static int mt9m111_probe(struct i2c_client *client)
> > >  	if (IS_ERR(mt9m111->clk))
> > >  		return PTR_ERR(mt9m111->clk);
> > >
> > > +	ret = clk_prepare_enable(mt9m111->clk);
> > > +	if (ret < 0)
> > > +		return ret;
> > > +
> > > +	extclk_rate = clk_get_rate(mt9m111->clk);
> > > +	clk_disable_unprepare(mt9m111->clk);
> > > +
> > >  	mt9m111->regulator = devm_regulator_get(&client->dev, "vdd");
> > >  	if (IS_ERR(mt9m111->regulator)) {
> > >  		dev_err(&client->dev, "regulator not found: %ld\n",
> > > @@ -1285,7 +1294,7 @@ static int mt9m111_probe(struct i2c_client *client)
> > >  	mt9m111->subdev.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE |
> > >  				 V4L2_SUBDEV_FL_HAS_EVENTS;
> > >
> > > -	v4l2_ctrl_handler_init(&mt9m111->hdl, 7);
> > > +	v4l2_ctrl_handler_init(&mt9m111->hdl, 8);
> > >  	v4l2_ctrl_new_std(&mt9m111->hdl, &mt9m111_ctrl_ops,
> > >  			V4L2_CID_VFLIP, 0, 1, 1, 0);
> > >  	v4l2_ctrl_new_std(&mt9m111->hdl, &mt9m111_ctrl_ops,
> > > @@ -1309,6 +1318,16 @@ static int mt9m111_probe(struct i2c_client *client)
> > >  				BIT(V4L2_COLORFX_NEGATIVE) |
> > >  				BIT(V4L2_COLORFX_SOLARIZATION)),
> > >  			V4L2_COLORFX_NONE);
> > 
> > Empty line maybe ?
> > 
> > > +	/*
> > > +	 * The extclk rate equals the link freq. if reg default values are used,
> > > +	 * which is the case. This must be adapted as soon as we don't use the
> > > +	 * default values anymore.
> > > +	 */
> > > +	ctrl = v4l2_ctrl_new_int_menu(&mt9m111->hdl, &mt9m111_ctrl_ops,
> > > +				      V4L2_CID_LINK_FREQ, 0, 0, &extclk_rate);
> > > +	if (ctrl)
> > > +		ctrl->flags |= V4L2_CTRL_FLAG_READ_ONLY;
> > > +
> > 
> > I'm sorry I have not replied to your previous email about using
> > LINK_FREQ for parallel busses.. I see it mentioned in ext-ctrls-image-process.rst
> > as you said:
> > 
> > ``V4L2_CID_LINK_FREQ (integer menu)``
> >     The frequency of the data bus (e.g. parallel or CSI-2).
> > 
> > I still have a bit of troubles seeing it apply nicely on a parallel
> > bus. Isn't PIXEL_RATE more appropriate ?
> 
> They are different. When transmitting YUYV_2X8 for instance, the link
> frequency is twice the pixel clock rate.
> 
> > You said you need to know the
> > overall bus bandwidth in bytes , and pixel_rate * bpp / 8 is equally
> > valid and easy as link_freq / num_lanes, which requires the receiver
> > to fetch the remote subdev media bus configuration instead of relying
> > on the input format. Also LINK_FREQ is a menu control, something nasty
> > already for CSI-2 busses, which requires to pre-calculate the link
> > freqs based on the input mclk. It is also meant to be changed by
> > userspace, while PIXEL_RATE is RO by default.
> > 
> > Sakari, Laurent, what's your take here ?
> 
> Ideally both should be implemented by the driver.
> 
> > >  	mt9m111->subdev.ctrl_handler = &mt9m111->hdl;
> > >  	if (mt9m111->hdl.error) {
> > >  		ret = mt9m111->hdl.error;
> 
> -- 
> Regards,
> 
> Laurent Pinchart
> 

      reply	other threads:[~2022-09-20 14:37 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-16 13:57 [PATCH v2 1/3] media: mt9m111: add V4L2_CID_LINK_FREQ support Marco Felsch
2022-09-16 13:57 ` [PATCH v2 2/3] media: mt9m111: fix device power usage Marco Felsch
2022-09-19 12:45   ` Sakari Ailus
2022-09-19 12:55     ` Laurent Pinchart
2022-09-19 13:10       ` Marco Felsch
2022-09-19 13:13         ` Sakari Ailus
2022-09-20 10:27   ` Jacopo Mondi
2022-09-20 10:34     ` Jacopo Mondi
2022-09-20 10:36       ` Laurent Pinchart
2022-09-16 13:57 ` [PATCH v2 3/3] media: mt9m111: don't turn on the output while powering it Marco Felsch
2022-09-19 13:00   ` Laurent Pinchart
2022-09-19 13:17     ` Marco Felsch
2022-09-20 10:39   ` Jacopo Mondi
2022-09-19 12:42 ` [PATCH v2 1/3] media: mt9m111: add V4L2_CID_LINK_FREQ support Sakari Ailus
2022-09-19 12:55   ` Laurent Pinchart
2022-09-19 13:08   ` Marco Felsch
2022-09-19 13:18     ` Sakari Ailus
2022-09-20  8:56       ` Marco Felsch
2022-09-20  9:19         ` Jacopo Mondi
2022-09-20 10:36           ` Sakari Ailus
2022-09-20  9:43 ` Jacopo Mondi
2022-09-20  9:48   ` Laurent Pinchart
2022-09-20 14:37     ` Marco Felsch [this message]

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=20220920143732.o5zu4e23a26rjlsn@pengutronix.de \
    --to=m.felsch@pengutronix.de \
    --cc=akinobu.mita@gmail.com \
    --cc=jacopo+renesas@jmondi.org \
    --cc=jacopo@jmondi.org \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=mchehab@kernel.org \
    --cc=sakari.ailus@linux.intel.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.