diff options
author | Przemyslaw Marczak <p.marczak@samsung.com> | 2014-01-07 15:08:37 +0100 |
---|---|---|
committer | Marek Vasut <marex@denx.de> | 2014-01-13 12:29:12 +0100 |
commit | 3603e31db54ddba820b7a7b9c7659e272f8c65de (patch) | |
tree | 045cd42942de2b0e4b7ec09b5322a5ead2614c7d | |
parent | 7da765125165c172078489336117f95de2904322 (diff) |
usb: ums: wait for usb cable connection before enter ums mode
Before this change ums mode can not be entered when device
was using the same usb port for usb/uart communication.
Switching USB cable from UART to USB always causes ums exit.
Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com>
-rw-r--r-- | common/cmd_usb_mass_storage.c | 24 | ||||
-rw-r--r-- | include/usb_mass_storage.h | 3 |
2 files changed, 27 insertions, 0 deletions
diff --git a/common/cmd_usb_mass_storage.c b/common/cmd_usb_mass_storage.c index 99487f4d0f..5f557d5f85 100644 --- a/common/cmd_usb_mass_storage.c +++ b/common/cmd_usb_mass_storage.c @@ -42,6 +42,30 @@ int do_usb_mass_storage(cmd_tbl_t *cmdtp, int flag, g_dnl_register("ums"); + /* Timeout unit: seconds */ + int cable_ready_timeout = UMS_CABLE_READY_TIMEOUT; + + if (!usb_cable_connected()) { + puts("Please connect USB cable.\n"); + + while (!usb_cable_connected()) { + if (ctrlc()) { + puts("\rCTRL+C - Operation aborted.\n"); + goto exit; + } + if (!cable_ready_timeout) { + puts("\rUSB cable not detected.\n" \ + "Command exit.\n"); + goto exit; + } + + printf("\rAuto exit in: %.2d s.", cable_ready_timeout); + mdelay(1000); + cable_ready_timeout--; + } + puts("\r\n"); + } + while (1) { usb_gadget_handle_interrupts(); diff --git a/include/usb_mass_storage.h b/include/usb_mass_storage.h index 9df3adcf2a..058dcf1174 100644 --- a/include/usb_mass_storage.h +++ b/include/usb_mass_storage.h @@ -20,6 +20,9 @@ #define UMS_NUM_SECTORS 0 #endif +/* Wait at maximum 60 seconds for cable connection */ +#define UMS_CABLE_READY_TIMEOUT 60 + struct ums { int (*read_sector)(struct ums *ums_dev, ulong start, lbaint_t blkcnt, void *buf); |