|
@@ -343,6 +343,20 @@ static int cdns_pcie_host_probe(struct platform_device *pdev)
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
+static void cdns_pcie_shutdown(struct platform_device *pdev)
|
|
|
+{
|
|
|
+ struct device *dev = &pdev->dev;
|
|
|
+ struct cdns_pcie *pcie = dev_get_drvdata(dev);
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ ret = pm_runtime_put_sync(dev);
|
|
|
+ if (ret < 0)
|
|
|
+ dev_dbg(dev, "pm_runtime_put_sync failed\n");
|
|
|
+
|
|
|
+ pm_runtime_disable(dev);
|
|
|
+ cdns_pcie_disable_phy(pcie);
|
|
|
+}
|
|
|
+
|
|
|
static struct platform_driver cdns_pcie_host_driver = {
|
|
|
.driver = {
|
|
|
.name = "cdns-pcie-host",
|
|
@@ -350,5 +364,6 @@ static struct platform_driver cdns_pcie_host_driver = {
|
|
|
.pm = &cdns_pcie_pm_ops,
|
|
|
},
|
|
|
.probe = cdns_pcie_host_probe,
|
|
|
+ .shutdown = cdns_pcie_shutdown,
|
|
|
};
|
|
|
builtin_platform_driver(cdns_pcie_host_driver);
|