From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Dave Stevenson <dave.stevenson@raspberrypi.com>
Cc: linux-media@vger.kernel.org, Sakari Ailus <sakari.ailus@iki.fi>,
Manivannan Sadhasivam <mani@kernel.org>
Subject: Re: [PATCH v1 14/15] media: i2c: imx290: Configure data lanes at start time
Date: Wed, 23 Nov 2022 16:28:48 +0200 [thread overview]
Message-ID: <Y34uIE+bjlnIXGD9@pendragon.ideasonboard.com> (raw)
In-Reply-To: <CAPY8ntD+82HitFj7G9QTbwx4dNFf59adqhn6q2-mKAdTwc-iQA@mail.gmail.com>
Hi Dave,
On Wed, Nov 23, 2022 at 10:16:58AM +0000, Dave Stevenson wrote:
> On Tue, 22 Nov 2022 at 22:34, Laurent Pinchart wrote:
> >
> > There's no need to configure the data lanes in the runtime PM resume
> > handler. Do so in imx290_start_streaming() instead.
>
> Interesting as I had Sakari advocating putting clock mode selection
> register control in "power on" for my recent ov9282 series. Is there
> any consistency?
No there isn't :-) There hasn't been any official rule so far, so it's
no surprise different drivers exhibit different behaviours. I'm all for
standardization when possible though.
Overall, I think there's a general agreement that the runtime PM resume
handler needs to control everything required to make the sensor
accessible by software. That covers at least hard reset, regulators and
clocks.
For software settings, it's less clear. If the sensor requires a
software reset sequence immediately after power on, it makes sense to
also handle that in the runtime PM resume handler. Same thing for any
other initialization required to reach a quiescent state (for instance
there are many sensors that start streaming automatically right after
power on for a reason I can't understand, so that needs to be disabled).
This means that the runtime PM handler will thus access the sensor over
I2C. We may not want to do so in probe() before having a chance to probe
it (by reading an ID register for instance). The power on sequence could
be split in two to handle this, with one function that powers the sensor
up, and the other one that handles software initialization. Both would
be called from the runtime PM resume handler, and in probe(), we could
first power on the sensor, identify it, and then initialize it. I think
that will be fine on DT platforms as we don't need to RPM-resume the I2C
device in probe before accessing it as far as I can tell, given that the
probe() function should be called with the I2C controller RPM-resumed.
I'll let Sakari confirms if this works for ACPI).
For other settings, I wouldn't handle them in the runtime PM resume
handler. In this particular case, the number of data lanes could even
vary based on the sensor mode (we don't do so at the moment), so
.s_stream() time seems better to me.
> https://patchwork.linuxtv.org/project/linux-media/patch/20221005152809.3785786-9-dave.stevenson@raspberrypi.com/#141118
>
> > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> > ---
> > drivers/media/i2c/imx290.c | 6 +++---
> > 1 file changed, 3 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/media/i2c/imx290.c b/drivers/media/i2c/imx290.c
> > index dbed703fa199..4dfa090f918d 100644
> > --- a/drivers/media/i2c/imx290.c
> > +++ b/drivers/media/i2c/imx290.c
> > @@ -753,6 +753,9 @@ static int imx290_start_streaming(struct imx290 *imx290,
> > return ret;
> > }
> >
> > + /* Set data lane count */
> > + imx290_set_data_lanes(imx290);
> > +
> > /* Apply the register values related to current frame format */
> > format = v4l2_subdev_get_pad_format(&imx290->sd, state, 0);
> > ret = imx290_setup_format(imx290, format);
> > @@ -1052,9 +1055,6 @@ static int imx290_power_on(struct device *dev)
> > gpiod_set_value_cansleep(imx290->rst_gpio, 0);
> > usleep_range(30000, 31000);
> >
> > - /* Set data lane count */
> > - imx290_set_data_lanes(imx290);
> > -
> > return 0;
> > }
> >
--
Regards,
Laurent Pinchart
next prev parent reply other threads:[~2022-11-23 14:31 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-22 22:32 [PATCH v1 00/15] media: i2c: imx290: Miscellaneous improvements Laurent Pinchart
2022-11-22 22:32 ` [PATCH v1 01/15] media: i2c: imx290: Group functions in sections Laurent Pinchart
2022-11-23 7:46 ` Alexander Stein
2022-11-22 22:32 ` [PATCH v1 02/15] media: i2c: imx290: Factor out subdev init and cleanup to functions Laurent Pinchart
2022-11-23 7:44 ` Alexander Stein
2022-11-23 10:04 ` Laurent Pinchart
2022-11-24 18:31 ` Dave Stevenson
2022-11-24 19:25 ` Laurent Pinchart
2022-11-22 22:32 ` [PATCH v1 03/15] media: i2c: imx290: Factor out control update code to a function Laurent Pinchart
2022-11-23 7:51 ` Alexander Stein
2022-11-23 10:08 ` Laurent Pinchart
2022-11-22 22:32 ` [PATCH v1 04/15] media: i2c: imx290: Access link_freq_index directly Laurent Pinchart
2022-11-23 7:53 ` Alexander Stein
2022-11-22 22:32 ` [PATCH v1 05/15] media: i2c: imx290: Pass format and mode to imx290_calc_pixel_rate() Laurent Pinchart
2022-11-23 9:06 ` Alexander Stein
2022-11-22 22:32 ` [PATCH v1 06/15] media: i2c: imx290: Compute pixel rate and blanking in one place Laurent Pinchart
2022-11-23 7:59 ` Alexander Stein
2022-11-23 9:58 ` Dave Stevenson
2022-11-22 22:32 ` [PATCH v1 07/15] media: i2c: imx290: Factor out black level setting to a function Laurent Pinchart
2022-11-23 8:03 ` Alexander Stein
2022-11-23 10:08 ` Dave Stevenson
2022-11-23 11:00 ` Laurent Pinchart
2022-11-24 15:10 ` Dave Stevenson
2022-11-24 16:57 ` Laurent Pinchart
2022-11-24 17:16 ` David Plowman
2022-11-24 18:02 ` Laurent Pinchart
2022-11-22 22:32 ` [PATCH v1 08/15] media: i2c: imx290: Factor out DT parsing to separate function Laurent Pinchart
2022-11-23 8:14 ` Alexander Stein
2022-11-23 10:16 ` Laurent Pinchart
2022-11-22 22:32 ` [PATCH v1 09/15] media: i2c: imx290: Use dev_err_probe() Laurent Pinchart
2022-11-23 8:16 ` Alexander Stein
2022-11-22 22:32 ` [PATCH v1 10/15] media: i2c: imx290: Factor out clock initialization to separate function Laurent Pinchart
2022-11-23 8:18 ` Alexander Stein
2022-11-22 22:32 ` [PATCH v1 11/15] media: i2c: imx290: Use V4L2 subdev active state Laurent Pinchart
2022-11-23 8:42 ` Alexander Stein
2022-11-23 10:49 ` Laurent Pinchart
2022-11-28 15:33 ` Alexander Stein
2022-11-28 18:11 ` Laurent Pinchart
2022-11-22 22:32 ` [PATCH v1 12/15] media: i2c: imx290: Rename, extend and expand usage of imx290_pixfmt Laurent Pinchart
2022-11-23 8:53 ` Alexander Stein
2022-11-22 22:32 ` [PATCH v1 13/15] media: i2c: imx290: Use runtime PM autosuspend Laurent Pinchart
2022-11-22 22:32 ` [PATCH v1 14/15] media: i2c: imx290: Configure data lanes at start time Laurent Pinchart
2022-11-23 9:01 ` Alexander Stein
2022-11-23 10:16 ` Dave Stevenson
2022-11-23 14:28 ` Laurent Pinchart [this message]
2022-11-24 18:02 ` Dave Stevenson
2022-11-24 19:19 ` Laurent Pinchart
2022-11-22 22:32 ` [PATCH v1 15/15] media: i2c: imx290: Simplify imx290_set_data_lanes() Laurent Pinchart
2022-11-23 9:04 ` Alexander Stein
2022-11-23 10:25 ` Laurent Pinchart
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=Y34uIE+bjlnIXGD9@pendragon.ideasonboard.com \
--to=laurent.pinchart@ideasonboard.com \
--cc=dave.stevenson@raspberrypi.com \
--cc=linux-media@vger.kernel.org \
--cc=mani@kernel.org \
--cc=sakari.ailus@iki.fi \
/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