Message ID | 20231231205643.129435-1-macroalpha82@gmail.com |
---|---|
Headers | show |
Series | Allow inverted axes for adc-joystick | expand |
Hi Chris, On Sun, Dec 31, 2023 at 02:56:42PM -0600, Chris Morgan wrote: > From: Chris Morgan <macromorgan@hotmail.com> > > 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@hotmail.com> > --- > 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.
From: Chris Morgan <macromorgan@hotmail.com> Handle inverted axes in the adc-joystick driver so that reported input events downstream from the driver conform with assumptions that abs_min < abs_max. Add a new helper function for inputs so that abs can be inverted that drivers can use. Chris Morgan (2): Input: add input_invert_abs() Input: adc-joystick: Handle inverted axes drivers/input/input.c | 19 +++++++++++++++++++ drivers/input/joystick/adc-joystick.c | 13 ++++++++++++- include/linux/input.h | 1 + 3 files changed, 32 insertions(+), 1 deletion(-)