diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-05-30 10:17:19 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-05-30 10:17:19 -0700 |
commit | 7536d7be7b718f8c5834cbcb7601816562e1b805 (patch) | |
tree | b9dd93b06bc2542465f67cf73851941f1bbc641b /drivers/input/tablet/gtco.c | |
parent | 57f50ca127a3189566af0d6378394c75a26f0f7e (diff) | |
parent | 5adad0133907790c50283bf03271d920d6897043 (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
Input: rename SW_RADIO to SW_RFKILL_ALL
Input: gtco - fix double kfree in error handling path
Input: pxa27x_keypad - miscellaneous fixes
Input: atkbd - mark keyboard as disabled when suspending/unloading
Input: apanel - remove duplicate include
Input: wm9713 - support five wire panels
Input: wm97xx-core - fix race on PHY init
Input: wm97xx-core - fix driver name
Input: wm97xx-core - report a phys for WM97xx touchscreens
Input: i8042 - make sure Dritek quirk is invoked at resume
Input: i8042 - add Dritek quirk for Acer TravelMate 660
Diffstat (limited to 'drivers/input/tablet/gtco.c')
-rw-r--r-- | drivers/input/tablet/gtco.c | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/drivers/input/tablet/gtco.c b/drivers/input/tablet/gtco.c index c5a8661a1ba..1e748e46d12 100644 --- a/drivers/input/tablet/gtco.c +++ b/drivers/input/tablet/gtco.c @@ -830,7 +830,7 @@ static int gtco_probe(struct usb_interface *usbinterface, struct gtco *gtco; struct input_dev *input_dev; struct hid_descriptor *hid_desc; - char *report = NULL; + char *report; int result = 0, retry; int error; struct usb_endpoint_descriptor *endpoint; @@ -916,12 +916,16 @@ static int gtco_probe(struct usb_interface *usbinterface, le16_to_cpu(hid_desc->wDescriptorLength), 5000); /* 5 secs */ - if (result == le16_to_cpu(hid_desc->wDescriptorLength)) + dbg("usb_control_msg result: %d", result); + if (result == le16_to_cpu(hid_desc->wDescriptorLength)) { + parse_hid_report_descriptor(gtco, report, result); break; + } } + kfree(report); + /* If we didn't get the report, fail */ - dbg("usb_control_msg result: :%d", result); if (result != le16_to_cpu(hid_desc->wDescriptorLength)) { err("Failed to get HID Report Descriptor of size: %d", hid_desc->wDescriptorLength); @@ -929,12 +933,6 @@ static int gtco_probe(struct usb_interface *usbinterface, goto err_free_urb; } - /* Now we parse the report */ - parse_hid_report_descriptor(gtco, report, result); - - /* Now we delete it */ - kfree(report); - /* Create a device file node */ usb_make_path(gtco->usbdev, gtco->usbpath, sizeof(gtco->usbpath)); strlcat(gtco->usbpath, "/input0", sizeof(gtco->usbpath)); @@ -988,7 +986,6 @@ static int gtco_probe(struct usb_interface *usbinterface, usb_buffer_free(gtco->usbdev, REPORT_MAX_SIZE, gtco->buffer, gtco->buf_dma); err_free_devs: - kfree(report); input_free_device(input_dev); kfree(gtco); return error; |