USB MSC host class driver: Don't bother retrying to initialize the FLASH if the interface is returning fatal transfer errors
This commit is contained in:
parent
40f84dfa19
commit
a992004b0e
@ -5522,4 +5522,8 @@
|
||||
(2013-9-6).
|
||||
* drivers/usbdev/usbmsc_desc.c: Fix a warning when USB MSC is
|
||||
compiled for a high-speed device (2013-9-7).
|
||||
* drivers/usbhost/usbhost_storage.c: If device is returning fatal
|
||||
transfer errors while attempt to initialize, don't bother with
|
||||
the startup retries; abort immediately so that the device will
|
||||
be reset and we can try again (2013-9-9).
|
||||
|
||||
|
@ -1304,7 +1304,7 @@ static int lpc17_ctrltd(struct lpc17_usbhost_s *priv, uint32_t dirpid,
|
||||
else
|
||||
{
|
||||
uvdbg("Bad TD completion status: %d\n", EDCTRL->tdstatus);
|
||||
ret = -EIO;
|
||||
ret = ed->tdstatus == TD_CC_STALL ? -EPERM : -EIO;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2991,7 +2991,7 @@ static int sam_transfer(FAR struct usbhost_driver_s *drvr, usbhost_ep_t ep,
|
||||
else
|
||||
{
|
||||
udbg("ERROR: Bad TD completion status: %d\n", ed->tdstatus);
|
||||
ret = -EIO;
|
||||
ret = ed->tdstatus == TD_CC_STALL ? -EPERM : -EIO;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1248,6 +1248,19 @@ static inline int usbhost_initvolume(FAR struct usbhost_state_s *priv)
|
||||
uvdbg("Request sense\n");
|
||||
ret = usbhost_requestsense(priv);
|
||||
}
|
||||
|
||||
/* It is acceptable for a mass storage device to respond to the
|
||||
* Test Unit Ready and Request Sense commands with a stall if it is
|
||||
* unable to respond. But other failures mean that something is
|
||||
* wrong and a device reset is in order. The transfer functions will
|
||||
* return -EPERM if the transfer failed due to a stall.
|
||||
*/
|
||||
|
||||
if (ret < 0 && ret != -EPERM)
|
||||
{
|
||||
udbg("ERROR: DRVR_TRANSFER returned: %d\n", ret);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Did the unit become ready? Did an error occur? Or did we time out? */
|
||||
@ -1569,6 +1582,7 @@ static inline int usbhost_tfree(FAR struct usbhost_state_s *priv)
|
||||
priv->tbuffer = NULL;
|
||||
priv->tbuflen = 0;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user