mirror of
https://github.com/apache/nuttx.git
synced 2026-05-28 03:45:50 +08:00
Fix USB host error handling logic
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@3593 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
@@ -249,6 +249,10 @@ static inline int usbhost_classbind(FAR struct usbhost_driver_s *drvr,
|
|||||||
ret = CLASS_CONNECT(devclass, configdesc, desclen, funcaddr);
|
ret = CLASS_CONNECT(devclass, configdesc, desclen, funcaddr);
|
||||||
if (ret != OK)
|
if (ret != OK)
|
||||||
{
|
{
|
||||||
|
/* On failures, call the class disconnect method which
|
||||||
|
* should then free the allocated devclass instance.
|
||||||
|
*/
|
||||||
|
|
||||||
udbg("CLASS_CONNECT failed: %d\n", ret);
|
udbg("CLASS_CONNECT failed: %d\n", ret);
|
||||||
CLASS_DISCONNECTED(devclass);
|
CLASS_DISCONNECTED(devclass);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1545,6 +1545,10 @@ static FAR struct usbhost_class_s *usbhost_create(FAR struct usbhost_driver_s *d
|
|||||||
* On success, zero (OK) is returned. On a failure, a negated errno value is
|
* On success, zero (OK) is returned. On a failure, a negated errno value is
|
||||||
* returned indicating the nature of the failure
|
* returned indicating the nature of the failure
|
||||||
*
|
*
|
||||||
|
* NOTE that the class instance remains valid upon return with a failure. It is
|
||||||
|
* the responsibility of the higher level enumeration logic to call
|
||||||
|
* CLASS_DISCONNECTED to free up the class driver resources.
|
||||||
|
*
|
||||||
* Assumptions:
|
* Assumptions:
|
||||||
* - This function will *not* be called from an interrupt handler.
|
* - This function will *not* be called from an interrupt handler.
|
||||||
* - If this function returns an error, the USB host controller driver
|
* - If this function returns an error, the USB host controller driver
|
||||||
|
|||||||
@@ -673,14 +673,6 @@ static inline int usbhost_devinit(FAR struct usbhost_state_s *priv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Disconnect on any errors detected during volume initialization */
|
|
||||||
|
|
||||||
if (ret != OK)
|
|
||||||
{
|
|
||||||
udbg("ERROR! Aborting: %d\n", ret);
|
|
||||||
usbhost_destroy(priv);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -924,6 +916,10 @@ static FAR struct usbhost_class_s *usbhost_create(FAR struct usbhost_driver_s *d
|
|||||||
* On success, zero (OK) is returned. On a failure, a negated errno value is
|
* On success, zero (OK) is returned. On a failure, a negated errno value is
|
||||||
* returned indicating the nature of the failure
|
* returned indicating the nature of the failure
|
||||||
*
|
*
|
||||||
|
* NOTE that the class instance remains valid upon return with a failure. It is
|
||||||
|
* the responsibility of the higher level enumeration logic to call
|
||||||
|
* CLASS_DISCONNECTED to free up the class driver resources.
|
||||||
|
*
|
||||||
* Assumptions:
|
* Assumptions:
|
||||||
* - This function will *not* be called from an interrupt handler.
|
* - This function will *not* be called from an interrupt handler.
|
||||||
* - If this function returns an error, the USB host controller driver
|
* - If this function returns an error, the USB host controller driver
|
||||||
|
|||||||
@@ -937,6 +937,10 @@ static void usbhost_destroy(FAR void *arg)
|
|||||||
* On success, zero (OK) is returned. On a failure, a negated errno value is
|
* On success, zero (OK) is returned. On a failure, a negated errno value is
|
||||||
* returned indicating the nature of the failure
|
* returned indicating the nature of the failure
|
||||||
*
|
*
|
||||||
|
* NOTE that the class instance remains valid upon return with a failure. It is
|
||||||
|
* the responsibility of the higher level enumeration logic to call
|
||||||
|
* CLASS_DISCONNECTED to free up the class driver resources.
|
||||||
|
*
|
||||||
* Assumptions:
|
* Assumptions:
|
||||||
* This function will *not* be called from an interrupt handler.
|
* This function will *not* be called from an interrupt handler.
|
||||||
*
|
*
|
||||||
@@ -1308,14 +1312,6 @@ static inline int usbhost_initvolume(FAR struct usbhost_state_s *priv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Disconnect on any errors detected during volume initialization */
|
|
||||||
|
|
||||||
if (ret != OK)
|
|
||||||
{
|
|
||||||
udbg("ERROR! Aborting: %d\n", ret);
|
|
||||||
usbhost_destroy(priv);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -113,6 +113,10 @@
|
|||||||
* On success, zero (OK) is returned. On a failure, a negated errno value is
|
* On success, zero (OK) is returned. On a failure, a negated errno value is
|
||||||
* returned indicating the nature of the failure
|
* returned indicating the nature of the failure
|
||||||
*
|
*
|
||||||
|
* NOTE that the class instance remains valid upon return with a failure. It is
|
||||||
|
* the responsibility of the higher level enumeration logic to call
|
||||||
|
* CLASS_DISCONNECTED to free up the class driver resources.
|
||||||
|
*
|
||||||
* Assumptions:
|
* Assumptions:
|
||||||
* - This function is probably called on the same thread that called the driver
|
* - This function is probably called on the same thread that called the driver
|
||||||
* enumerate() method. This function will *not* be called from an interrupt
|
* enumerate() method. This function will *not* be called from an interrupt
|
||||||
|
|||||||
Reference in New Issue
Block a user