usb: ums: wait for usb cable connection before enter ums mode
authorPrzemyslaw Marczak <p.marczak@samsung.com>
Tue, 7 Jan 2014 14:08:37 +0000 (15:08 +0100)
committerMarek Vasut <marex@denx.de>
Mon, 13 Jan 2014 11:29:12 +0000 (12:29 +0100)
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>
common/cmd_usb_mass_storage.c
include/usb_mass_storage.h

index 99487f4d0f686a6db2bc4c87caf0282941fd1a00..5f557d5f857df2916cc5f818abbd8ac1b5e08b1c 100644 (file)
@@ -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();
 
index 9df3adcf2a8e042bcc3b953c0f357a9c5945d9d5..058dcf11740423569c13a4cd8e5957aa09afb0fd 100644 (file)
@@ -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);