Re: [PATCH 2/2] Input: Allow devices to state that they aren't joysticks

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

 



Hi, Dmitry & input list.

I noticed that patch 1 in this series (VMMouse support) has made it to
Linus' tree. However, this patch seems to be missing. It's crucial for
VMMouse since without it, a number of games will recognize the vmmouse
as a joystick and
leave the cursor stuck in the upper left corner.
(The VMware USB absolute mouse has been disabled for Linux guests
because of this).

Is there a chance we can have this patch in as well. An alternative that
I've tested briefly is to add a fake
BTN_DIGI to the absolute device to trick joydev, but that's rather
hackish and will probably cause future confusion.

Any feedback appreciated.

Thanks,
Thomas Hellström


On 04/13/2015 08:07 AM, Thomas Hellstrom wrote:
> Sometimes the device driver knows that a device isn't a joystick.
> In those cases, allow the driver to ovveride joydev's guess.
>
> Signed-off-by: Thomas Hellstrom <thellstrom@xxxxxxxxxx>
> ---
>  drivers/input/joydev.c        | 4 ++++
>  drivers/input/mouse/vmmouse.c | 1 +
>  include/linux/input.h         | 5 +++++
>  3 files changed, 10 insertions(+)
>
> diff --git a/drivers/input/joydev.c b/drivers/input/joydev.c
> index f362883..6add101 100644
> --- a/drivers/input/joydev.c
> +++ b/drivers/input/joydev.c
> @@ -750,6 +750,10 @@ static void joydev_cleanup(struct joydev *joydev)
>  
>  static bool joydev_match(struct input_handler *handler, struct input_dev *dev)
>  {
> +	/* Avoid devices that explicitly don't want to be joysticks */
> +	if (dev->flags & INPUT_FLAG_NO_JOYSTICK)
> +		return false;
> +
>  	/* Avoid touchpads and touchscreens */
>  	if (test_bit(EV_KEY, dev->evbit) && test_bit(BTN_TOUCH, dev->keybit))
>  		return false;
> diff --git a/drivers/input/mouse/vmmouse.c b/drivers/input/mouse/vmmouse.c
> index b3a6170..0fabe3d 100644
> --- a/drivers/input/mouse/vmmouse.c
> +++ b/drivers/input/mouse/vmmouse.c
> @@ -468,6 +468,7 @@ int vmmouse_init(struct psmouse *psmouse)
>  	abs_dev->id.product = PSMOUSE_VMMOUSE;
>  	abs_dev->id.version = psmouse->model;
>  	abs_dev->dev.parent = &psmouse->ps2dev.serio->dev;
> +	abs_dev->flags |= INPUT_FLAG_NO_JOYSTICK;
>  
>  	if (input_register_device(priv->abs_dev))
>  		goto init_fail;
> diff --git a/include/linux/input.h b/include/linux/input.h
> index 82ce323..516387e 100644
> --- a/include/linux/input.h
> +++ b/include/linux/input.h
> @@ -117,6 +117,7 @@ struct input_value {
>   * @vals: array of values queued in the current frame
>   * @devres_managed: indicates that devices is managed with devres framework
>   *	and needs not be explicitly unregistered or freed.
> + * @flags: Device flags.
>   */
>  struct input_dev {
>  	const char *name;
> @@ -187,9 +188,13 @@ struct input_dev {
>  	struct input_value *vals;
>  
>  	bool devres_managed;
> +
> +	u32 flags;
>  };
>  #define to_input_dev(d) container_of(d, struct input_dev, dev)
>  
> +#define INPUT_FLAG_NO_JOYSTICK      (1 << 0)
> +
>  /*
>   * Verify that we are in sync with input_device_id mod_devicetable.h #defines
>   */

--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[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