int resume_device(struct device * dev)
{
- struct device_driver * drv = dev->driver;
-
- if (drv && drv->resume)
- return drv->resume(dev,RESUME_RESTORE_STATE);
+ if (dev->bus && dev->bus->resume)
+ return dev->bus->resume(dev);
return 0;
}
}
-/**
- * power_up_device - Power one device on.
- * @dev: Device.
- */
-
-void power_up_device(struct device * dev)
-{
- struct device_driver * drv = dev->driver;
- if (drv && drv->resume)
- drv->resume(dev,RESUME_POWER_ON);
-}
-
-
/**
* device_power_up_irq - Power on some devices.
*
while(!list_empty(&dpm_off_irq)) {
struct list_head * entry = dpm_off_irq.next;
list_del_init(entry);
- power_up_device(to_device(entry));
+ resume_device(to_device(entry));
list_add_tail(entry,&dpm_active);
}
}
int suspend_device(struct device * dev, u32 state)
{
- struct device_driver * drv = dev->driver;
int error = 0;
- if (drv && drv->suspend)
- error = drv->suspend(dev,state,SUSPEND_SAVE_STATE);
+ if (dev->bus && dev->bus->suspend)
+ error = dev->bus->suspend(dev,state);
if (!error) {
list_del(&dev->power.entry);
}
-/**
- * dpm_power_down - Power down devices without interrupts.
- * @state: State to enter.
- *
- * Walk the dpm_off_irq list (built by device_pm_suspend) and power
- * down each device that requires the call to be made with interrupts
- * disabled.
- */
-
-static int dpm_power_down(u32 state)
-{
- int error = 0;
-
- return error;
-}
-
-
/**
* device_pm_power_down - Shut down special devices.
* @state: Power state to enter.
struct device * (*add) (struct device * parent, char * bus_id);
int (*hotplug) (struct device *dev, char **envp,
int num_envp, char *buffer, int buffer_size);
-
+ int (*suspend)(struct device * dev, u32 state);
+ int (*resume)(struct device * dev);
};
extern int bus_register(struct bus_type * bus);
int error = 0;
local_irq_save(flags);
- device_pm_power_down();
+ device_pm_power_down(PM_SUSPEND_DISK);
switch(mode) {
case PM_DISK_PLATFORM:
error = pm_ops->enter(PM_SUSPEND_DISK);