diff options
author | Richard Zhu <hongxing.zhu@nxp.com> | 2022-07-14 15:31:02 +0800 |
---|---|---|
committer | Stefan Eichenberger <eichest@gmail.com> | 2023-10-25 09:37:01 +0200 |
commit | 6f32493eb88ebc38bad93edb48dffa0607450c4e (patch) | |
tree | 76f67cfde4d0105652d8d25aff2f56604dce3ad5 | |
parent | c994561e08e26a005ee10cc45ab848e1932b4b95 (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.c | 22 |
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; } |