Hi Mugunthan, On 7 April 2016 at 09:17, Mugunthan V N <mugunthan...@ti.com> wrote: > Provide an api to check whether the given device or machine is > compatible with the given compat string which helps in making > decisions in drivers based on device or machine compatible. > > Idea taken from Linux. > > Signed-off-by: Mugunthan V N <mugunthan...@ti.com> > --- > drivers/core/device.c | 27 +++++++++++++++++++++++++++ > include/dm/device.h | 23 +++++++++++++++++++++++ > 2 files changed, 50 insertions(+) > > diff --git a/drivers/core/device.c b/drivers/core/device.c > index cb24a61..445b22e 100644 > --- a/drivers/core/device.c > +++ b/drivers/core/device.c > @@ -691,3 +691,30 @@ int device_set_name(struct udevice *dev, const char > *name) > > return 0; > } > + > +bool of_device_is_compatible(int offset, const char *compat)
struct udevice *dev should be the first parameter. We may one day stop using offsets and use a pointer, so the less we have to change the better. > +{ > + const void *fdt = gd->fdt_blob; > + const char *str; > + int str_len; > + int len = 0; > + > + str = fdt_getprop(fdt, 0, "compatible", &str_len); > + if(!str) { > + debug("compatible field not found in node(%d)\n", offset); > + return false; > + } > + > + while (len < str_len) { Can you use fdt_node_check_compatible() here? > + if (!strcmp(compat, &str[len])) > + return true; > + len += strlen(&str[len]) + 1; > + } > + > + return false; > +} > + > +bool of_machine_is_compatible(const char *compat) > +{ > + return of_device_is_compatible(0, compat); > +} > diff --git a/include/dm/device.h b/include/dm/device.h > index 1cf8150..9a1b3d0 100644 > --- a/include/dm/device.h > +++ b/include/dm/device.h > @@ -510,6 +510,29 @@ bool device_is_last_sibling(struct udevice *dev); > int device_set_name(struct udevice *dev, const char *name); > > /** > + * of_device_is_compatible() - check if the device is compatible with the > compat > + * > + * This allows to check whether the device is comaptible with the compat. > + * > + * @offset: Offset to the device > + * @compat: Compatible string which needs to verified in the given > + * device offset > + * @return true if OK, false if the compatible is not found > + */ > +bool of_device_is_compatible(int offset, const char *compat); > + > +/** > + * of_machine_is_compatible() - check if the machine is compatible with > + * the compat > + * > + * This allows to check whether the machine is comaptible with the compat. > + * > + * @compat: Compatible string which needs to verified > + * @return true if OK, false if the compatible is not found > + */ > +bool of_machine_is_compatible(const char *compat); > + > +/** > * device_is_on_pci_bus - Test if a device is on a PCI bus > * > * @dev: device to test > -- > 2.8.1.101.g72d917a > Regards, Simon _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot