drivers: bus: Match against id_table first
Matching against driver's name before looking throught its id_table can lead to a somewhat strange and unintuitive behaviour where a device whose driver's name matches one of the lines in id_table (which is not unheard of in Linux kernel) will be probed against said driver with 'id_table' field set to NULL which in turn will result in dev_get_drvdata erroring out with -ENODEV. This patch changes the behaviour such that device_match() only tries to match against driver's name only if id_table of that driver is not present. Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
parent
87dde1730d
commit
cf694d44da
|
@ -54,9 +54,6 @@ int device_match(struct device_d *dev, struct driver_d *drv)
|
|||
drv->of_compatible)
|
||||
return of_match(dev, drv);
|
||||
|
||||
if (!strcmp(dev->name, drv->name))
|
||||
return 0;
|
||||
|
||||
if (drv->id_table) {
|
||||
const struct platform_device_id *id = drv->id_table;
|
||||
|
||||
|
@ -67,6 +64,8 @@ int device_match(struct device_d *dev, struct driver_d *drv)
|
|||
}
|
||||
id++;
|
||||
}
|
||||
} else if (!strcmp(dev->name, drv->name)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return -1;
|
||||
|
|
Loading…
Reference in New Issue