diff options
author | Wolfgang Denk <wd@denx.de> | 2009-07-14 00:00:04 +0200 |
---|---|---|
committer | Wolfgang Denk <wd@denx.de> | 2009-07-14 00:00:04 +0200 |
commit | 87abce6e91b668390d07b578100d4053283a67e8 (patch) | |
tree | 230c7bad063d766fc9cbd34ab89bce338a811739 /drivers/usb/musb/musb_hcd.c | |
parent | c9969947a4687de90e2bb58e76842b491aa0e0b9 (diff) | |
parent | bb272ec8df6e35b7e19ce1237cae28798167a624 (diff) | |
download | u-boot-imx-87abce6e91b668390d07b578100d4053283a67e8.zip u-boot-imx-87abce6e91b668390d07b578100d4053283a67e8.tar.gz u-boot-imx-87abce6e91b668390d07b578100d4053283a67e8.tar.bz2 |
Merge branch 'master' of /home/wd/git/u-boot/master
Diffstat (limited to 'drivers/usb/musb/musb_hcd.c')
-rw-r--r-- | drivers/usb/musb/musb_hcd.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/drivers/usb/musb/musb_hcd.c b/drivers/usb/musb/musb_hcd.c index 352a0d4..19d978b 100644 --- a/drivers/usb/musb/musb_hcd.c +++ b/drivers/usb/musb/musb_hcd.c @@ -111,6 +111,7 @@ static int wait_until_ep0_ready(struct usb_device *dev, u32 bit_mask) { u16 csr; int result = 1; + int timeout = CONFIG_MUSB_TIMEOUT; while (result > 0) { csr = readw(&musbr->txcsr); @@ -152,7 +153,17 @@ static int wait_until_ep0_ready(struct usb_device *dev, u32 bit_mask) } break; } + + /* Check the timeout */ + if (--timeout) + udelay(1); + else { + dev->status = USB_ST_CRC_ERR; + result = -1; + break; + } } + return result; } @@ -162,6 +173,7 @@ static int wait_until_ep0_ready(struct usb_device *dev, u32 bit_mask) static u8 wait_until_txep_ready(struct usb_device *dev, u8 ep) { u16 csr; + int timeout = CONFIG_MUSB_TIMEOUT; do { if (check_stall(ep, 1)) { @@ -174,6 +186,15 @@ static u8 wait_until_txep_ready(struct usb_device *dev, u8 ep) dev->status = USB_ST_CRC_ERR; return 0; } + + /* Check the timeout */ + if (--timeout) + udelay(1); + else { + dev->status = USB_ST_CRC_ERR; + return -1; + } + } while (csr & MUSB_TXCSR_TXPKTRDY); return 1; } @@ -184,6 +205,7 @@ static u8 wait_until_txep_ready(struct usb_device *dev, u8 ep) static u8 wait_until_rxep_ready(struct usb_device *dev, u8 ep) { u16 csr; + int timeout = CONFIG_MUSB_TIMEOUT; do { if (check_stall(ep, 0)) { @@ -196,6 +218,15 @@ static u8 wait_until_rxep_ready(struct usb_device *dev, u8 ep) dev->status = USB_ST_CRC_ERR; return 0; } + + /* Check the timeout */ + if (--timeout) + udelay(1); + else { + dev->status = USB_ST_CRC_ERR; + return -1; + } + } while (!(csr & MUSB_RXCSR_RXPKTRDY)); return 1; } |