diff options
author | Hans de Goede <hdegoede@redhat.com> | 2015-01-11 20:34:51 +0100 |
---|---|---|
committer | Marek Vasut <marex@denx.de> | 2015-01-18 12:31:36 +0100 |
commit | 90cdc1039d0bf6d85bb497dbb93d317ad234e846 (patch) | |
tree | 753472c23d0d45336216db7e9a6c06634c71f732 /common/usb.c | |
parent | e8672e3f0ec571d0ca7ccd8cbbeb113802c1d443 (diff) |
musb-new: Fix reset sequence when in host mode
This commit fixes a number of issues with the reset sequence of musb-new
in host mode:
1) Our usb device probe relies on a second device reset being done after the
first descriptors read. Factor the musb reset code into a usb_reset_root_port
function (and add this as an empty define for other controllers), and call
this when a device has no parent.
2) Just like with normal usb controllers there needs to be a delay after
reset, for normal usb controllers, this is handled in hub_port_reset, add a
delay to usb_reset_root_port.
3) Sync the musb reset sequence with the upstream kernel, clear all bits of
power except bits 4-7, and increase the time reset is asserted to 50 ms.
With these fixes an usb keyboard I have now always enumerates properly, where
as earlier it would only enumerare properly once every 5 tries.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Diffstat (limited to 'common/usb.c')
-rw-r--r-- | common/usb.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/common/usb.c b/common/usb.c index 1eda0998d2..32e15cd8dd 100644 --- a/common/usb.c +++ b/common/usb.c @@ -970,6 +970,8 @@ int usb_new_device(struct usb_device *dev) printf("\n Couldn't reset port %i\n", dev->portnr); return 1; } + } else { + usb_reset_root_port(); } #endif |