
Hi Simon,
On Fri, Feb 12, 2016 at 4:23 AM, Simon Glass sjg@chromium.org wrote:
A common pattern is to call uclass_first_device() and then check if it actually returns a device. Add a new function which does this, returning an error if there are no devices in that uclass.
Signed-off-by: Simon Glass sjg@chromium.org
drivers/core/uclass.c | 13 +++++++++++++ include/dm/uclass.h | 15 +++++++++++++-- 2 files changed, 26 insertions(+), 2 deletions(-)
diff --git a/drivers/core/uclass.c b/drivers/core/uclass.c index 12095e7..1141ce1 100644 --- a/drivers/core/uclass.c +++ b/drivers/core/uclass.c @@ -401,6 +401,19 @@ int uclass_first_device(enum uclass_id id, struct udevice **devp) return uclass_get_device_tail(dev, ret, devp); }
+int uclass_first_device_err(enum uclass_id id, struct udevice **devp)
Or maybe another way is to change uclass_first_device() behavior to return -ENODEV if device is not found? (move the return value test logic into uclass_first_device)
+{
int ret;
ret = uclass_first_device(id, devp);
if (ret)
return ret;
else if (!*devp)
return -ENODEV;
return 0;
+}
int uclass_next_device(struct udevice **devp) { struct udevice *dev = *devp; diff --git a/include/dm/uclass.h b/include/dm/uclass.h index bfbd27a..fd368b6 100644 --- a/include/dm/uclass.h +++ b/include/dm/uclass.h @@ -200,18 +200,29 @@ int uclass_get_device_by_phandle(enum uclass_id id, struct udevice *parent,
- @id: Uclass ID to look up
- @devp: Returns pointer to the first device in that uclass, or NULL if none
- @return 0 if OK (found or not found), -1 on error
*/
- @return 0 if OK (found or not found), other -ve on error
int uclass_first_device(enum uclass_id id, struct udevice **devp);
/**
- uclass_first_device_err() - Get the first device in a uclass
- The device returned is probed if necessary, and ready for use
- @id: Uclass ID to look up
- @devp: Returns pointer to the first device in that uclass, or NULL if none
- @return 0 if found, -ENODEV if not found, other -ve on error
- */
+int uclass_first_device_err(enum uclass_id id, struct udevice **devp);
+/**
- uclass_next_device() - Get the next device in a uclass
- The device returned is probed if necessary, and ready for use
- @devp: On entry, pointer to device to lookup. On exit, returns pointer
- to the next device in the same uclass, or NULL if none
- @return 0 if OK (found or not found), -1 on error
*/
- @return 0 if OK (found or not found), other -ve on error
int uclass_next_device(struct udevice **devp);
--
Regards, Bin