summaryrefslogtreecommitdiffstats
path: root/drivers/usb/input/wacom_sys.c
diff options
context:
space:
mode:
authorDmitry Torokhov2007-04-12 07:33:39 +0200
committerDmitry Torokhov2007-04-12 07:33:39 +0200
commit5014186de89708d0e9eed60526b698d5b786b707 (patch)
tree949ea6219db7779f635a34278325bd2d9617c657 /drivers/usb/input/wacom_sys.c
parentInput: remove old USB touchscreen drivers (diff)
downloadkernel-qcow2-linux-5014186de89708d0e9eed60526b698d5b786b707.tar.gz
kernel-qcow2-linux-5014186de89708d0e9eed60526b698d5b786b707.tar.xz
kernel-qcow2-linux-5014186de89708d0e9eed60526b698d5b786b707.zip
Input: USB devices - handle errors when registering input devices
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
Diffstat (limited to 'drivers/usb/input/wacom_sys.c')
-rw-r--r--drivers/usb/input/wacom_sys.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/usb/input/wacom_sys.c b/drivers/usb/input/wacom_sys.c
index 12b42746ded8..48988e63ebec 100644
--- a/drivers/usb/input/wacom_sys.c
+++ b/drivers/usb/input/wacom_sys.c
@@ -201,6 +201,7 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i
struct wacom *wacom;
struct wacom_wac *wacom_wac;
struct input_dev *input_dev;
+ int error = -ENOMEM;
char rep_data[2], limit = 0;
wacom = kzalloc(sizeof(struct wacom), GFP_KERNEL);
@@ -252,7 +253,9 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i
wacom->irq->transfer_dma = wacom->data_dma;
wacom->irq->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
- input_register_device(wacom->dev);
+ error = input_register_device(wacom->dev);
+ if (error)
+ goto fail3;
/* Ask the tablet to report tablet data. Repeat until it succeeds */
do {
@@ -265,11 +268,12 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i
usb_set_intfdata(intf, wacom);
return 0;
-fail2: usb_buffer_free(dev, 10, wacom_wac->data, wacom->data_dma);
-fail1: input_free_device(input_dev);
+ fail3: usb_free_urb(wacom->irq);
+ fail2: usb_buffer_free(dev, 10, wacom_wac->data, wacom->data_dma);
+ fail1: input_free_device(input_dev);
kfree(wacom);
kfree(wacom_wac);
- return -ENOMEM;
+ return error;
}
static void wacom_disconnect(struct usb_interface *intf)