On Wed, Oct 31, 2012 at 03:54:49PM -0400, Alan Stern wrote:
> + ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
> + USB_REQ_SET_CONFIGURATION, 0, configuration, 0,
> + NULL, 0, USB_CTRL_SET_TIMEOUT);
> + if (ret < 0 && cp) {
> + /*
> + * All the old state is gone, so what else can we do?
> + * The device is probably useless now anyway.
> + */
> + for (i = 0; i < nintf; ++i) {
> + usb_disable_interface(dev, cp->interface[i], true);
usb_disable_interface() will set the udev->ep_out and udev->ep_in array
entries to NULL. The bandwidth functions need those arrays to figure
out which entries to disable.
Is there a particular reason why you wanted to call
usb_disable_interface() before calling usb_hcd_alloc_bandwidth()?
And I do agree that this patch is much cleaner than my patch.
Sarah Sharp
> + put_device(&cp->interface[i]->dev);
> + cp->interface[i] = NULL;
> + }
> + cp = NULL;
> + usb_hcd_alloc_bandwidth(dev, NULL, NULL, NULL);
> + }
> +
> + dev->actconfig = cp;
> + mutex_unlock(hcd->bandwidth_mutex);
> +
> + if (!cp) {
> + usb_set_device_state(dev, USB_STATE_ADDRESS);
> +
> + /* Leave LPM disabled while the device is unconfigured. */
> + usb_autosuspend_device(dev);
> + return ret;
> + }
> + usb_set_device_state(dev, USB_STATE_CONFIGURED);
> +
> if (cp->string == NULL &&
> !(dev->quirks & USB_QUIRK_CONFIG_INTF_STRINGS))
> cp->string = usb_cache_string(dev, cp->desc.iConfiguration);
>
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html