Re: [PATCH 1/2] Input: add input_invert_abs()

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

 



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




[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