From 4c6871cffaf5917165fc05d6bf77bd4cff34cfd5 Mon Sep 17 00:00:00 2001 From: Mihail Zenkov Date: Sat, 20 Feb 2016 03:02:24 +0000 Subject: usb-s3c6400x: prevent lockup if usb extracted during data sending Change-Id: I5e87a9c47defa90e15800666e8ab4608ef5de299 --- firmware/target/arm/usb-s3c6400x.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'firmware') diff --git a/firmware/target/arm/usb-s3c6400x.c b/firmware/target/arm/usb-s3c6400x.c index 27164aef69..d51a71165c 100644 --- a/firmware/target/arm/usb-s3c6400x.c +++ b/firmware/target/arm/usb-s3c6400x.c @@ -432,7 +432,7 @@ void usb_drv_exit(void) ORSTCON = 7; /* Put the PHY into reset (needed to get current down) */ udelay(10); PCGCCTL = 1; /* Shut down PHY clock */ - + #if CONFIG_CPU==S5L8701 PWRCON |= 0x4000; PWRCONEXT |= 0x800; @@ -619,7 +619,7 @@ int usb_drv_send(int ep, void *ptr, int len) struct ep_type *endpoint = &endpoints[ep][1]; endpoint->done = false; ep_transfer(ep, ptr, len, false); - while (endpoint->busy && !endpoint->done) - semaphore_wait(&endpoint->complete, TIMEOUT_BLOCK); + while (endpoint->busy && !endpoint->done && usb_detect() != USB_EXTRACTED) + semaphore_wait(&endpoint->complete, HZ); return endpoint->status; } -- cgit v1.2.3