Hi Simon,
On Tue, 11 Nov 2014 10:46:18 -0700 Simon Glass <s...@chromium.org> wrote: > diff --git a/drivers/core/device.c b/drivers/core/device.c > index 49faa29..0d84776 100644 > --- a/drivers/core/device.c > +++ b/drivers/core/device.c > @@ -548,3 +548,8 @@ int device_find_next_child(struct udevice **devp) > > return 0; > } > + > +ulong dev_get_of_data(struct udevice *dev) > +{ > + return dev->of_id->data; > +} Since this function is short enough, perhaps you might want to define it as "static inline" in the header file include/dm/device.h > diff --git a/drivers/core/lists.c b/drivers/core/lists.c > index 3a1ea85..9f33dde 100644 > --- a/drivers/core/lists.c > +++ b/drivers/core/lists.c > @@ -89,22 +89,26 @@ int lists_bind_drivers(struct udevice *parent, bool > pre_reloc_only) > * tree error > */ > static int driver_check_compatible(const void *blob, int offset, > - const struct udevice_id *of_match) > + const struct udevice_id *of_match, > + const struct udevice_id **of_idp) > { > int ret; > > + *of_idp = NULL; > if (!of_match) > return -ENOENT; > > while (of_match->compatible) { > ret = fdt_node_check_compatible(blob, offset, > of_match->compatible); > - if (!ret) > + if (!ret) { > + *of_idp = of_match; > return 0; > - else if (ret == -FDT_ERR_NOTFOUND) > + } else if (ret == -FDT_ERR_NOTFOUND) { > return -ENODEV; > - else if (ret < 0) > + } else if (ret < 0) { > return -EINVAL; > + } > of_match++; > } I think you are making things more complicated than is needed. I guess what you want to do in this patch is just to set "dev->of_id". Why do you need to touch this function? (Please see below) > @@ -116,6 +120,7 @@ int lists_bind_fdt(struct udevice *parent, const void > *blob, int offset, > { > struct driver *driver = ll_entry_start(struct driver, driver); > const int n_ents = ll_entry_count(struct driver, driver); > + const struct udevice_id *id; > struct driver *entry; > struct udevice *dev; > bool found = false; > @@ -127,7 +132,8 @@ int lists_bind_fdt(struct udevice *parent, const void > *blob, int offset, > if (devp) > *devp = NULL; > for (entry = driver; entry != driver + n_ents; entry++) { > - ret = driver_check_compatible(blob, offset, entry->of_match); > + ret = driver_check_compatible(blob, offset, entry->of_match, > + &id); > name = fdt_get_name(blob, offset, NULL); > if (ret == -ENOENT) { > continue; > @@ -147,6 +153,7 @@ int lists_bind_fdt(struct udevice *parent, const void > *blob, int offset, > dm_warn("Error binding driver '%s'\n", entry->name); > return ret; > } else { > + dev->of_id = id; Instead of all the chages above, only one line change, dev->of_id = entry->of_match Does this work for you? Best Regards Masahiro Yamada _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot