X-Git-Url: https://git.openpandora.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=drivers%2Fusb%2Fcore%2Fmessage.c;h=2aa2a58ad13e9431abedbe83ee1cc535270c9109;hb=030b079bbda2a3b1c37198b62bd955f2da0b9172;hp=586d6f1376cf7700a677825b41523dc056b8c900;hpb=273b2578392bbf6e5c47a8a3d1ee461ce6fc7182;p=pandora-kernel.git diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c index 586d6f1376cf..2aa2a58ad13e 100644 --- a/drivers/usb/core/message.c +++ b/drivers/usb/core/message.c @@ -651,7 +651,7 @@ int usb_get_descriptor(struct usb_device *dev, unsigned char type, if (result <= 0 && result != -ETIMEDOUT) continue; if (result > 1 && ((u8 *)buf)[1] != type) { - result = -EPROTO; + result = -ENODATA; continue; } break; @@ -694,8 +694,13 @@ static int usb_get_string(struct usb_device *dev, unsigned short langid, USB_REQ_GET_DESCRIPTOR, USB_DIR_IN, (USB_DT_STRING << 8) + index, langid, buf, size, USB_CTRL_GET_TIMEOUT); - if (!(result == 0 || result == -EPIPE)) - break; + if (result == 0 || result == -EPIPE) + continue; + if (result > 1 && ((u8 *) buf)[1] != USB_DT_STRING) { + result = -ENODATA; + continue; + } + break; } return result; } @@ -1091,8 +1096,9 @@ void usb_disable_device(struct usb_device *dev, int skip_ep0) continue; dev_dbg(&dev->dev, "unregistering interface %s\n", dev_name(&interface->dev)); - device_del(&interface->dev); + interface->unregistering = 1; usb_remove_sysfs_intf_files(interface); + device_del(&interface->dev); } /* Now that the interfaces are unbound, nobody should