USB: use usb_endpoint_maxp() instead of le16_to_cpu()
[pandora-kernel.git] / drivers / usb / class / cdc-wdm.c
index a97c018..1d26a71 100644 (file)
@@ -542,6 +542,8 @@ static int wdm_open(struct inode *inode, struct file *file)
 
        mutex_lock(&desc->lock);
        if (!desc->count++) {
+               desc->werr = 0;
+               desc->rerr = 0;
                rv = usb_submit_urb(desc->validity, GFP_KERNEL);
                if (rv < 0) {
                        desc->count--;
@@ -680,7 +682,7 @@ next_desc:
        if (!ep || !usb_endpoint_is_int_in(ep))
                goto err;
 
-       desc->wMaxPacketSize = le16_to_cpu(ep->wMaxPacketSize);
+       desc->wMaxPacketSize = usb_endpoint_maxp(ep);
        desc->bMaxPacketSize0 = udev->descriptor.bMaxPacketSize0;
 
        desc->orq = kmalloc(sizeof(struct usb_ctrlrequest), GFP_KERNEL);
@@ -853,6 +855,18 @@ static int wdm_pre_reset(struct usb_interface *intf)
        struct wdm_device *desc = usb_get_intfdata(intf);
 
        mutex_lock(&desc->lock);
+       kill_urbs(desc);
+
+       /*
+        * we notify everybody using poll of
+        * an exceptional situation
+        * must be done before recovery lest a spontaneous
+        * message from the device is lost
+        */
+       spin_lock_irq(&desc->iuspin);
+       desc->rerr = -EINTR;
+       spin_unlock_irq(&desc->iuspin);
+       wake_up_all(&desc->wait);
        return 0;
 }