summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Zhu <hongxing.zhu@nxp.com>2022-07-14 15:31:02 +0800
committerStefan Eichenberger <eichest@gmail.com>2023-10-25 09:37:01 +0200
commit6f32493eb88ebc38bad93edb48dffa0607450c4e (patch)
tree76f67cfde4d0105652d8d25aff2f56604dce3ad5
parentc994561e08e26a005ee10cc45ab848e1932b4b95 (diff)
PCI: imx6: Turn off regulator when system is in suspend mode
The driver should undo any enables it did itself. The regulator disable shouldn't be basing decisions on regulator_is_enabled(). Move the regulator_disable to the suspend function, turn off regulator when the system is in suspend mode. Upstream-Status: Backport [a4bb720eeb1e2f2b895734ccce0dceec0a64eebd] Link: https://lore.kernel.org/r/1657783869-19194-11-git-send-email-hongxing.zhu@nxp.com Signed-off-by: Richard Zhu <hongxing.zhu@nxp.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
-rw-r--r--drivers/pci/controller/dwc/pci-imx6.c22
1 files changed, 10 insertions, 12 deletions
diff --git a/drivers/pci/controller/dwc/pci-imx6.c b/drivers/pci/controller/dwc/pci-imx6.c
index f0f57f4f6d01..af39ab4d0416 100644
--- a/drivers/pci/controller/dwc/pci-imx6.c
+++ b/drivers/pci/controller/dwc/pci-imx6.c
@@ -1114,14 +1114,6 @@ static void imx6_pcie_assert_core_reset(struct imx6_pcie *imx6_pcie)
break;
}
- if (imx6_pcie->vpcie && regulator_is_enabled(imx6_pcie->vpcie) > 0) {
- int ret = regulator_disable(imx6_pcie->vpcie);
-
- if (ret)
- dev_err(dev, "failed to disable vpcie regulator: %d\n",
- ret);
- }
-
/* Some boards don't have PCIe reset GPIO. */
if (gpio_is_valid(imx6_pcie->reset_gpio))
gpio_set_value_cansleep(imx6_pcie->reset_gpio,
@@ -1162,7 +1154,7 @@ static int imx6_pcie_deassert_core_reset(struct imx6_pcie *imx6_pcie)
int ret, i;
u32 val, tmp;
- if (imx6_pcie->vpcie && !regulator_is_enabled(imx6_pcie->vpcie)) {
+ if (imx6_pcie->vpcie) {
ret = regulator_enable(imx6_pcie->vpcie);
if (ret) {
dev_err(dev, "failed to enable vpcie regulator: %d\n",
@@ -1356,9 +1348,12 @@ static int imx6_pcie_deassert_core_reset(struct imx6_pcie *imx6_pcie)
return 0;
err_vpcie:
- if (imx6_pcie->vpcie)
- regulator_disable(imx6_pcie->vpcie);
-
+ if (imx6_pcie->vpcie) {
+ ret = regulator_disable(imx6_pcie->vpcie);
+ if (ret)
+ dev_err(dev, "failed to disable vpcie regulator: %d\n",
+ ret);
+ }
return ret;
}
@@ -2282,6 +2277,9 @@ static int imx6_pcie_suspend_noirq(struct device *dev)
imx6_pcie_clk_disable(imx6_pcie);
}
+ if (imx6_pcie->vpcie)
+ regulator_disable(imx6_pcie->vpcie);
+
return 0;
}