/* Again, we pass off most of the work to the bus-level call.  */
void driver_unregister(struct device_driver *drv)
/* Again, we pass off most of the work to the bus-level call.  */
void driver_unregister(struct device_driver *drv)
{
	if (!drv || !drv->p) {
		WARN(1, "Unexpected driver unregister!\n");
		return;
	}
	driver_remove_groups(drv, drv->groups);
	bus_remove_driver(drv);
}