diff options
Diffstat (limited to 'drivers/scsi/ibmvscsi/ibmvscsi.c')
| -rw-r--r-- | drivers/scsi/ibmvscsi/ibmvscsi.c | 20 | 
1 files changed, 20 insertions, 0 deletions
diff --git a/drivers/scsi/ibmvscsi/ibmvscsi.c b/drivers/scsi/ibmvscsi/ibmvscsi.c index e3a18e0ef27..ff5ec5ac1fb 100644 --- a/drivers/scsi/ibmvscsi/ibmvscsi.c +++ b/drivers/scsi/ibmvscsi/ibmvscsi.c @@ -70,7 +70,9 @@  #include <linux/moduleparam.h>  #include <linux/dma-mapping.h>  #include <linux/delay.h> +#include <linux/slab.h>  #include <linux/of.h> +#include <linux/pm.h>  #include <asm/firmware.h>  #include <asm/vio.h>  #include <scsi/scsi.h> @@ -1991,6 +1993,19 @@ static int ibmvscsi_remove(struct vio_dev *vdev)  }  /** + * 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 +2015,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 +2027,7 @@ static struct vio_driver ibmvscsi_driver = {  	.driver = {  		.name = "ibmvscsi",  		.owner = THIS_MODULE, +		.pm = &ibmvscsi_pm_ops,  	}  };  |