Re: device attached to USB 3.0 hub port doesn't respond address device command after resume

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

 



On Thu, Feb 16, 2012 at 09:10:18PM +0800, Elric Fu wrote:
> I tried 3.3.0-rc3 and the issue occurred too. I modified the patch for merging
> initialization and reset paths according to what Alan said. It can fix
> the issue.

Thanks Elric!  Can you elaborate on this patch description a bit, and
describe the problem, which device it occurred with, and our analysis of
what we should have done (i.e. set the hub depth after a reset).  Then
I'll queue the result for stable.

Sarah Sharp

> Signed-off-by: Elric Fu <elricfu1@xxxxxxxxx>
> ---
>  drivers/usb/core/hub.c |   22 ++++++++++------------
>  1 files changed, 10 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
> index a0613d8..7654ffb 100644
> --- a/drivers/usb/core/hub.c
> +++ b/drivers/usb/core/hub.c
> @@ -709,6 +709,16 @@ static void hub_activate(struct usb_hub *hub,
> enum hub_activation_type type)
>  	 * For any other type of activation, turn it on.
>  	 */
>  	if (type != HUB_RESUME) {
> +                if (hdev->parent && hub_is_superspeed(hdev) &&
> +                                hdev->state == USB_STATE_CONFIGURED) {
> +                        ret = usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0),
> +                                        HUB_SET_DEPTH, USB_RT_HUB,
> +                                        hdev->level - 1, 0, NULL, 0,
> +                                        USB_CTRL_SET_TIMEOUT);
> +                        if (ret < 0)
> +                                dev_err(hub->intfdev,
> +                                        "set hub depth failed\n");
> +                }
> 
>  		/* Speed up system boot by using a delayed_work for the
>  		 * hub's initial power-up delays.  This is pretty awkward
> @@ -987,18 +997,6 @@ static int hub_configure(struct usb_hub *hub,
>  		goto fail;
>  	}
> 
> -	if (hub_is_superspeed(hdev) && (hdev->parent != NULL)) {
> -		ret = usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0),
> -				HUB_SET_DEPTH, USB_RT_HUB,
> -				hdev->level - 1, 0, NULL, 0,
> -				USB_CTRL_SET_TIMEOUT);
> -
> -		if (ret < 0) {
> -			message = "can't set hub depth";
> -			goto fail;
> -		}
> -	}
> -
>  	/* Request the entire hub descriptor.
>  	 * hub->descriptor can handle USB_MAXCHILDREN ports,
>  	 * but the hub can/will return fewer bytes here.
--
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