[PATCH v6 02/10] PCI: dw-rockchip: Restore vpcie3v3 regulator handle
Shawn Lin
shawn.lin at rock-chips.com
Tue Sep 8 17:44:45 PDT 2026
在 2026/09/08 星期二 22:51, Sebastian Reichel 写道:
> This reverts commit c930b10f17c0 ("PCI: dw-rockchip: Simplify regulator
> setup with devm_regulator_get_enable_optional()"), which nicely cleaned
> up the code.
>
> The vpcie3v3 regulator handle is needed to disable the regulator during
> system suspend (to be added in its own patch).
>
Reviewed-by: Shawn Lin <shawn.lin at rock-chips.com>
> Signed-off-by: Sebastian Reichel <sebastian.reichel at collabora.com>
> ---
> drivers/pci/controller/dwc/pcie-dw-rockchip.c | 23 +++++++++++++++++------
> 1 file changed, 17 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/pci/controller/dwc/pcie-dw-rockchip.c b/drivers/pci/controller/dwc/pcie-dw-rockchip.c
> index dc85564e5001..f67ad3c31c35 100644
> --- a/drivers/pci/controller/dwc/pcie-dw-rockchip.c
> +++ b/drivers/pci/controller/dwc/pcie-dw-rockchip.c
> @@ -112,6 +112,7 @@ struct rockchip_pcie {
> unsigned int clk_cnt;
> struct reset_control *rst;
> struct gpio_desc *rst_gpio;
> + struct regulator *vpcie3v3;
> struct irq_domain *irq_domain;
> const struct rockchip_pcie_of_data *data;
> bool supports_clkreq;
> @@ -844,15 +845,22 @@ static int rockchip_pcie_probe(struct platform_device *pdev)
> return ret;
>
> /* DON'T MOVE ME: must be enable before PHY init */
> - ret = devm_regulator_get_enable_optional(dev, "vpcie3v3");
> - if (ret < 0 && ret != -ENODEV)
> - return dev_err_probe(dev, ret,
> - "failed to enable vpcie3v3 regulator\n");
> + rockchip->vpcie3v3 = devm_regulator_get_optional(dev, "vpcie3v3");
> + if (IS_ERR(rockchip->vpcie3v3)) {
> + if (PTR_ERR(rockchip->vpcie3v3) != -ENODEV)
> + return dev_err_probe(dev, PTR_ERR(rockchip->vpcie3v3),
> + "failed to get vpcie3v3 regulator\n");
> + rockchip->vpcie3v3 = NULL;
> + } else {
> + ret = regulator_enable(rockchip->vpcie3v3);
> + if (ret)
> + return dev_err_probe(dev, ret,
> + "failed to enable vpcie3v3 regulator\n");
> + }
>
> ret = rockchip_pcie_phy_init(rockchip);
> if (ret)
> - return dev_err_probe(dev, ret,
> - "failed to initialize the phy\n");
> + goto disable_regulator;
>
> ret = reset_control_deassert(rockchip->rst);
> if (ret)
> @@ -885,6 +893,9 @@ static int rockchip_pcie_probe(struct platform_device *pdev)
> clk_bulk_disable_unprepare(rockchip->clk_cnt, rockchip->clks);
> deinit_phy:
> rockchip_pcie_phy_deinit(rockchip);
> +disable_regulator:
> + if (rockchip->vpcie3v3)
> + regulator_disable(rockchip->vpcie3v3);
>
> return ret;
> }
>
More information about the linux-arm-kernel
mailing list