Hi Simon, On Fri, Feb 12, 2016 at 4:23 AM, Simon Glass <s...@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 <s...@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 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot