--- //depot/vendor/freebsd/src/sys/dev/acpica/acpi_video.c 2005/09/11 18:40:38 +++ //depot/user/jhb/agp/dev/acpica/acpi_video.c 2005/12/15 18:47:57 @@ -70,6 +70,7 @@ /* interfaces */ static int acpi_video_modevent(struct module*, int, void *); +static void acpi_video_identify(driver_t *driver, device_t parent); static int acpi_video_probe(device_t); static int acpi_video_attach(device_t); static int acpi_video_detach(device_t); @@ -137,6 +138,7 @@ #define DSS_COMMIT (1 << 31) static device_method_t acpi_video_methods[] = { + DEVMETHOD(device_identify, acpi_video_identify), DEVMETHOD(device_probe, acpi_video_probe), DEVMETHOD(device_attach, acpi_video_attach), DEVMETHOD(device_detach, acpi_video_detach), @@ -152,7 +154,7 @@ static devclass_t acpi_video_devclass; -DRIVER_MODULE(acpi_video, pci, acpi_video_driver, acpi_video_devclass, +DRIVER_MODULE(acpi_video, vgapci, acpi_video_driver, acpi_video_devclass, acpi_video_modevent, NULL); MODULE_DEPEND(acpi_video, acpi, 1, 1, 1); @@ -189,6 +191,25 @@ return (err); } +static void +acpi_video_identify(driver_t *driver, device_t parent) +{ + devclass_t dc; + device_t *children; + int count, i; + + dc = devclass_find("acpi_video"); + if (device_get_children(parent, &children, &count) != 0) + return; + for (i = 0; i < count; i++) { + if (device_get_devclass(children[i]) == dc) + break; + } + free(children, M_TEMP); + if (i == count) + device_add_child(parent, "acpi_video", -1); +} + static int acpi_video_probe(device_t dev) {