Hi Paul, On 27 July 2016 at 08:26, Paul Burton <paul.bur...@imgtec.com> wrote: > Provide a trivial syscon driver matching the generic "syscon" compatible > string, allowing for simple system controllers to be used without a > custom driver just as in Linux. > > Signed-off-by: Paul Burton <paul.bur...@imgtec.com> > > --- > > Changes in v2: > - New patch > > drivers/core/syscon-uclass.c | 11 +++++++++++ > 1 file changed, 11 insertions(+) > > diff --git a/drivers/core/syscon-uclass.c b/drivers/core/syscon-uclass.c > index 01bd968..2148469 100644 > --- a/drivers/core/syscon-uclass.c > +++ b/drivers/core/syscon-uclass.c > @@ -95,3 +95,14 @@ UCLASS_DRIVER(syscon) = { > .per_device_auto_alloc_size = sizeof(struct syscon_uc_info), > .pre_probe = syscon_pre_probe, > }; > + > +static const struct udevice_id generic_syscon_ids[] = { > + { .compatible = "syscon" }, > + { } > +}; > + > +U_BOOT_DRIVER(generic_syscon) = { > + .name = "syscon", > + .id = UCLASS_SYSCON, > + .of_match = generic_syscon_ids, > +}; > -- > 2.9.0 >
This would work if driver model checked compatible strings in priority order. But it does not. lists_bind_fdt() checks every driver to see if it is compatible. So your driver may be picked in preference to a more specific one. I've been aware of this limitation but it hasn't come up until now. I suppose the solution is to flip things around so that we: 1. Pick a node 2. Look at each compatible string in turn, starting from the first (most specific) 3. Search for a driver for that string Do you want to take a look? Regards, Simon _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot