HID: multitouch: support Perixx PERIPAD 701
authorBenjamin Tissoires <benjamin.tissoires@enac.fr>
Sat, 4 Feb 2012 16:08:50 +0000 (17:08 +0100)
committerJiri Kosina <jkosina@suse.cz>
Mon, 6 Feb 2012 12:22:39 +0000 (13:22 +0100)
Perixx Peripad 701 is an hybrid device which presents a touchpad and
a keyboard on the same surface. The switch between the two is controlled
by a physical switch, and the firmware sends the events on the right
interface (mouse, keyboard or multitouch).
This patch enables the multitouch interface of this device to work.

We need to manually set the device as a trackpad (we cannot infer it
from the reports descriptors as the device works under Windows, a system
that does not allow multitouch touchpad).
We also need to set the hid feature MAX CONTACT NUMBER to 2 or the device
stops sending events once it has been pressed by two touches.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@enac.fr>
Acked-by: Henrik Rydberg <rydberg@euromail.se>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/Kconfig
drivers/hid/hid-ids.h
drivers/hid/hid-multitouch.c

index a421abdd1ab7968e696d91f8f1b10ca1ff6a31a2..f7c43b6c3567786ff67a215ed01cac3f5f728cac 100644 (file)
@@ -355,6 +355,7 @@ config HID_MULTITOUCH
          - Lumio CrystalTouch panels
          - MosArt dual-touch panels
          - PenMount dual touch panels
+         - Perixx Peripad 701 touchpad
          - PixArt optical touch screen
          - Pixcir dual touch panels
          - Quanta panels
index b8574cddd95352a360ef7ff67200527185b3c1fb..662a0b6a66429d4dfa13985f7bdf69cc95379b51 100644 (file)
 
 #define USB_VENDOR_ID_TOPSEED2         0x1784
 #define USB_DEVICE_ID_TOPSEED2_RF_COMBO        0x0004
+#define USB_DEVICE_ID_TOPSEED2_PERIPAD_701     0x0016
 
 #define USB_VENDOR_ID_TOPMAX           0x0663
 #define USB_DEVICE_ID_TOPMAX_COBRAPAD  0x0103
index d0fa6a7e9bc053ad1aaeb3e36cf7045a624f9698..387a72fb1c8481d18ed3434475b8b26197a1afde 100644 (file)
@@ -103,6 +103,7 @@ struct mt_device {
 #define MT_CLS_CYPRESS                         0x0102
 #define MT_CLS_EGALAX                          0x0103
 #define MT_CLS_EGALAX_SERIAL                   0x0104
+#define MT_CLS_TOPSEED                         0x0105
 
 #define MT_DEFAULT_MAXCONTACT  10
 
@@ -192,6 +193,11 @@ static struct mt_class mt_classes[] = {
                .sn_move = 4096,
                .sn_pressure = 32,
        },
+       { .name = MT_CLS_TOPSEED,
+               .quirks = MT_QUIRK_ALWAYS_VALID,
+               .is_indirect = true,
+               .maxcontacts = 2,
+       },
 
        { }
 };
@@ -897,6 +903,11 @@ static const struct hid_device_id mt_devices[] = {
                HID_USB_DEVICE(USB_VENDOR_ID_STANTUM_SITRONIX,
                        USB_DEVICE_ID_MTP_SITRONIX)},
 
+       /* TopSeed panels */
+       { .driver_data = MT_CLS_TOPSEED,
+               HID_USB_DEVICE(USB_VENDOR_ID_TOPSEED2,
+                       USB_DEVICE_ID_TOPSEED2_PERIPAD_701) },
+
        /* Touch International panels */
        { .driver_data = MT_CLS_DEFAULT,
                HID_USB_DEVICE(USB_VENDOR_ID_TOUCH_INTL,