Re: [RFC] dt-bindings: input: Clarify that abs_min must be less than abs_max

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

 



On Wed, Dec 20, 2023 at 01:23:31AM +0100, Paul Cercueil wrote:
> Hi Dmitry,
> 
> Le mardi 19 décembre 2023 à 12:32 -0800, Dmitry Torokhov a écrit :
> > On Fri, Dec 15, 2023 at 12:19:51PM +0100, Artur Rojek wrote:
> > > On 2023-12-15 03:40, Chris Morgan wrote:
> > > > From: Chris Morgan <macromorgan@xxxxxxxxxxx>
> > > > 
> > > > uinput refuses to work with abs devices where the min value is
> > > > greater
> > > > than the max value. uinput_validate_absinfo() returns -EINVAL if
> > > > this
> > > > is the case and prevents using uinput on such a device. Since
> > > > uinput
> > > > has worked this way since at least kernel 2.6 (or prior) I
> > > > presume that
> > > > this is the correct way of doing things, and that this
> > > > documentation
> > > > needs to be clarified that min must always be less than max.
> > > > 
> > > > uinput is used in my use case to bind together adc-joystick
> > > > devices
> > > > with gpio-keys devices to create a single unified gamepad for
> > > > userspace.
> > > > 
> > > > Note that there are several boards that will need to be
> > > > corrected,
> > > > all but a few of them I maintain. Submitting as an RFC for now to
> > > > get
> > > > comments from the input team and the original author in case
> > > > there is
> > > > something I am missing.
> > > > 
> > > > Fixes: 7956b0d4694f ("dt-bindings: input: Add docs for ADC driven
> > > > joystick")
> > > > 
> > > > Signed-off-by: Chris Morgan <macromorgan@xxxxxxxxxxx>
> > > > ---
> > > >  Documentation/devicetree/bindings/input/adc-joystick.yaml | 5
> > > > +++--
> > > >  1 file changed, 3 insertions(+), 2 deletions(-)
> > > > 
> > > > diff --git a/Documentation/devicetree/bindings/input/adc-
> > > > joystick.yaml
> > > > b/Documentation/devicetree/bindings/input/adc-joystick.yaml
> > > > index 6c244d66f8ce..8f5cdd5ef190 100644
> > > > --- a/Documentation/devicetree/bindings/input/adc-joystick.yaml
> > > > +++ b/Documentation/devicetree/bindings/input/adc-joystick.yaml
> > > > @@ -73,8 +73,9 @@ patternProperties:
> > > >          description: >
> > > >            Minimum and maximum values produced by the axis.
> > > >            For an ABS_X axis this will be the left-most and
> > > > right-most
> > > > -          inclination of the joystick. If min > max, it is left
> > > > to
> > > > userspace to
> > > > -          treat the axis as inverted.
> > > > +          inclination of the joystick. The axis must always be
> > > > expressed as
> > > > +          min < max, if the axis is inverted it is left to
> > > > userspace to
> > > > handle
> > > > +          the inversion.
> > > 
> > > Hi Chris,
> > > 
> > > Device Tree is supposed to depict the actual state of the hardware.
> > > I worded the adc-joytick's adc-range property specifically, so that
> > > it
> > > covers a case of GCW Zero hardware [1], which has a joystick, 
> > > where the
> > > ABS_X axis reports increasing values for the left-wards inclination
> > > of
> > > the joystick, and decreasing values for the right-wards
> > > inclination. You
> > > are saying that there are even more boards that need to be
> > > corrected -
> > > those are all situations, where DT depicts the actual behavior of
> > > the
> > > hardware.
> > > What you are trying to do is change hardware description, because
> > > of how
> > > a driver in an OS works. You should instead fix behavior of said
> > > driver,
> > > even if nobody stumbled upon that issue since 2.6 :) We fixed
> > > libSDL [2]
> > > for the same reason.
> > 
> > We have several places in the kernel (such as mousedev and joydev)
> > where
> > we expect that max is greater or equal to min if they are specified.
> > I
> > am sure that at least some userspace components also have this
> > assumption. In general, we expect min to be a minimum value reported
> > and
> > max being maximum value reported, and orientation expressed via
> > different properties (see [1]).
> 
> You can express all you want in DT properties the orientation of the
> axis, it does not carry to userspace. As far as I can see there is
> absolutely no way to tell userspace that an axis is inverted.

That is true, and I will argue that it is a feature. Kernel's task is to
normalize the data stream and present it to userspace so that it does
not have to deal with differences of hardware. This abstraction often
breaks, but when we can keep it, we should.

Thanks.

-- 
Dmitry




[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux