usb: core: need to call usb_phy_notify_connect after device setup
Since we notify disconnecting based on the usb device is existed (port_dev->child, the child device at roothub is not NULL), we need to notify connect after device has been registered. This fixes a bug that do fast plug in/out test, and the notify_disconnect is not called due to roothub child is NULL and the enumeration has failed. Cc: v3.17+ <stable@vger.kernel.org> Signed-off-by: Tony Zheng <Tony.Zheng@freescale.com> Signed-off-by: Peter Chen <peter.chen@freescale.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
d1d9548256
commit
01ed67dc70
|
@ -4468,9 +4468,6 @@ hub_port_init (struct usb_hub *hub, struct usb_device *udev, int port1,
|
|||
if (retval)
|
||||
goto fail;
|
||||
|
||||
if (hcd->usb_phy && !hdev->parent)
|
||||
usb_phy_notify_connect(hcd->usb_phy, udev->speed);
|
||||
|
||||
/*
|
||||
* Some superspeed devices have finished the link training process
|
||||
* and attached to a superspeed hub port, but the device descriptor
|
||||
|
@ -4783,6 +4780,10 @@ static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus,
|
|||
port_dev->child = NULL;
|
||||
spin_unlock_irq(&device_state_lock);
|
||||
mutex_unlock(&usb_port_peer_mutex);
|
||||
} else {
|
||||
if (hcd->usb_phy && !hdev->parent)
|
||||
usb_phy_notify_connect(hcd->usb_phy,
|
||||
udev->speed);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue