USB: Ignore xHCI Reset Device status.

When the USB core finishes reseting a USB device, the xHCI driver
sends
a Reset Device command to the host.  The xHC then updates its
internal
representation of the USB device to the 'Default' device state.
If the
device was already in the Default state, the xHC will complete
the
command with an error status.

If a device needs to be reset several
times during enumeration, the
second reset will always fail because of
the xHCI Reset Device command.
This can cause issues during
enumeration.

For example, usb_reset_and_verify_device calls into
hub_port_init in a
loop.  Say that on the first call into hub_port_init,
the device is
successfully reset, but doesn't respond to several set
address control
transfers.  Then the port will be disabled, but the udev
will remain in
tact.  usb_reset_and_verify_device will call into
hub_port_init again.

On the second call into hub_port_init, the device
will be reset, and the
xHCI driver will issue a Reset Device command.
This command will fail
(because the device is already in the Default
state), and
usb_reset_and_verify_device will fail.  The port will be
disabled, and
the device won't be able to enumerate.

Fix this by
ignoring the return value of the HCD reset_device callback.

This commit
should be backported to kernels as old as 3.2, that contain
the commit
75d7cf7 "usbcore: refine
warm reset logic".

Signed-off-by: Sarah Sharp
<sarah.a.sharp@linux.intel.com>
Acked-by: Alan Stern
<stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman
<gregkh@linuxfoundation.org>

idea is taken here -
https://github.com/varunchitre15/thunderzap_xl/commit/77eaf8cef260d5f800aafc0917f145acac0d2470