diff options
Diffstat (limited to 'hid-tminit.c')
| -rw-r--r-- | hid-tminit.c | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/hid-tminit.c b/hid-tminit.c index f9b14d8..ba52ea3 100644 --- a/hid-tminit.c +++ b/hid-tminit.c @@ -1,7 +1,11 @@ #include "hid-tminit.h" static void tminit_callback(struct urb *urb){ - hid_info(urb->dev, "urb status %d received\n", urb->status); + if(urb->status){ + hid_info(urb->dev, "urb status %d received\n", urb->status); + } + + usb_free_urb(urb); } /* for some godawful reason these interrupts are absolutely necessary, otherwise @@ -15,7 +19,7 @@ static void tminit_interrupts(struct hid_device *hdev){ struct device *dev = &hdev->dev; struct usb_interface *usbif = to_usb_interface(dev->parent); struct usb_device *usbdev = interface_to_usbdev(usbif); - + ep = &usbif->cur_altsetting->endpoint[1]; b_ep = ep->desc.bEndpointAddress; @@ -27,12 +31,14 @@ static void tminit_interrupts(struct hid_device *hdev){ send_buf, setup_arr_sizes[i], &trans, - USB_CTRL_SET_TIMEOUT); + USB_CTRL_SET_TIMEOUT + ); if(ret){ hid_err(hdev, "setup data couldn't be sent\n"); return; } + } kzfree(send_buf); @@ -45,7 +51,8 @@ int tminit(struct hid_device *hdev){ struct usb_interface *usbif = to_usb_interface(dev->parent); struct usb_device *usbdev = interface_to_usbdev(usbif); int ret; - + u8 *transfer = kzalloc(64, GFP_ATOMIC); + tminit_interrupts(hdev); setup_packet = kmalloc(8, GFP_ATOMIC); @@ -57,13 +64,13 @@ int tminit(struct hid_device *hdev){ urb = usb_alloc_urb(0, GFP_ATOMIC); usb_fill_control_urb(urb, - usbdev, - usb_sndctrlpipe(usbdev, 0), - setup_packet, - transfer_buffer, - 8, - tminit_callback, - hdev); + usbdev, + usb_sndctrlpipe(usbdev, 0), + setup_packet, + transfer_buffer, + 8, + tminit_callback, + hdev); /* we sort of have to go on faith that the message is sent, because the * wheel usually completely dies as soon as it receives the message. @@ -72,6 +79,7 @@ int tminit(struct hid_device *hdev){ ret = usb_submit_urb(urb, GFP_ATOMIC); kfree(setup_packet); kfree(transfer_buffer); + kfree(transfer); return ret; } @@ -94,7 +102,7 @@ static int tminit_probe(struct hid_device *hdev, const struct hid_device_id *id) hid_err(hdev, "hw start failed\n"); goto err; } - + ret = tminit(hdev); if(ret){ hid_err(hdev, "tminit exited, error might be intended behaviour\n"); |
