* Set the devclass of a device before calling the probe method. This allows
device_printf() etc. to print something intelligible. * Allow device_set_devclass(dev, 0) for clearing the devclass.
This commit is contained in:
parent
586453fee2
commit
54ac5b9b76
@ -756,9 +756,10 @@ device_probe_child(device_t dev, device_t child)
|
||||
driverlink_t best = 0;
|
||||
driverlink_t dl;
|
||||
int result, pri = 0;
|
||||
int hasclass = (child->devclass != 0);
|
||||
|
||||
dc = dev->devclass;
|
||||
if (dc == NULL)
|
||||
if (!dc)
|
||||
panic("device_probe_child: parent device has no devclass");
|
||||
|
||||
if (child->state == DS_ALIVE)
|
||||
@ -769,7 +770,11 @@ device_probe_child(device_t dev, device_t child)
|
||||
dl = next_matching_driver(dc, child, dl)) {
|
||||
PDEBUG(("Trying %s", DRIVERNAME(dl->driver)));
|
||||
device_set_driver(child, dl->driver);
|
||||
if (!hasclass)
|
||||
device_set_devclass(child, dl->driver->name);
|
||||
result = DEVICE_PROBE(child);
|
||||
if (!hasclass)
|
||||
device_set_devclass(child, 0);
|
||||
|
||||
/*
|
||||
* If the driver returns SUCCESS, there can be no higher match
|
||||
@ -1069,6 +1074,12 @@ device_set_devclass(device_t dev, const char *classname)
|
||||
{
|
||||
devclass_t dc;
|
||||
|
||||
if (!classname) {
|
||||
if (dev->devclass)
|
||||
devclass_delete_device(dev->devclass, dev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (dev->devclass) {
|
||||
printf("device_set_devclass: device class already set\n");
|
||||
return EINVAL;
|
||||
|
Loading…
Reference in New Issue
Block a user