#include <linux/pm_runtime.h>
#include <linux/export.h>
#include <linux/blk-pm.h>
#include <scsi/scsi_device.h>
#include <scsi/scsi_driver.h>
#include <scsi/scsi_host.h>
static int do_scsi_suspend(struct device *dev, const struct dev_pm_ops *pm)
return pm && pm->suspend ? pm->suspend(dev) : 0;
static int do_scsi_freeze(struct device *dev, const struct dev_pm_ops *pm)
return pm && pm->freeze ? pm->freeze(dev) : 0;
static int do_scsi_poweroff(struct device *dev, const struct dev_pm_ops *pm)
return pm && pm->poweroff ? pm->poweroff(dev) : 0;
static int do_scsi_resume(struct device *dev, const struct dev_pm_ops *pm)
return pm && pm->resume ? pm->resume(dev) : 0;
static int do_scsi_thaw(struct device *dev, const struct dev_pm_ops *pm)
return pm && pm->thaw ? pm->thaw(dev) : 0;
static int do_scsi_restore(struct device *dev, const struct dev_pm_ops *pm)
return pm && pm->restore ? pm->restore(dev) : 0;
static int scsi_dev_type_suspend(struct device *dev,
int (*cb)(struct device *, const struct dev_pm_ops *))
const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
async_synchronize_full_domain(&scsi_sd_pm_domain);
err = scsi_device_quiesce(to_scsi_device(dev));