Signed-off-by: Jan Vesely <jano.ves...@gmail.com> --- hw/usb/dev-hid.c | 38 +++++++++++++++++--------------------- 1 file changed, 17 insertions(+), 21 deletions(-)
diff --git a/hw/usb/dev-hid.c b/hw/usb/dev-hid.c index 67a57f1..b3d02b2 100644 --- a/hw/usb/dev-hid.c +++ b/hw/usb/dev-hid.c @@ -566,9 +566,22 @@ static void usb_hid_handle_destroy(USBDevice *dev) hid_free(&us->hid); } -static int usb_hid_initfn(USBDevice *dev, int kind) +static int usb_hid_initfn(USBDevice *dev, int kind, + const USBDesc *usb1, const USBDesc *usb2) { USBHIDState *us = DO_UPCAST(USBHIDState, dev, dev); + switch (us->usb_version) { + case 1: + dev->usb_desc = usb1; + break; + case 2: + dev->usb_desc = usb2; + break; + default: + error_report("Invalid usb version %d for hid device (must be 1 or 2)", + us->usb_version); + return -1; + } if (dev->serial) { usb_desc_set_string(dev, STR_SERIALNUMBER, dev->serial); @@ -584,32 +597,17 @@ static int usb_hid_initfn(USBDevice *dev, int kind) static int usb_tablet_initfn(USBDevice *dev) { - USBHIDState *us = DO_UPCAST(USBHIDState, dev, dev); - - switch (us->usb_version) { - case 1: - dev->usb_desc = &desc_tablet; - break; - case 2: - dev->usb_desc = &desc_tablet2; - break; - default: - error_report("Invalid usb version %d for usb-tabler (must be 1 or 2)", - us->usb_version); - return -1; - } - - return usb_hid_initfn(dev, HID_TABLET); + return usb_hid_initfn(dev, HID_TABLET, &desc_tablet, &desc_tablet2); } static int usb_mouse_initfn(USBDevice *dev) { - return usb_hid_initfn(dev, HID_MOUSE); + return usb_hid_initfn(dev, HID_MOUSE, &desc_mouse, &desc_mouse); } static int usb_keyboard_initfn(USBDevice *dev) { - return usb_hid_initfn(dev, HID_KEYBOARD); + return usb_hid_initfn(dev, HID_KEYBOARD, &desc_keyboard, &desc_keyboard); } static int usb_ptr_post_load(void *opaque, int version_id) @@ -691,7 +689,6 @@ static void usb_mouse_class_initfn(ObjectClass *klass, void *data) usb_hid_class_initfn(klass, data); uc->init = usb_mouse_initfn; uc->product_desc = "QEMU USB Mouse"; - uc->usb_desc = &desc_mouse; dc->vmsd = &vmstate_usb_ptr; set_bit(DEVICE_CATEGORY_INPUT, dc->categories); } @@ -716,7 +713,6 @@ static void usb_keyboard_class_initfn(ObjectClass *klass, void *data) usb_hid_class_initfn(klass, data); uc->init = usb_keyboard_initfn; uc->product_desc = "QEMU USB Keyboard"; - uc->usb_desc = &desc_keyboard; dc->vmsd = &vmstate_usb_kbd; dc->props = usb_keyboard_properties; set_bit(DEVICE_CATEGORY_INPUT, dc->categories); -- 1.9.3