Hi Przemyslaw, On 3 March 2015 at 09:24, Przemyslaw Marczak <p.marc...@samsung.com> wrote: > > To implement functionality for devices connected by some external > interface, sometimes there is need to implement more then one, > and different uclass type drivers. > > But only one i2c/spi dm chip can exists, per each bus i2c address > or spi select. Then, it seems to be useful, to get the child device > by uclass type, for the parent with known chip address. > > So, this change will be useful for the pmic case: > |- i2c bus > '- pmic i2c chip (parent) > '- uclass regulator (child 1) > '- uclass charger (child 2) > > This will allow to get the regulator or charger device if knows only parent > i2c/spi address. > > Signed-off-by: Przemyslaw Marczak <p.marc...@samsung.com> > --- > Changes V2: > - new commit > --- > drivers/core/device.c | 15 +++++++++++++++ > include/dm/device.h | 16 ++++++++++++++++ > 2 files changed, 31 insertions(+) > > diff --git a/drivers/core/device.c b/drivers/core/device.c > index 73c3e07..76b22cf 100644 > --- a/drivers/core/device.c > +++ b/drivers/core/device.c > @@ -397,6 +397,21 @@ int device_find_child_by_of_offset(struct udevice > *parent, int of_offset, > return -ENODEV; > } > > +int device_get_first_child_by_uclass_id(struct udevice *parent, int > uclass_id,
Can you please use the enum here instead of int? > > + struct udevice **devp) > +{ > + struct udevice *dev; > + > + *devp = NULL; > + > + list_for_each_entry(dev, &parent->child_head, sibling_node) { > + if (dev->driver->id == uclass_id) > + return device_get_device_tail(dev, 0, devp); > + } > + > + return -ENODEV; > +} > + > int device_get_child_by_of_offset(struct udevice *parent, int seq, > struct udevice **devp) > { > diff --git a/include/dm/device.h b/include/dm/device.h > index 7a48eb8..9f0d6ce 100644 > --- a/include/dm/device.h > +++ b/include/dm/device.h > @@ -335,6 +335,22 @@ int device_get_child_by_of_offset(struct udevice > *parent, int seq, > struct udevice **devp); > > /** > + * device_get_first_child_by_uclass_id() - Get the first child device based > + * on UCLASS_ID > + * > + * Locates a child device by its uclass id. > + * > + * The device is probed to activate it ready for use. > + * > + * @parent: Parent device > + * @uclass_id: child uclass id > + * @devp: Returns pointer to device if found, otherwise this is set to NULL > + * @return 0 if OK, -ve on error > + */ > +int device_get_first_child_by_uclass_id(struct udevice *parent, int > uclass_id, > + struct udevice **devp); > + > +/** > * device_find_first_child() - Find the first child of a device > * > * @parent: Parent device to search > -- > 1.9.1 > Regards, Simon _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot