diff options
Diffstat (limited to 'drivers/usb/dwc3/dwc3-pci.c')
| -rw-r--r-- | drivers/usb/dwc3/dwc3-pci.c | 40 | 
1 files changed, 38 insertions, 2 deletions
diff --git a/drivers/usb/dwc3/dwc3-pci.c b/drivers/usb/dwc3/dwc3-pci.c index 7d70f44567d..227d4a7acad 100644 --- a/drivers/usb/dwc3/dwc3-pci.c +++ b/drivers/usb/dwc3/dwc3-pci.c @@ -45,8 +45,6 @@  #include <linux/usb/otg.h>  #include <linux/usb/nop-usb-xceiv.h> -#include "core.h" -  /* FIXME define these in <linux/pci_ids.h> */  #define PCI_VENDOR_ID_SYNOPSYS		0x16c3  #define PCI_DEVICE_ID_SYNOPSYS_HAPSUSB3	0xabcd @@ -214,11 +212,49 @@ static DEFINE_PCI_DEVICE_TABLE(dwc3_pci_id_table) = {  };  MODULE_DEVICE_TABLE(pci, dwc3_pci_id_table); +#ifdef CONFIG_PM +static int dwc3_pci_suspend(struct device *dev) +{ +	struct pci_dev	*pci = to_pci_dev(dev); + +	pci_disable_device(pci); + +	return 0; +} + +static int dwc3_pci_resume(struct device *dev) +{ +	struct pci_dev	*pci = to_pci_dev(dev); +	int		ret; + +	ret = pci_enable_device(pci); +	if (ret) { +		dev_err(dev, "can't re-enable device --> %d\n", ret); +		return ret; +	} + +	pci_set_master(pci); + +	return 0; +} + +static const struct dev_pm_ops dwc3_pci_dev_pm_ops = { +	SET_SYSTEM_SLEEP_PM_OPS(dwc3_pci_suspend, dwc3_pci_resume) +}; + +#define DEV_PM_OPS	(&dwc3_pci_dev_pm_ops) +#else +#define DEV_PM_OPS	NULL +#endif /* CONFIG_PM */ +  static struct pci_driver dwc3_pci_driver = {  	.name		= "dwc3-pci",  	.id_table	= dwc3_pci_id_table,  	.probe		= dwc3_pci_probe,  	.remove		= dwc3_pci_remove, +	.driver		= { +		.pm	= DEV_PM_OPS, +	},  };  MODULE_AUTHOR("Felipe Balbi <balbi@ti.com>");  |