From mboxrd@z Thu Jan 1 00:00:00 1970 From: Przemyslaw Marczak Date: Mon, 13 Jan 2014 14:31:58 +0100 Subject: [U-Boot] [PATCH] usb: ums: wait for usb cable connection before enter ums mode In-Reply-To: <201401131214.26154.marex@denx.de> References: <1389103717-4619-1-git-send-email-p.marczak@samsung.com> <52D3AF7B.6080108@samsung.com> <201401131214.26154.marex@denx.de> Message-ID: <52D3EACE.4010602@samsung.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hello, On 01/13/2014 12:14 PM, Marek Vasut wrote: > On Monday, January 13, 2014 at 10:18:51 AM, Przemyslaw Marczak wrote: >> Hello everyone, >> >> On 01/07/2014 03:08 PM, Przemyslaw Marczak wrote: >>> 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 >>> >>> --- >>> >>> common/cmd_usb_mass_storage.c | 24 ++++++++++++++++++++++++ >>> include/usb_mass_storage.h | 3 +++ >>> 2 files changed, 27 insertions(+) >>> >>> diff --git a/common/cmd_usb_mass_storage.c >>> b/common/cmd_usb_mass_storage.c index 99487f4..5f557d5 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 9df3adc..058dcf1 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); >> >> I was send some very useful fix to the ums. It is required for users who >> are using the same usb port for USB and UART purposes. Without this fix >> such users just can't use ums because it will always exit to prompt when >> user change the cable. > > Can you please share the schematic of such a cable in public? Unfortunately I am not allowed to share such information. > How does this > "sharing" of USB and UART work? I am very curious here :-) Regarding the USB sharing explanation - please refer to FSA9480 data sheet. It is available on the Internet. I can also recommend looking into newest kernel code support for Trats2 device. >> So I have few questions... >> Marek, could you review this patch? > > On it! > >> And what about the release, are you going to send pull request before >> the release? >> If not, then is it possible to apply this patch directly to >> u-boot/master by Tom Rini? > > PR will happen once I am through the load of patches in my mailbox. > Thank you for patch apply. Regards, -- Przemyslaw Marczak Samsung R&D Institute Poland Samsung Electronics p.marczak at samsung.com