aboutsummaryrefslogtreecommitdiff
path: root/hid-tminit.c
diff options
context:
space:
mode:
Diffstat (limited to 'hid-tminit.c')
-rw-r--r--hid-tminit.c32
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");