@@ -1209,6 +1209,7 @@ static int usbhid_start(struct hid_device *hid)
static void usbhid_stop(struct hid_device *hid)
{
struct usbhid_device *usbhid = hid->driver_data;
+ int index;
if (WARN_ON(!usbhid))
return;
@@ -1232,6 +1233,13 @@ static void usbhid_stop(struct hid_device *hid)
hid->claimed = 0;
+ for (index = 0; index < HID_CONTROL_FIFO_SIZE; index++) {
+ if (usbhid->ctrl[index].raw_report)
+ kfree(usbhid->ctrl[index].raw_report);
+ if (usbhid->out[index].raw_report)
+ kfree(usbhid->out[index].raw_report);
+ }
+
usb_free_urb(usbhid->urbin);
usb_free_urb(usbhid->urbctrl);
usb_free_urb(usbhid->urbout);