Linux need to fill up the hid descriptor in order to let the driver be emulated. This patch was tested on top of qemu 4.2.0 and recent linux kernel.
modprobe wacom.ko evtest tool Signed-off-by: Michael Trimarchi <mich...@amarulasolutions.com> --- hw/usb/dev-wacom.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/hw/usb/dev-wacom.c b/hw/usb/dev-wacom.c index 8aba44b8bc..fe95699672 100644 --- a/hw/usb/dev-wacom.c +++ b/hw/usb/dev-wacom.c @@ -259,6 +259,64 @@ static void usb_wacom_handle_reset(USBDevice *dev) s->mode = WACOM_MODE_HID; } +static const uint8_t qemu_wacom_hid_report_descriptor[] = { + 0x05, 0x01, + 0x09, 0x02, + 0xa1, 0x01, + 0x85, 0x01, + 0x09, 0x01, + 0xa1, 0x00, + 0x05, 0x09, + 0x19, 0x01, + 0x29, 0x03, + 0x15, 0x00, + 0x25, 0x01, + 0x95, 0x03, + 0x75, 0x01, + 0x81, 0x02, + 0x95, 0x01, + 0x75, 0x05, + 0x81, 0x01, + 0x05, 0x01, + 0x09, 0x30, + 0x09, 0x31, + 0x09, 0x38, + 0x15, 0x81, + 0x25, 0x7f, + 0x75, 0x08, + 0x95, 0x03, + 0x81, 0x06, + 0x95, 0x03, + 0x81, 0x01, + 0xc0, 0xc0, + 0x05, 0x0d, + 0x09, 0x01, + 0xa1, 0x01, + 0x85, 0x02, + 0xa1, 0x00, + 0x06, 0x00, + 0xff, 0x09, + 0x01, 0x15, + 0x00, 0x26, + 0xff, 0x00, + 0x75, 0x08, + 0x95, 0x07, + 0x81, 0x02, + 0xc0, 0x09, + 0x01, 0x85, + 0x63, 0x95, + 0x07, 0x81, + 0x02, 0x09, + 0x01, 0x85, + 0x02, 0x95, + 0x01, 0xb1, + 0x02, 0x09, + 0x01, 0x85, + 0x03, 0x95, + 0x01, 0xb1, + 0x02, 0xc0, +}; + static void usb_wacom_handle_control(USBDevice *dev, USBPacket *p, int request, int value, int index, int length, uint8_t *data) { @@ -271,6 +329,18 @@ static void usb_wacom_handle_control(USBDevice *dev, USBPacket *p, } switch (request) { + case InterfaceRequest | USB_REQ_GET_DESCRIPTOR: + switch (value >> 8) { + case 0x22: + memcpy(data, qemu_wacom_hid_report_descriptor, + sizeof(qemu_wacom_hid_report_descriptor)); + p->actual_length = sizeof(qemu_wacom_hid_report_descriptor); + break; + default: + goto fail; + } + break; + case WACOM_SET_REPORT: if (s->mouse_grabbed) { qemu_remove_mouse_event_handler(s->eh_entry); -- 2.25.1