|
@@ -71,6 +71,7 @@
|
|
|
#include <linux/dma-mapping.h>
|
|
|
#include <linux/delay.h>
|
|
|
#include <linux/of.h>
|
|
|
+#include <linux/pm.h>
|
|
|
#include <asm/firmware.h>
|
|
|
#include <asm/vio.h>
|
|
|
#include <scsi/scsi.h>
|
|
@@ -1990,6 +1991,19 @@ static int ibmvscsi_remove(struct vio_dev *vdev)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * ibmvscsi_resume: Resume from suspend
|
|
|
+ * @dev: device struct
|
|
|
+ *
|
|
|
+ * We may have lost an interrupt across suspend/resume, so kick the
|
|
|
+ * interrupt handler
|
|
|
+ */
|
|
|
+static int ibmvscsi_resume(struct device *dev)
|
|
|
+{
|
|
|
+ struct ibmvscsi_host_data *hostdata = dev_get_drvdata(dev);
|
|
|
+ return ibmvscsi_ops->resume(hostdata);
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* ibmvscsi_device_table: Used by vio.c to match devices in the device tree we
|
|
|
* support.
|
|
@@ -2000,6 +2014,10 @@ static struct vio_device_id ibmvscsi_device_table[] __devinitdata = {
|
|
|
};
|
|
|
MODULE_DEVICE_TABLE(vio, ibmvscsi_device_table);
|
|
|
|
|
|
+static struct dev_pm_ops ibmvscsi_pm_ops = {
|
|
|
+ .resume = ibmvscsi_resume
|
|
|
+};
|
|
|
+
|
|
|
static struct vio_driver ibmvscsi_driver = {
|
|
|
.id_table = ibmvscsi_device_table,
|
|
|
.probe = ibmvscsi_probe,
|
|
@@ -2008,6 +2026,7 @@ static struct vio_driver ibmvscsi_driver = {
|
|
|
.driver = {
|
|
|
.name = "ibmvscsi",
|
|
|
.owner = THIS_MODULE,
|
|
|
+ .pm = &ibmvscsi_pm_ops,
|
|
|
}
|
|
|
};
|
|
|
|