Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 185316
b: refs/heads/master
c: 0f3dda9
h: refs/heads/master
v: v3
  • Loading branch information
Alan Stern authored and Greg Kroah-Hartman committed Mar 2, 2010
1 parent 100dd87 commit 2e69fab
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 33 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: d837e219daf3bf0cc84fcfb9781807d9fe8d03b5
refs/heads/master: 0f3dda9f7ff2db8dbf4d6fbab4d4438251446002
63 changes: 31 additions & 32 deletions trunk/drivers/usb/core/driver.c
Original file line number Diff line number Diff line change
Expand Up @@ -274,56 +274,55 @@ static int usb_probe_interface(struct device *dev)
intf->needs_binding = 0;

if (usb_device_is_owned(udev))
return -ENODEV;
return error;

if (udev->authorized == 0) {
dev_err(&intf->dev, "Device is not authorized for usage\n");
return -ENODEV;
return error;
}

id = usb_match_id(intf, driver->id_table);
if (!id)
id = usb_match_dynamic_id(intf, driver);
if (id) {
dev_dbg(dev, "%s - got id\n", __func__);

error = usb_autoresume_device(udev);
if (error)
return error;
if (!id)
return error;

/* Interface "power state" doesn't correspond to any hardware
* state whatsoever. We use it to record when it's bound to
* a driver that may start I/0: it's not frozen/quiesced.
*/
mark_active(intf);
intf->condition = USB_INTERFACE_BINDING;
dev_dbg(dev, "%s - got id\n", __func__);

/* The interface should always appear to be in use
* unless the driver suports autosuspend.
*/
atomic_set(&intf->pm_usage_cnt, !driver->supports_autosuspend);
error = usb_autoresume_device(udev);
if (error)
return error;

/* Carry out a deferred switch to altsetting 0 */
if (intf->needs_altsetting0) {
error = usb_set_interface(udev, intf->altsetting[0].
desc.bInterfaceNumber, 0);
if (error < 0)
goto err;
/* Interface "power state" doesn't correspond to any hardware
* state whatsoever. We use it to record when it's bound to
* a driver that may start I/0: it's not frozen/quiesced.
*/
mark_active(intf);
intf->condition = USB_INTERFACE_BINDING;

intf->needs_altsetting0 = 0;
}
/* The interface should always appear to be in use
* unless the driver suports autosuspend.
*/
atomic_set(&intf->pm_usage_cnt, !driver->supports_autosuspend);

error = driver->probe(intf, id);
if (error)
/* Carry out a deferred switch to altsetting 0 */
if (intf->needs_altsetting0) {
error = usb_set_interface(udev, intf->altsetting[0].
desc.bInterfaceNumber, 0);
if (error < 0)
goto err;

intf->condition = USB_INTERFACE_BOUND;
usb_autosuspend_device(udev);
intf->needs_altsetting0 = 0;
}

error = driver->probe(intf, id);
if (error)
goto err;

intf->condition = USB_INTERFACE_BOUND;
usb_autosuspend_device(udev);
return error;

err:
err:
mark_quiesced(intf);
intf->needs_remote_wakeup = 0;
intf->condition = USB_INTERFACE_UNBOUND;
Expand Down

0 comments on commit 2e69fab

Please sign in to comment.