All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
To: Hans Verkuil <hverkuil-cisco@xs4all.nl>,
	linux-media@vger.kernel.org, sakari.ailus@linux.intel.com,
	Jacopo Mondi <jacopo+renesas@jmondi.org>,
	Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
	niklas.soderlund+renesas@ragnatech.se,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Pratyush Yadav <p.yadav@ti.com>
Subject: Re: [PATCH v6 8/8] media: Documentation: add documentation about subdev state
Date: Thu, 7 Apr 2022 10:42:36 +0300	[thread overview]
Message-ID: <c4ff4f64-b948-97e8-da42-83fb05ef2688@ideasonboard.com> (raw)
In-Reply-To: <275d0222-b690-0d99-4ef5-72ecb070a2cd@xs4all.nl>

On 06/04/2022 17:01, Hans Verkuil wrote:
> 
> 
> On 24/03/2022 09:00, Tomi Valkeinen wrote:
>> Add documentation about centrally managed subdev state.
>>
>> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
>> Reviewed-by: Jacopo Mondi <jacopo+renesas@jmondi.org>
>> Reviewed-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
>> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
>> ---
>>   .../driver-api/media/v4l2-subdev.rst          | 75 +++++++++++++++++++
>>   1 file changed, 75 insertions(+)
>>
>> diff --git a/Documentation/driver-api/media/v4l2-subdev.rst b/Documentation/driver-api/media/v4l2-subdev.rst
>> index 08ea2673b19e..7fa950b1bff0 100644
>> --- a/Documentation/driver-api/media/v4l2-subdev.rst
>> +++ b/Documentation/driver-api/media/v4l2-subdev.rst
>> @@ -518,6 +518,81 @@ The :c:func:`v4l2_i2c_new_subdev` function will call
>>   :c:type:`i2c_board_info` structure using the ``client_type`` and the
>>   ``addr`` to fill it.
>>   
>> +Centrally managed subdev active state
>> +-------------------------------------
>> +
>> +Traditionally V4L2 subdev drivers maintained internal state for the active
>> +device configuration. This is often implemented as e.g. an array of struct
>> +v4l2_mbus_framefmt, one entry for each pad, and similarly for crop and compose
>> +rectangles.
>> +
>> +In addition to the active configuration, each subdev file handle has an array of
>> +struct v4l2_subdev_pad_config, managed by the V4L2 core, which contains the try
>> +configuration.
>> +
>> +To simplify the subdev drivers the V4L2 subdev API now optionally supports a
>> +centrally managed active configuration represented by
>> +:c:type:`v4l2_subdev_state`. One instance of state, which contains the active
>> +device configuration, is stored in the sub-device itself as part of
>> +the :c:type:`v4l2_subdev` structure, while the core associates a try state to
>> +each open file handle, to store the try configuration related to that file
>> +handle.
>> +
>> +Sub-device drivers can opt-in and use state to manage their active configuration
>> +by initializing the subdevice state with a call to v4l2_subdev_init_finalize()
>> +before registering the sub-device. They must also call v4l2_subdev_cleanup()
>> +to release all the allocated resources before unregistering the sub-device.
>> +The core automatically allocates and initializes a state for each open file
>> +handle to store the try configurations and frees it when closing the file
>> +handle.
>> +
>> +V4L2 sub-device operations that use both the :ref:`ACTIVE and TRY formats
>> +<v4l2-subdev-format-whence>` receive the correct state to operate on through
>> +the 'state' parameter. The state must be locked and unlocked by the
>> +caller by calling :c:func:`v4l2_subdev_lock_state()` and
>> +:c:func:`v4l2_subdev_unlock_state()`. The caller can do so by calling the subdev
>> +operation through the :c:func:`v4l2_subdev_call_state_active()` macro.
>> +
>> +Operations that do not receive a state parameter implicitly operate on the
>> +subdevice active state, which drivers can exclusively access by
>> +calling :c:func:`v4l2_subdev_lock_and_get_active_state()`. The sub-device active
>> +state must equally be released by calling :c:func:`v4l2_subdev_unlock_state()`.
>> +
>> +Drivers must never manually access the state stored in the :c:type:`v4l2_subdev`
>> +or in the file handle without going through the designated helpers.
>> +
>> +While the V4L2 core passes the correct try or active state to the
>> +subdevice operations, some existing device drivers pass a NULL state
>> +when calling operations with :c:func:`v4l2_subdev_call()`. This legacy
>> +construct causes issues with subdevice drivers that let the V4L2 core
>> +manage the active state, as they expect to receive the appropriate state
>> +as a parameter. To help the conversion of subdevice drivers to a managed
>> +active state without having to convert all callers at the same time, the
>> +:c:func:`v4l2_subdev_lock_and_return_state()` helper function can be
> 
> This is an old name, right? It's no longer called v4l2_subdev_lock_and_return_state.
> Note that the commit log of patch 4 also refers to this old name.
> 
> Actually, isn't this now replaced by the subdev op wrappers? (I might be wrong,
> I don't have much time to review this patch).

That's correct, good catch. I have removed the parts about the drivers 
having to use v4l2_subdev_lock_and_get_active_state, and instead mention 
the additional call wrappers that automate this:

> To help the
> conversion of subdevice drivers to a managed active state without having to
> convert all callers at the same time, an additional wrapper layer has been
> added to v4l2_subdev_call(), which handles the NULL case by getting and locking
> the callee's active state with :c:func:`v4l2_subdev_lock_and_get_active_state()`,
> and unlocking the state after the call.

  Tomi

      reply	other threads:[~2022-04-07  7:42 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-24  8:00 [PATCH v6 0/8] v4l: subdev active state Tomi Valkeinen
2022-03-24  8:00 ` [PATCH v6 1/8] media: subdev: rename subdev-state alloc & free Tomi Valkeinen
2022-03-24  8:00 ` [PATCH v6 2/8] media: subdev: add active state to struct v4l2_subdev Tomi Valkeinen
2022-03-24  8:00 ` [PATCH v6 3/8] media: subdev: add v4l2_subdev_get_pad_* helpers Tomi Valkeinen
2022-04-06 13:36   ` Hans Verkuil
2022-04-06 13:52     ` Hans Verkuil
2022-04-07  5:22       ` Tomi Valkeinen
2022-03-24  8:00 ` [PATCH v6 4/8] media: subdev: pass also the active state to subdevs from ioctls Tomi Valkeinen
2022-03-24  8:00 ` [PATCH v6 5/8] media: subdev: add subdev state locking Tomi Valkeinen
2022-04-06 13:39   ` Hans Verkuil
2022-03-24  8:00 ` [PATCH v6 6/8] media: subdev: add locking wrappers to subdev op wrappers Tomi Valkeinen
2022-04-06 13:44   ` Hans Verkuil
2022-03-24  8:00 ` [PATCH v6 7/8] media: subdev: add v4l2_subdev_get_fmt() helper function Tomi Valkeinen
2022-04-06 13:51   ` Hans Verkuil
2022-04-07  7:23     ` Tomi Valkeinen
2022-04-07  7:29       ` Hans Verkuil
2022-03-24  8:00 ` [PATCH v6 8/8] media: Documentation: add documentation about subdev state Tomi Valkeinen
2022-04-06 14:01   ` Hans Verkuil
2022-04-07  7:42     ` Tomi Valkeinen [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=c4ff4f64-b948-97e8-da42-83fb05ef2688@ideasonboard.com \
    --to=tomi.valkeinen@ideasonboard.com \
    --cc=hverkuil-cisco@xs4all.nl \
    --cc=jacopo+renesas@jmondi.org \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linux-media@vger.kernel.org \
    --cc=mchehab@kernel.org \
    --cc=niklas.soderlund+renesas@ragnatech.se \
    --cc=p.yadav@ti.com \
    --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.