All of lore.kernel.org
 help / color / mirror / Atom feed
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Jacopo Mondi <jacopo+renesas@jmondi.org>
Cc: kieran.bingham+renesas@ideasonboard.com,
	niklas.soderlund+renesas@ragnatech.se, geert@linux-m68k.org,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Hans Verkuil <hverkuil-cisco@xs4all.nl>,
	Sakari Ailus <sakari.ailus@iki.fi>
Subject: Re: [PATCH v2 16/18] media: v4l2-subdev: De-deprecate init() subdev op
Date: Mon, 15 Mar 2021 23:56:04 +0200	[thread overview]
Message-ID: <YE/X9LLrv1Hq/BL6@pendragon.ideasonboard.com> (raw)
In-Reply-To: <20210315131512.133720-17-jacopo+renesas@jmondi.org>

Hi Jacopo,

Thank you for the patch.

On Mon, Mar 15, 2021 at 02:15:10PM +0100, Jacopo Mondi wrote:
> The init() subdev core operation is deemed to be deprecated for new
> subdevice drivers. However it could prove useful for complex
> architectures to defer operation that require access to the
> communication bus if said bus is not available (or fully configured)
> at the time when the subdevice probe() function is run.
> 
> As an example, the GMSL architecture requires the GMSL configuration
> link to be configured on the host side after the remote subdevice
> has completed its probe function. After the configuration on the host
> side has been performed, the subdevice registers can be accessed through
> the communication bus.
> 
> In particular:
> 
> 	HOST			REMOTE
> 
> 	probe()
> 	   |
> 	   ---------------------> |
> 				  probe() {
> 				     bus config()
> 				  }
> 	   |<--------------------|
> 	v4l2 async bound {
> 	    bus config()
> 	    call subdev init()
> 	   |-------------------->|
> 				 init() {
> 				     access register on the bus()
> 				}
> 	   |<-------------------
> 	}
> 
> In the GMSL use case the bus configuration requires the enablement of the
> noise immunity threshold on the remote side which ensures reliability
> of communications in electrically noisy environments. After the subdevice
> has enabled the threshold at the end of its probe() sequence the host
> side shall compensate it with an higher signal amplitude. Once this
> sequence has completed the bus can be accessed with noise protection
> enabled and all the operations that require a considerable number of
> transactions on the bus (such as the image sensor configuration
> sequence) are run in the subdevice init() operation implementation.

I think this can be considered as a reasonable use of .init(). I'd like
to get feedback from Hans and Sakari (CC'ed) though.

> Signed-off-by: Jacopo Mondi <jacopo+renesas@jmondi.org>
> ---
>  include/media/v4l2-subdev.h | 15 ++++++++++++---
>  1 file changed, 12 insertions(+), 3 deletions(-)
> 
> diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h
> index d0e9a5bdb08b..3068d9940669 100644
> --- a/include/media/v4l2-subdev.h
> +++ b/include/media/v4l2-subdev.h
> @@ -148,9 +148,18 @@ struct v4l2_subdev_io_pin_config {
>   *	each pin being configured.  This function could be called at times
>   *	other than just subdevice initialization.
>   *
> - * @init: initialize the sensor registers to some sort of reasonable default
> - *	values. Do not use for new drivers and should be removed in existing
> - *	drivers.
> + * @init: initialize the subdevice registers to some sort of reasonable default
> + *	values. Do not use for new drivers (and should be removed in existing
> + *	ones) for regular architectures where the image sensor is connected to
> + *	the host receiver. For more complex architectures where the subdevice
> + *	initialization should be deferred to the completion of the probe
> + *	sequence of some intermediate component, or the communication bus
> + *	requires configurations on the host side that depend on the completion
> + *	of the probe sequence of the remote subdevices, the usage of this
> + *	operation could be considered to allow the devices along the pipeline to
> + *	probe and register in the media graph and to defer any operation that
> + *	require actual access to the communication bus to their init() function
> + *	implementation.
>   *
>   * @load_fw: load firmware.
>   *

-- 
Regards,

Laurent Pinchart

  reply	other threads:[~2021-03-15 21:57 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-15 13:14 [PATCH v2 00/18] media: gmsl: Reliability improvement Jacopo Mondi
2021-03-15 13:14 ` [PATCH v2 01/18] media: i2c: rdamc21: Fix warning on u8 cast Jacopo Mondi
2021-03-15 15:27   ` Kieran Bingham
2021-03-15 21:35   ` Laurent Pinchart
2021-03-15 13:14 ` [PATCH v2 02/18] media: i2c: rdacm20: Enable noise immunity Jacopo Mondi
2021-03-15 21:37   ` Laurent Pinchart
2021-03-16 12:56     ` Jacopo Mondi
2021-03-16 19:24       ` Laurent Pinchart
2021-03-15 13:14 ` [PATCH v2 03/18] media: i2c: rdacm20: Embedded 'serializer' field Jacopo Mondi
2021-03-15 15:29   ` Kieran Bingham
2021-03-15 13:14 ` [PATCH v2 04/18] media: i2c: rdacm20: Replace goto with a loop Jacopo Mondi
2021-03-15 15:36   ` Kieran Bingham
2021-03-15 13:14 ` [PATCH v2 05/18] media: i2c: rdacm20: Report camera module name Jacopo Mondi
2021-03-15 13:15 ` [PATCH v2 06/18] media: i2c: max9271: Check max9271_write() return Jacopo Mondi
2021-03-15 15:46   ` Kieran Bingham
2021-03-15 21:38   ` Laurent Pinchart
2021-03-15 13:15 ` [PATCH v2 07/18] media: i2c: rdacm20: Check return values Jacopo Mondi
2021-03-15 13:15 ` [PATCH v2 08/18] media: i2c: rdacm20: Re-work ov10635 reset Jacopo Mondi
2021-03-15 13:15 ` [PATCH v2 09/18] media: i2c: max9271: Introduce wake_up() function Jacopo Mondi
2021-03-15 17:14   ` Kieran Bingham
2021-03-15 21:43   ` Laurent Pinchart
2021-03-15 13:15 ` [PATCH v2 10/18] media: i2c: max9286: Adjust parameters indent Jacopo Mondi
2021-03-15 13:15 ` [PATCH v2 11/18] media: i2c: rdacm21: Fix OV10640 powerdown Jacopo Mondi
2021-03-15 17:20   ` Kieran Bingham
2021-03-15 21:45   ` Laurent Pinchart
2021-03-15 13:15 ` [PATCH v2 12/18] media: i2c: rdacm21: Give more time to OV490 to boot Jacopo Mondi
2021-03-15 17:22   ` Kieran Bingham
2021-03-17 10:04     ` Jacopo Mondi
2021-03-19  0:29       ` Laurent Pinchart
2021-03-19 14:53         ` Jacopo Mondi
2021-03-15 21:52   ` Laurent Pinchart
2021-03-15 13:15 ` [PATCH v2 13/18] media: i2c: max9286: Rename reverse_channel_mv Jacopo Mondi
2021-03-15 13:15 ` [PATCH v2 14/18] media: i2c: max9286: Cache channel amplitude Jacopo Mondi
2021-03-15 13:15 ` [PATCH v2 15/18] media: i2c: max9286: Define high " Jacopo Mondi
2021-03-15 13:15 ` [PATCH v2 16/18] media: v4l2-subdev: De-deprecate init() subdev op Jacopo Mondi
2021-03-15 21:56   ` Laurent Pinchart [this message]
2021-03-15 13:15 ` [PATCH v2 17/18] media: gmsl: Reimplement initialization sequence Jacopo Mondi
2021-03-15 13:15 ` [PATCH v2 18/18] media: i2c: max9286: Rework comments in .bound() Jacopo Mondi
2021-03-15 17:28   ` Kieran Bingham
2021-03-15 21:57   ` 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=YE/X9LLrv1Hq/BL6@pendragon.ideasonboard.com \
    --to=laurent.pinchart@ideasonboard.com \
    --cc=geert@linux-m68k.org \
    --cc=hverkuil-cisco@xs4all.nl \
    --cc=jacopo+renesas@jmondi.org \
    --cc=kieran.bingham+renesas@ideasonboard.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=linux-renesas-soc@vger.kernel.org \
    --cc=mchehab@kernel.org \
    --cc=niklas.soderlund+renesas@ragnatech.se \
    --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 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.