ChangeSet 1.808.2.15, 2002/10/28 11:46:49-08:00, [EMAIL PROTECTED]

USB: fix the usb input drivers due to interrupt urb no automatic resubmission change 
to the usb core.


diff -Nru a/drivers/usb/input/aiptek.c b/drivers/usb/input/aiptek.c
--- a/drivers/usb/input/aiptek.c        Mon Oct 28 13:53:38 2002
+++ b/drivers/usb/input/aiptek.c        Mon Oct 28 13:53:38 2002
@@ -134,9 +134,22 @@
        int y;
        int pressure;
        int proximity;
+       int retval;
 
-       if (urb->status)
+       switch (urb->status) {
+       case 0:
+               /* success */
+               break;
+       case -ECONNRESET:
+       case -ENOENT:
+       case -ESHUTDOWN:
+               /* this urb is terminated, clean up */
+               dbg("%s - urb shutting down with status: %d", __FUNCTION__, 
+urb->status);
                return;
+       default:
+               dbg("%s - nonzero urb status received: %d", __FUNCTION__, urb->status);
+               goto exit;
+       }
 
        if ((data[0] & 2) == 0) {
                dbg("received unknown report #%d", data[0]);
@@ -165,6 +178,11 @@
 
        input_sync(dev);
 
+exit:
+       retval = usb_submit_urb (urb, GFP_ATOMIC);
+       if (retval)
+               err ("%s - usb_submit_urb failed with result %d",
+                    __FUNCTION__, retval);
 }
 
 struct aiptek_features aiptek_features[] = {
diff -Nru a/drivers/usb/input/powermate.c b/drivers/usb/input/powermate.c
--- a/drivers/usb/input/powermate.c     Mon Oct 28 13:53:38 2002
+++ b/drivers/usb/input/powermate.c     Mon Oct 28 13:53:38 2002
@@ -78,14 +78,33 @@
 static void powermate_irq(struct urb *urb)
 {
        struct powermate_device *pm = urb->context;
+       int retval;
 
-       if (urb->status)
+       switch (urb->status) {
+       case 0:
+               /* success */
+               break;
+       case -ECONNRESET:
+       case -ENOENT:
+       case -ESHUTDOWN:
+               /* this urb is terminated, clean up */
+               dbg("%s - urb shutting down with status: %d", __FUNCTION__, 
+urb->status);
                return;
+       default:
+               dbg("%s - nonzero urb status received: %d", __FUNCTION__, urb->status);
+               goto exit;
+       }
 
        /* handle updates to device state */
        input_report_key(&pm->input, BTN_0, pm->data[0] & 0x01);
        input_report_rel(&pm->input, REL_DIAL, pm->data[1]);
        input_sync(&pm->input);
+
+exit:
+       retval = usb_submit_urb (urb, GFP_ATOMIC);
+       if (retval)
+               err ("%s - usb_submit_urb failed with result %d",
+                    __FUNCTION__, retval);
 }
 
 /* Decide if we need to issue a control message and do so. Must be called with 
pm->lock down */
diff -Nru a/drivers/usb/input/wacom.c b/drivers/usb/input/wacom.c
--- a/drivers/usb/input/wacom.c Mon Oct 28 13:53:38 2002
+++ b/drivers/usb/input/wacom.c Mon Oct 28 13:53:38 2002
@@ -108,8 +108,22 @@
        unsigned char *data = wacom->data;
        struct input_dev *dev = &wacom->dev;
        int prox, pressure;
+       int retval;
 
-       if (urb->status) return;
+       switch (urb->status) {
+       case 0:
+               /* success */
+               break;
+       case -ECONNRESET:
+       case -ENOENT:
+       case -ESHUTDOWN:
+               /* this urb is terminated, clean up */
+               dbg("%s - urb shutting down with status: %d", __FUNCTION__, 
+urb->status);
+               return;
+       default:
+               dbg("%s - nonzero urb status received: %d", __FUNCTION__, urb->status);
+               goto exit;
+       }
 
        if (data[0] != 2)
                dbg("received unknown report #%d", data[0]);
@@ -135,6 +149,12 @@
        }
        
        input_sync(dev);
+
+exit:
+       retval = usb_submit_urb (urb, GFP_ATOMIC);
+       if (retval)
+               err ("%s - usb_submit_urb failed with result %d",
+                    __FUNCTION__, retval);
 }
 
 static void wacom_penpartner_irq(struct urb *urb)
@@ -142,8 +162,22 @@
        struct wacom *wacom = urb->context;
        unsigned char *data = wacom->data;
        struct input_dev *dev = &wacom->dev;
+       int retval;
 
-       if (urb->status) return;
+       switch (urb->status) {
+       case 0:
+               /* success */
+               break;
+       case -ECONNRESET:
+       case -ENOENT:
+       case -ESHUTDOWN:
+               /* this urb is terminated, clean up */
+               dbg("%s - urb shutting down with status: %d", __FUNCTION__, 
+urb->status);
+               return;
+       default:
+               dbg("%s - nonzero urb status received: %d", __FUNCTION__, urb->status);
+               goto exit;
+       }
 
        input_report_key(dev, BTN_TOOL_PEN, 1);
        input_report_abs(dev, ABS_X, data[2] << 8 | data[1]);
@@ -152,6 +186,12 @@
        input_report_key(dev, BTN_TOUCH, ((signed char)data[6] > -80) && !(data[5] & 
0x20));
        input_report_key(dev, BTN_STYLUS, (data[5] & 0x40));
        input_sync(dev);
+
+exit:
+       retval = usb_submit_urb (urb, GFP_ATOMIC);
+       if (retval)
+               err ("%s - usb_submit_urb failed with result %d",
+                    __FUNCTION__, retval);
 }
 
 static void wacom_graphire_irq(struct urb *urb)
@@ -160,8 +200,22 @@
        unsigned char *data = wacom->data;
        struct input_dev *dev = &wacom->dev;
        int x, y;
+       int retval;
 
-       if (urb->status) return;
+       switch (urb->status) {
+       case 0:
+               /* success */
+               break;
+       case -ECONNRESET:
+       case -ENOENT:
+       case -ESHUTDOWN:
+               /* this urb is terminated, clean up */
+               dbg("%s - urb shutting down with status: %d", __FUNCTION__, 
+urb->status);
+               return;
+       default:
+               dbg("%s - nonzero urb status received: %d", __FUNCTION__, urb->status);
+               goto exit;
+       }
 
        if (data[0] != 2)
                dbg("received unknown report #%d", data[0]);
@@ -191,7 +245,7 @@
                        input_report_abs(dev, ABS_Y, y);
 
                        input_sync(dev);
-                       return;
+                       goto exit;
        }
 
        if (data[1] & 0x80) {
@@ -205,6 +259,12 @@
        input_report_key(dev, BTN_STYLUS2, data[1] & 0x04);
 
        input_sync(dev);
+
+exit:
+       retval = usb_submit_urb (urb, GFP_ATOMIC);
+       if (retval)
+               err ("%s - usb_submit_urb failed with result %d",
+                    __FUNCTION__, retval);
 }
 
 static void wacom_intuos_irq(struct urb *urb)
@@ -214,8 +274,22 @@
        struct input_dev *dev = &wacom->dev;
        unsigned int t;
        int idx;
+       int retval;
 
-       if (urb->status) return;
+       switch (urb->status) {
+       case 0:
+               /* success */
+               break;
+       case -ECONNRESET:
+       case -ENOENT:
+       case -ESHUTDOWN:
+               /* this urb is terminated, clean up */
+               dbg("%s - urb shutting down with status: %d", __FUNCTION__, 
+urb->status);
+               return;
+       default:
+               dbg("%s - nonzero urb status received: %d", __FUNCTION__, urb->status);
+               goto exit;
+       }
 
        if (data[0] != 2)
                dbg("received unknown report #%d", data[0]);
@@ -253,13 +327,13 @@
                input_report_key(dev, wacom->tool[idx], 1);
                input_event(dev, EV_MSC, MSC_SERIAL, wacom->serial[idx]);
                input_sync(dev);
-               return;
+               goto exit;
        }
 
        if ((data[1] & 0xfe) == 0x80) {                                         /* 
Exit report */
                input_report_key(dev, wacom->tool[idx], 0);
                input_sync(dev);
-               return;
+               goto exit;
        }
 
        input_report_abs(dev, ABS_X, ((__u32)data[2] << 8) | data[3]);
@@ -323,6 +397,12 @@
        }
        
        input_sync(dev);
+
+exit:
+       retval = usb_submit_urb (urb, GFP_ATOMIC);
+       if (retval)
+               err ("%s - usb_submit_urb failed with result %d",
+                    __FUNCTION__, retval);
 }
 
 struct wacom_features wacom_features[] = {
diff -Nru a/drivers/usb/input/xpad.c b/drivers/usb/input/xpad.c
--- a/drivers/usb/input/xpad.c  Mon Oct 28 13:53:38 2002
+++ b/drivers/usb/input/xpad.c  Mon Oct 28 13:53:38 2002
@@ -166,11 +166,30 @@
 static void xpad_irq_in(struct urb *urb)
 {
        struct usb_xpad *xpad = urb->context;
+       int retval;
        
-       if (urb->status)
+       switch (urb->status) {
+       case 0:
+               /* success */
+               break;
+       case -ECONNRESET:
+       case -ENOENT:
+       case -ESHUTDOWN:
+               /* this urb is terminated, clean up */
+               dbg("%s - urb shutting down with status: %d", __FUNCTION__, 
+urb->status);
                return;
+       default:
+               dbg("%s - nonzero urb status received: %d", __FUNCTION__, urb->status);
+               goto exit;
+       }
        
        xpad_process_packet(xpad, 0, xpad->idata);
+
+exit:
+       retval = usb_submit_urb (urb, GFP_ATOMIC);
+       if (retval)
+               err ("%s - usb_submit_urb failed with result %d",
+                    __FUNCTION__, retval);
 }
 
 static int xpad_open (struct input_dev *dev)


-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to