HID: wacom: make the WL connection friendly for the desktop
authorBenjamin Tissoires <benjamin.tissoires@redhat.com>
Thu, 11 Sep 2014 17:14:04 +0000 (13:14 -0400)
committerJiri Kosina <jkosina@suse.cz>
Fri, 12 Sep 2014 12:13:08 +0000 (14:13 +0200)
Currently, tablets connected to the WL receiver all share the same
VID/PID. There is no way for the user space to know which one is which
besides parsing the name. We can force the PID to be set to the
actual hardware. This way, the input device will have the correct PID
which can be match in libwacom.

With only this trick, the pad input does not inherit the ID_INPUT_TABLET
udev property from its parent. We can force udev to accept it by declaring
a BTN_STYLUS which is never used.

This way, tablets connected through WL can be used from the user point of
view in the same way they are used while connected through wire.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Reviewed-by: Ping Cheng <pingc@wacom.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/wacom_sys.c
drivers/hid/wacom_wac.c

index 9e4e1886828d10d12321281ad1ed23a246591bc9..a8b7f16f76fae8f96273d4315e134495e10f5521 100644 (file)
@@ -1035,7 +1035,7 @@ static struct input_dev *wacom_allocate_input(struct wacom *wacom)
        input_dev->uniq = hdev->uniq;
        input_dev->id.bustype = hdev->bus;
        input_dev->id.vendor  = hdev->vendor;
-       input_dev->id.product = hdev->product;
+       input_dev->id.product = wacom_wac->pid ? wacom_wac->pid : hdev->product;
        input_dev->id.version = hdev->version;
        input_set_drvdata(input_dev, wacom);
 
index c3cbbfb5811ff737c97cc81bd0a996c8dc070628..b8180e40534d9447461256b5364b2eff8e4e5400 100644 (file)
@@ -1990,6 +1990,9 @@ int wacom_setup_pad_input_capabilities(struct input_dev *input_dev,
        input_set_abs_params(input_dev, ABS_X, 0, 1, 0, 0);
        input_set_abs_params(input_dev, ABS_Y, 0, 1, 0, 0);
 
+       /* kept for making udev and libwacom accepting the pad */
+       __set_bit(BTN_STYLUS, input_dev->keybit);
+
        switch (features->type) {
        case GRAPHIRE_BT:
                __set_bit(BTN_0, input_dev->keybit);