diff options
Diffstat (limited to 'drivers/pci/controller/pcie-cadence.c')
-rw-r--r-- | drivers/pci/controller/pcie-cadence.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/drivers/pci/controller/pcie-cadence.c b/drivers/pci/controller/pcie-cadence.c index 2edc12661e44..86f1b002c846 100644 --- a/drivers/pci/controller/pcie-cadence.c +++ b/drivers/pci/controller/pcie-cadence.c | |||
@@ -217,3 +217,33 @@ err_link: | |||
217 | 217 | ||
218 | return ret; | 218 | return ret; |
219 | } | 219 | } |
220 | |||
221 | #ifdef CONFIG_PM_SLEEP | ||
222 | static int cdns_pcie_suspend_noirq(struct device *dev) | ||
223 | { | ||
224 | struct cdns_pcie *pcie = dev_get_drvdata(dev); | ||
225 | |||
226 | cdns_pcie_disable_phy(pcie); | ||
227 | |||
228 | return 0; | ||
229 | } | ||
230 | |||
231 | static int cdns_pcie_resume_noirq(struct device *dev) | ||
232 | { | ||
233 | struct cdns_pcie *pcie = dev_get_drvdata(dev); | ||
234 | int ret; | ||
235 | |||
236 | ret = cdns_pcie_enable_phy(pcie); | ||
237 | if (ret) { | ||
238 | dev_err(dev, "failed to enable phy\n"); | ||
239 | return ret; | ||
240 | } | ||
241 | |||
242 | return 0; | ||
243 | } | ||
244 | #endif | ||
245 | |||
246 | const struct dev_pm_ops cdns_pcie_pm_ops = { | ||
247 | SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(cdns_pcie_suspend_noirq, | ||
248 | cdns_pcie_resume_noirq) | ||
249 | }; | ||