1 From 16c10bede8b3d8594279752bf53153491f3f944f Mon Sep 17 00:00:00 2001
2 From: Mathias Crombez <mathias.crombez@faurecia.com>
3 Date: Fri, 15 Jan 2021 02:26:23 +0200
4 Subject: [PATCH] virtio-input: add multi-touch support
6 Without multi-touch slots allocated, ABS_MT_SLOT events will be lost by
7 input_handle_abs_event.
9 Implementation is based on uinput_create_device.
11 Signed-off-by: Mathias Crombez <mathias.crombez@faurecia.com>
12 Co-developed-by: Vasyl Vavrychuk <vasyl.vavrychuk@opensynergy.com>
13 Signed-off-by: Vasyl Vavrychuk <vasyl.vavrychuk@opensynergy.com>
14 Link: https://lore.kernel.org/r/20210115002623.8576-1-vasyl.vavrychuk@opensynergy.com
15 Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
16 Reviewed-by: Gerd Hoffmann <kraxel@redhat.com>
18 drivers/virtio/virtio_input.c | 11 ++++++++++-
19 1 file changed, 10 insertions(+), 1 deletion(-)
21 diff --git a/drivers/virtio/virtio_input.c b/drivers/virtio/virtio_input.c
22 index 244965c20d9b..ce51ae165943 100644
23 --- a/drivers/virtio/virtio_input.c
24 +++ b/drivers/virtio/virtio_input.c
27 #include <uapi/linux/virtio_ids.h>
28 #include <uapi/linux/virtio_input.h>
29 +#include <linux/input/mt.h>
32 struct virtio_device *vdev;
33 @@ -219,7 +220,7 @@ static int virtinput_probe(struct virtio_device *vdev)
34 struct virtio_input *vi;
38 + int abs, err, nslots;
40 if (!virtio_has_feature(vdev, VIRTIO_F_VERSION_1))
42 @@ -304,6 +305,13 @@ static int virtinput_probe(struct virtio_device *vdev)
44 virtinput_cfg_abs(vi, abs);
47 + if (test_bit(ABS_MT_SLOT, vi->idev->absbit)) {
48 + nslots = input_abs_get_max(vi->idev, ABS_MT_SLOT) + 1;
49 + err = input_mt_init_slots(vi->idev, nslots, 0);
51 + goto err_mt_init_slots;
55 virtio_device_ready(vdev);
56 @@ -319,6 +327,7 @@ static int virtinput_probe(struct virtio_device *vdev)
57 spin_lock_irqsave(&vi->lock, flags);
59 spin_unlock_irqrestore(&vi->lock, flags);
61 input_free_device(vi->idev);
63 vdev->config->del_vqs(vdev);