Hi Chris, On Sun, Dec 31, 2023 at 02:56:42PM -0600, Chris Morgan wrote: > From: Chris Morgan <macromorgan@xxxxxxxxxxx> > > Add a helper function to make it easier for a driver to invert abs > values when needed. It is up to the driver itself to track axes that > need to be inverted and normalize the data before it is passed on. > > This function assumes that drivers will set the min and max values > so that min < max and then will simply call this function each time > the values need to be inverted. > > Signed-off-by: Chris Morgan <macromorgan@xxxxxxxxxxx> > --- > drivers/input/input.c | 19 +++++++++++++++++++ > include/linux/input.h | 1 + > 2 files changed, 20 insertions(+) > > diff --git a/drivers/input/input.c b/drivers/input/input.c > index 8c5fdb0f858a..f135aed165a1 100644 > --- a/drivers/input/input.c > +++ b/drivers/input/input.c > @@ -552,6 +552,25 @@ void input_copy_abs(struct input_dev *dst, unsigned int dst_axis, > } > EXPORT_SYMBOL(input_copy_abs); > > +/** > + * input_invert_abs - Invert the abs value for an inverted axis. > + * @dev: Input device with absolute events > + * @axis: ABS_* value selecting the destination axis for the event to > + * invert. > + * @val: Value to be inverted based on min and max values of the axis. > + * > + * Return an inverted value for a given ABS axis based on its min and > + * max values. > + */ > +int input_invert_abs(struct input_dev *dev, unsigned int axis, int val) > +{ > + int min = dev->absinfo[axis].minimum; > + int max = dev->absinfo[axis].maximum; > + > + return (max + min) - val; I do not think this is generic enough (i.e. sometimes you have a theoretical range in which you want to invert that is bigger than the normal min/max - see synaptics_invert_y()), so I would prefer this be lolcal to the ADC joystick driver, at least for now. Thanks. -- Dmitry