From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Dave Stevenson <dave.stevenson@raspberrypi.com>
Cc: "Hans Verkuil" <hverkuil+cisco@kernel.org>,
"Jacopo Mondi" <jacopo.mondi@ideasonboard.com>,
"Sakari Ailus" <sakari.ailus@linux.intel.com>,
linux-media@vger.kernel.org,
Prabhakar <prabhakar.csengg@gmail.com>,
"Kate Hsuan" <hpa@redhat.com>,
"Tommaso Merciai" <tomm.merciai@gmail.com>,
"Benjamin Mugnier" <benjamin.mugnier@foss.st.com>,
"Sylvain Petinot" <sylvain.petinot@foss.st.com>,
"Christophe JAILLET" <christophe.jaillet@wanadoo.fr>,
"Julien Massot" <julien.massot@collabora.com>,
"Naushir Patuck" <naush@raspberrypi.com>,
"Yan, Dongcheng" <dongcheng.yan@intel.com>,
"Stefan Klug" <stefan.klug@ideasonboard.com>,
"Mirela Rabulea" <mirela.rabulea@nxp.com>,
"André Apitzsch" <git@apitzsch.eu>,
"Heimir Thor Sverrisson" <heimir.sverrisson@gmail.com>,
"Kieran Bingham" <kieran.bingham@ideasonboard.com>,
"Mehdi Djait" <mehdi.djait@linux.intel.com>,
"Ricardo Ribalda Delgado" <ribalda@kernel.org>,
"Hans de Goede" <hansg@kernel.org>,
"Tomi Valkeinen" <tomi.valkeinen@ideasonboard.com>,
"David Plowman" <david.plowman@raspberrypi.com>,
"Yu, Ong Hock" <ong.hock.yu@intel.com>,
"Ng, Khai Wen" <khai.wen.ng@intel.com>,
"Jai Luthra" <jai.luthra@ideasonboard.com>,
"Rishikesh Donadkar" <r-donadkar@ti.com>
Subject: Re: [PATCH v5 04/10] media: imx219: Make control handler ops for PIXEL_RATE NULL
Date: Tue, 9 Jun 2026 19:07:15 +0300 [thread overview]
Message-ID: <20260609160715.GA1125735@killaraus.ideasonboard.com> (raw)
In-Reply-To: <CAPY8ntC0u1H+Z-cnwn0AkG4MbUT2nhnndmRJ-E8yYFaOdXBMwg@mail.gmail.com>
On Tue, Jun 09, 2026 at 04:56:48PM +0100, Dave Stevenson wrote:
> On Tue, 9 Jun 2026 at 16:15, Laurent Pinchart wrote:
> > On Tue, Jun 09, 2026 at 04:55:09PM +0200, Hans Verkuil wrote:
> > > On 09/06/2026 08:29, Jacopo Mondi wrote:
> > > > On Mon, Jun 08, 2026 at 05:42:00PM +0300, Laurent Pinchart wrote:
> > > >> On Mon, Jun 08, 2026 at 04:47:03PM +0300, Sakari Ailus wrote:
> > > >>> On Mon, Jun 08, 2026 at 01:27:55PM +0300, Laurent Pinchart wrote:
> > > >>>> On Mon, Jun 08, 2026 at 01:21:22PM +0300, Sakari Ailus wrote:
> > > >>>>> On Mon, Jun 08, 2026 at 11:24:26AM +0300, Laurent Pinchart wrote:
> > > >>>>>> On Mon, Jun 08, 2026 at 11:14:32AM +0300, Sakari Ailus wrote:
> > > >>>>>>> On Mon, Jun 08, 2026 at 11:03:38AM +0300, Laurent Pinchart wrote:
> > > >>>>>>>> On Mon, Jun 08, 2026 at 09:53:17AM +0200, Jacopo Mondi wrote:
> > > >>>>>>>>> Hi Laurent
> > > >>>>>>>>> sorry if I reply in place of Sakari but I got this fresh
> > > >>>>>>>>
> > > >>>>>>>> Thanks :-)
> > > >>>>>>>>
> > > >>>>>>>>> On Mon, Jun 08, 2026 at 10:36:53AM +0300, Laurent Pinchart wrote:
> > > >>>>>>>>>> On Mon, Jun 08, 2026 at 12:53:50AM +0300, Sakari Ailus wrote:
> > > >>>>>>>>>>> The PIXEL_RATE control exists to convey the value to the userspace and has
> > > >>>>>>>>>>> no configuration that would need to be programmed to the sensor. Make the
> > > >>>>>>>>>>> control handler ops for the PIXEL_RATE control NULL and avoid a warning
> > > >>>>>>>>>>> (as well as returning an error) from the driver.
> > > >>>>>>>>>>
> > > >>>>>>>>>> I thought the standard way to handle pixel rate being read only was to
> > > >>>>>>>>>> set the V4L2_CTRL_FLAG_READ_ONLY flag, like we do for e.g.
> > > >>>>>>>>>> V4L2_CID_LINK_FREQ. Is that not correct ?
> > > >>>>>>>>>
> > > >>>>>>>>> PIXEL_RATE is RO by default
> > > >>>>>>>>>
> > > >>>>>>>>> drivers/media/v4l2-core/v4l2-ctrls-defs.c: case V4L2_CID_PIXEL_RATE:
> > > >>>>>>>>> drivers/media/v4l2-core/v4l2-ctrls-defs.c- *type = V4L2_CTRL_TYPE_INTEGER64;
> > > >>>>>>>>> drivers/media/v4l2-core/v4l2-ctrls-defs.c- *flags |= V4L2_CTRL_FLAG_READ_ONLY;
> > > >>>>>>>>> drivers/media/v4l2-core/v4l2-ctrls-defs.c- break;
> > > >>>>>>>>>
> > > >>>>>>>>> The purpose of setting the ctrl_ops member to NULL is to avoid having
> > > >>>>>>>>> to handle RO controls in the driver implementation of .s_ctrl().
> > > >>>>>>>>
> > > >>>>>>>> Shouldn't the V4L2 control framework avoid .s_ctrl() calls for read-only
> > > >>>>>>>> controls ? I thought it did already.
> > > >>>>>>>
> > > >>>>>>> The control may be read-only on the UAPI but the driver could still do
> > > >>>>>>> something about it in its s_ctrl() callback. I don't know if any driver
> > > >>>>>>> depends on this though.
> > > >>>>>>
> > > >>>>>> It seems to be one of the many areas where control handling should be
> > > >>>>>> simplified for drivers.
> > > >>>>>>
> > > >>>>>> In any case, the imx219 driver creates the V4L2_CID_LINK_FREQ control
> > > >>>>>> with a non-NULL ops pointer, sets the V4L2_CTRL_FLAG_READ_ONLY flag, and
> > > >>>>>> does not handle V4L2_CID_LINK_FREQ in imx219_set_ctrl(). If there's an
> > > >>>>>> issue for V4L2_CID_PIXEL_RATE there is also an issue for
> > > >>>>>> V4L2_CID_LINK_FREQ.
> > > >>>>>
> > > >>>>> The ops should be set to NULL for link_freq as well.
> > > >>>>>
> > > >>>>>> Maybe the best short term fix would be to drop the dev_info() in the
> > > >>>>>> default case of the ctrl->id switch in imx219_set_ctrl() ?
> > > >>>>>
> > > >>>>> Any reason why not to set ops NULL instead?
> > > >>>>
> > > >>>> Because that seems to be a hack. Drivers shouldn't have to set a NULL
> > > >>>> ops pointer for read-only controls, when there's already a read-only
> > > >>>> flag. I'd like to simplify the code on the driver side and handle this
> > > >>>> in the control framework, not adding yet another arcane rule that most
> > > >>>> driver authors will not be aware of.
> > > >>>
> > > >>> I don't think I'd necessarily call it a hack.
> > > >>
> > > >> It's still yet another undocumented behaviour to will be copied through
> > > >> cargo-cult in a subset of drivers, making the code base more difficult
> > > >> to understand and maintain. The fact that this patch addressed the
> > > >> PIXEL_RATE control but not the LINK_FREQUENCY control proves my concerns
> > > >> are valid :-)
> > > >>
> > > >> I'd like to see one scheme clearly documented, and used by all drivers.
> > > >> Let's first focus on selecting one scheme and documenting it. Hans'
> > > >> opinion would be useful.
> > > >
> > > > We discussed this very same matter a few months ago.
> > > >
> > > > Before having the framework handling this, by not calling into the
> > > > driver's s_ctrl for RO controls, all users in-tree shall be checked to
> > > > make sure they're actually not doing something with those RO controls.
> > > >
> > > > I even started a branch to check all drivers one-by-one and first set
> > > > they're ops to NULL. I quickly got discouraged by the amount of work
> > > > required and gave up.
> > >
> > > Userspace cannot set RO controls, EACCES is returned.
> > >
> > > Drivers can set RO controls (after all, RO just means that userspace can't
> > > change it, but drivers can). And yes, s_ctrl (if present) will be called
> > > in that case. Generally RO controls will have a NULL ops pointer, but there
> > > may be cases where something needs to be done in s_ctrl.
> > >
> > > I can't remember that ever being needed, but I may be wrong, and in any case
> > > the same control framework is used by out-of-tree drivers, so it is not
> > > something I would want to change.
> >
> > Not that we should break out-of-tree drivers just for the fun of it, I
> > don't see that as being by itself a good enough reason to avoid a change
> > to an in-kernel API.
> >
> > > Perhaps include/media/v4l2-ctrls.h should be improved to mention that for
> > > RO controls ops should probably be set to NULL unless you have a really
> > > good reason not to.
> >
> > I'm fine with this patch if we clearly document this is the way to go
> > (and with the LINK_FREQ control being addressed as well).
>
> We do have a slight inconsistency in that v4l2_ctrl_modify_range() and
> v4l2_ctrl_s_ctrl call the handler for READ_ONLY controls, but
> __v4l2_ctrl_handler_setup() does not.
>
> I hit that on my recent IMX355 patchset where the V4L2_CID_HBLANK
> control had been set appropriately and I needed to set the LLP
> register. I initially added the handler, only to find it wasn't
> called.
Hans, any objection against changing that behaviour and call .s_ctrl()
from __v4l2_ctrl_handler_setup() too ?
> I have no issues with the patch, so it gets an
> Acked-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
>
> > > >>> The control may be changeable, but not by the user. If the driver is just
> > > >>> setting the value without going through the control framework, control
> > > >>> events will be omitted.
--
Regards,
Laurent Pinchart
next prev parent reply other threads:[~2026-06-09 16:07 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-07 21:53 [PATCH v5 00/10] Metadata series preparation Sakari Ailus
2026-06-07 21:53 ` [PATCH v5 01/10] media: Documentation: Improve pixel rate calculation documentation Sakari Ailus
2026-06-07 21:53 ` [PATCH v5 02/10] media: imx219: Scale the vblank limits according to rate_factor Sakari Ailus
2026-06-08 7:26 ` Laurent Pinchart
2026-06-08 15:29 ` Dave Stevenson
2026-06-08 21:28 ` Laurent Pinchart
2026-06-09 5:58 ` Jai Luthra
2026-06-09 6:01 ` Jai Luthra
2026-06-07 21:53 ` [PATCH v5 03/10] media: imx219: Account rate_factor in setting upper exposure limit Sakari Ailus
2026-06-07 22:05 ` sashiko-bot
2026-06-08 9:06 ` Laurent Pinchart
2026-06-08 13:44 ` Sakari Ailus
2026-06-08 15:42 ` Dave Stevenson
2026-06-08 21:38 ` Laurent Pinchart
2026-06-07 21:53 ` [PATCH v5 04/10] media: imx219: Make control handler ops for PIXEL_RATE NULL Sakari Ailus
2026-06-08 7:36 ` Laurent Pinchart
2026-06-08 7:53 ` Jacopo Mondi
2026-06-08 8:03 ` Laurent Pinchart
2026-06-08 8:14 ` Sakari Ailus
2026-06-08 8:24 ` Laurent Pinchart
2026-06-08 10:21 ` Sakari Ailus
2026-06-08 10:27 ` Laurent Pinchart
2026-06-08 13:47 ` Sakari Ailus
2026-06-08 14:42 ` Laurent Pinchart
2026-06-09 6:29 ` Jacopo Mondi
2026-06-09 14:55 ` Hans Verkuil
2026-06-09 15:15 ` Laurent Pinchart
2026-06-09 15:56 ` Dave Stevenson
2026-06-09 16:07 ` Laurent Pinchart [this message]
2026-06-09 16:44 ` Dave Stevenson
2026-06-07 21:53 ` [PATCH v5 05/10] media: imx219: Rename "binning" as "bin_hv" in imx219_set_pad_format Sakari Ailus
2026-06-08 15:45 ` Dave Stevenson
2026-06-07 21:53 ` [PATCH v5 06/10] media: imx219: Fix vertical blanking and exposure for analogue binning Sakari Ailus
2026-06-07 22:07 ` sashiko-bot
2026-06-08 6:58 ` Jacopo Mondi
2026-06-08 9:10 ` Laurent Pinchart
2026-06-08 14:07 ` Sakari Ailus
2026-06-08 16:23 ` Jai Luthra
2026-06-08 21:52 ` Laurent Pinchart
2026-06-08 10:31 ` Jai Luthra
2026-06-08 11:19 ` Jai Luthra
2026-06-08 18:06 ` Dave Stevenson
2026-06-09 16:48 ` Jai Luthra
2026-06-08 21:01 ` Laurent Pinchart
2026-06-07 21:53 ` [PATCH v5 07/10] media: Improve enable_streams and disable_streams documentation Sakari Ailus
2026-06-08 9:29 ` Laurent Pinchart
2026-06-08 14:28 ` Sakari Ailus
2026-06-07 21:53 ` [PATCH v5 08/10] media: v4l2-subdev: Move subdev client capabilities into a new struct Sakari Ailus
2026-06-08 9:34 ` Laurent Pinchart
2026-06-08 14:35 ` Sakari Ailus
2026-06-07 21:53 ` [PATCH v5 09/10] media: v4l2-subdev: Add v4l2_subdev_get_fmt_ci() Sakari Ailus
2026-06-08 7:48 ` Laurent Pinchart
2026-06-07 21:53 ` [PATCH v5 10/10] media: v4l2-subdev: Add struct v4l2_subdev_client_info pointer to pad ops Sakari Ailus
2026-06-08 10:16 ` 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=20260609160715.GA1125735@killaraus.ideasonboard.com \
--to=laurent.pinchart@ideasonboard.com \
--cc=benjamin.mugnier@foss.st.com \
--cc=christophe.jaillet@wanadoo.fr \
--cc=dave.stevenson@raspberrypi.com \
--cc=david.plowman@raspberrypi.com \
--cc=dongcheng.yan@intel.com \
--cc=git@apitzsch.eu \
--cc=hansg@kernel.org \
--cc=heimir.sverrisson@gmail.com \
--cc=hpa@redhat.com \
--cc=hverkuil+cisco@kernel.org \
--cc=jacopo.mondi@ideasonboard.com \
--cc=jai.luthra@ideasonboard.com \
--cc=julien.massot@collabora.com \
--cc=khai.wen.ng@intel.com \
--cc=kieran.bingham@ideasonboard.com \
--cc=linux-media@vger.kernel.org \
--cc=mehdi.djait@linux.intel.com \
--cc=mirela.rabulea@nxp.com \
--cc=naush@raspberrypi.com \
--cc=ong.hock.yu@intel.com \
--cc=prabhakar.csengg@gmail.com \
--cc=r-donadkar@ti.com \
--cc=ribalda@kernel.org \
--cc=sakari.ailus@linux.intel.com \
--cc=stefan.klug@ideasonboard.com \
--cc=sylvain.petinot@foss.st.com \
--cc=tomi.valkeinen@ideasonboard.com \
--cc=tomm.merciai@gmail.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.