driver core: clean up device_shutdown
device_shutdown does not need to be in a separate file. Move it into the driver core file where it belongs. This also moves us one more step closer to making devices_kset static, now only the crazy sysdevs are keeping that from happening... Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>hifive-unleashed-5.1
parent
822a89ed1e
commit
37b0c02034
|
@ -1415,5 +1415,23 @@ out:
|
||||||
put_device(dev);
|
put_device(dev);
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT_SYMBOL_GPL(device_move);
|
EXPORT_SYMBOL_GPL(device_move);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* device_shutdown - call ->shutdown() on each device to shutdown.
|
||||||
|
*/
|
||||||
|
void device_shutdown(void)
|
||||||
|
{
|
||||||
|
struct device * dev, *devn;
|
||||||
|
|
||||||
|
list_for_each_entry_safe_reverse(dev, devn, &devices_kset->list,
|
||||||
|
kobj.entry) {
|
||||||
|
if (dev->bus && dev->bus->shutdown) {
|
||||||
|
dev_dbg(dev, "shutdown\n");
|
||||||
|
dev->bus->shutdown(dev);
|
||||||
|
} else if (dev->driver && dev->driver->shutdown) {
|
||||||
|
dev_dbg(dev, "shutdown\n");
|
||||||
|
dev->driver->shutdown(dev);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
obj-y := shutdown.o
|
|
||||||
obj-$(CONFIG_PM) += sysfs.o
|
obj-$(CONFIG_PM) += sysfs.o
|
||||||
obj-$(CONFIG_PM_SLEEP) += main.o
|
obj-$(CONFIG_PM_SLEEP) += main.o
|
||||||
obj-$(CONFIG_PM_TRACE) += trace.o
|
obj-$(CONFIG_PM_TRACE) += trace.o
|
||||||
|
|
|
@ -1,43 +0,0 @@
|
||||||
/*
|
|
||||||
* shutdown.c - power management functions for the device tree.
|
|
||||||
*
|
|
||||||
* Copyright (c) 2002-3 Patrick Mochel
|
|
||||||
* 2002-3 Open Source Development Lab
|
|
||||||
*
|
|
||||||
* This file is released under the GPLv2
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <linux/device.h>
|
|
||||||
#include <asm/semaphore.h>
|
|
||||||
|
|
||||||
#include "../base.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* We handle system devices differently - we suspend and shut them
|
|
||||||
* down last and resume them first. That way, we don't do anything stupid like
|
|
||||||
* shutting down the interrupt controller before any devices..
|
|
||||||
*
|
|
||||||
* Note that there are not different stages for power management calls -
|
|
||||||
* they only get one called once when interrupts are disabled.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* device_shutdown - call ->shutdown() on each device to shutdown.
|
|
||||||
*/
|
|
||||||
void device_shutdown(void)
|
|
||||||
{
|
|
||||||
struct device * dev, *devn;
|
|
||||||
|
|
||||||
list_for_each_entry_safe_reverse(dev, devn, &devices_kset->list,
|
|
||||||
kobj.entry) {
|
|
||||||
if (dev->bus && dev->bus->shutdown) {
|
|
||||||
dev_dbg(dev, "shutdown\n");
|
|
||||||
dev->bus->shutdown(dev);
|
|
||||||
} else if (dev->driver && dev->driver->shutdown) {
|
|
||||||
dev_dbg(dev, "shutdown\n");
|
|
||||||
dev->driver->shutdown(dev);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue