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:
parent
c811546712
commit
f777b3b13f
|
@ -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:
|
||||
|
|
|
@ -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.
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue