Re: [PATCH v2 0/4] V4L2 sub-device active state helper, CCS fixes

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Moi,

On Tue, Oct 10, 2023 at 11:03:40AM +0300, Tomi Valkeinen wrote:
> On 10/10/2023 10:46, Sakari Ailus wrote:
> > Moi,
> > 
> > On Tue, Oct 10, 2023 at 10:40:05AM +0300, Tomi Valkeinen wrote:
> > > On 10/10/2023 10:23, Sakari Ailus wrote:
> > > > Moi,
> > > > 
> > > > On Tue, Oct 10, 2023 at 09:52:48AM +0300, Tomi Valkeinen wrote:
> > > > > On 10/10/2023 01:09, Sakari Ailus wrote:
> > > > > > Hi folks,
> > > > > > 
> > > > > > This set includes a helper for working with V4L2 sub-device active state as
> > > > > > well as a fix for the CCS driver sub-device state patch.
> > > > > > 
> > > > > > since v1:
> > > > > > 
> > > > > > - There were other drivers using __v4l2_subdev_state_alloc(). Ouch. Change
> > > > > >      those users as well. Note that this function should not be used in
> > > > > >      drivers, hence API niceness is not a high priority.
> > > > > > 
> > > > > > Sakari Ailus (4):
> > > > > >      media: v4l: subdev: Set sub-device active state earlier
> > > > > >      media: v4l: subdev: Add a helper to tell if a sub-device state is
> > > > > >        active
> > > > > >      media: ccs: Rework initialising sub-device state
> > > > > >      media: ccs: Fix a (harmless) lockdep warning
> > > > > > 
> > > > > >     drivers/media/i2c/ccs/ccs-core.c              | 64 ++++++++++++-------
> > > > > >     .../platform/renesas/rcar-vin/rcar-v4l2.c     |  3 +-
> > > > > >     .../media/platform/renesas/vsp1/vsp1_entity.c |  3 +-
> > > > > >     drivers/media/v4l2-core/v4l2-subdev.c         | 14 ++--
> > > > > >     drivers/staging/media/tegra-video/vi.c        |  2 +-
> > > > > >     include/media/v4l2-subdev.h                   | 11 +++-
> > > > > >     6 files changed, 66 insertions(+), 31 deletions(-)
> > > > > > 
> > > > > 
> > > > > I'm not familiar with the CCS driver, and you don't explain much why you are
> > > > > doing this, so it's a bit unclear to me. But I don't like it.
> > > > > 
> > > > > The idea with the subdev state was that the driver doesn't need to know
> > > > > whether it's active-state or try-state. It should behave the same way in
> > > > > both cases. This series goes against that.
> > > > > 
> > > > > Can you explain a bit what the issue is and what you are doing in this
> > > > > series?
> > > > 
> > > > The driver maintains internal state and that needs to be updated when the
> > > > configuration (including what's in sub-device state) changes. Generally the
> > > > driver knows (as for the whence field) which state it's dealing with but
> > > > that is not the case for init_cfg.
> > > 
> > > So you need to set the subdev state to sd->active_state earlier (in patch 1)
> > > so that the driver can use v4l2_subdev_state_whence()? You don't really
> > > explain that in the patch descriptions.
> > > 
> > > In other words, if init_cfg() were to get a whence-parameter, this wouldn't
> > > be needed? (I don't want to do that, just trying to understand what's going
> > > on).
> > 
> > Yes, that's correct.
> 
> Ok. So the driver keeps some private state separately from the subdev state,
> and keeps track of only the active state details, and thus it needs to know
> the whence in init_cfg so that it can fill in those details only when
> dealing with active state.

Precisely so.

> 
> > > > Alternatively I could split the internal workings of the driver into active
> > > > and try states but I prefer to improve the framework and make the driver
> > > > simpler.
> > > 
> > > I agree with the goal, but I don't think this is improving the framework.
> > > 
> > > If we decide that we need to know if a state is an active-state or a
> > > try-state, I think it's better to add a whence-field into the state itself.
> > > But I'd rather not.
> > 
> > In all other callbacks the whence is known but not in init_cfg.
> 
> Yes, those should be removed =).
> 
> Well, that may not work, but at least we should consider if a specific
> callback should ever care about active/try, and if not, remove the whence.
> 
> > Comparing with sd->active_state does this pretty cleanly, without a need to
> > change APIs.
> > 
> > > 
> > > > Deducing the internal configuration solely based on sub-device state is not
> > > > really feasible.
> > > 
> > > Am I correct in that what you really need is a way to sub-class the subdev
> > > state, so that you can have all that internal state in the subdev state, and
> > > thus all the code in the driver can work in "whence-agnostic" manner? That's
> > > something we've been thinking about for a long time.
> > 
> > In the case of the CCS driver it's not necessary to store these parameters
> > for try states: they are driver internal only.
> 
> That's fine, the sub-classed state can only have driver internal data (in
> addition to the standard data).
> 
> I think a follow-up question here is: why do you need to keep track of state
> that's only needed for active state? What is that state?

Sensor register values effectively. These are programmed just before
streaming starts. There's scaling factor, whether scaling is
horizontal-only, both vertical and horizontal or if there's no scaling.
Similarly for binning.

> 
> > > But the driver needs to be fixed now, not at some point in the future, of
> > > course. If the sub-classing would solve the issue (i.e. we have a plan in
> > > mind), I'd rather just hack this in the driver, instead of extending the
> > > framework, which might easily lead to other drivers going the wrong way too.
> > > 
> > > How about a private flag, set before calling v4l2_subdev_init_finalize(),
> > > and unset after the call. ccs_init_cfg() can look at that flag an if it's
> > > set, it's initializing an active state.
> > 
> > I dislike using driver specific flags in generic APIs.
> 
> I meant in the driver private state. Add a field to the driver's private
> data struct, and use that. Then it's wholly inside the driver, and needs
> just a few lines of hack-code, easy to remove later.
> 
> > While trivial sensor drivers have no use for such functionality, I would be
> > surprised if there would not be other similar cases.
> 
> Can you open this up a bit? Why do drivers need to know if an operation is
> about active or try state?
> 
> Answering my own question:
> 
> In some cases it's implicit: when starting the streaming, it's always active
> state. Similarly in, e.g., get_frame_desc.
> 
> Some operations might allow changing HW settings while streaming is enabled.
> I guess set_fmt might allow changing some specific things even while
> streaming is enabled. And if so, the callback needs to know if this is for
> active state or not.
> 
> But why does a driver need to know the whence in init_cfg? With sub-classed
> state, init_cfg should work fine for both active-state and try-state.

See above.

While init_cfg does not (obviously) enable binning or scaling, it still
deals with the same configuration parameters.

-- 
Regards,

Sakari Ailus



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux