Re: HDD spins up to slow for USB and/or Mass-Storage Driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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 majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux