9
0
Fork 0

driver: introduce device_probe to manully probe a device

This will expect a driver to be specified
This is needed by the phylib the probe the generic phy if not driver found

Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
Jean-Christophe PLAGNIOL-VILLARD 2012-11-18 13:49:39 +01:00 committed by Sascha Hauer
parent c811546712
commit f777b3b13f
2 changed files with 22 additions and 6 deletions

View File

@ -75,6 +75,21 @@ int get_free_deviceid(const char *name_template)
};
}
int device_probe(struct device_d *dev)
{
int ret;
ret = dev->bus->probe(dev);
if (ret) {
dev_err(dev, "probe failed: %s\n", strerror(-ret));
return ret;
}
list_add(&dev->active, &active);
return 0;
}
static int match(struct driver_d *drv, struct device_d *dev)
{
int ret;
@ -86,13 +101,9 @@ static int match(struct driver_d *drv, struct device_d *dev)
if (dev->bus->match(dev, drv))
goto err_out;
ret = dev->bus->probe(dev);
if (ret) {
dev_err(dev, "probe failed: %s\n", strerror(-ret));
ret = device_probe(dev);
if (ret)
goto err_out;
}
list_add(&dev->active, &active);
return 0;
err_out:

View File

@ -148,6 +148,11 @@ struct driver_d {
int register_driver(struct driver_d *);
int register_device(struct device_d *);
/* manualy probe a device
* the driver need to be specified
*/
int device_probe(struct device_d *dev);
/* Unregister a device. This function can fail, e.g. when the device
* has children.
*/