PCI: dw-rockchip: Simplify regulator setup with devm_regulator_get_enable_optional()
Subsystems (3)
PATCH 1/1 PCI: dw-rockchip: Simplify regulator setup with devm_regulator_get_enable_optional()
Replace manual get/enable logic with devm_regulator_get_enable_optional() to reduce boilerplate and improve error handling. This devm helper ensures the regulator is enabled during probe and automatically disabled on driver removal. Dropping the vpcie3v3 struct member eliminates redundant state tracking, resulting in cleaner and more maintainable code.
--- drivers/pci/controller/dwc/pcie-dw-rockchip.c | 23 +++++-------------- 1 file changed, 6 insertions(+), 17 deletions(-)
drivers/pci/controller/dwc/pcie-dw-rockchip.c +6 -17
@@ -76,7 +76,6 @@ 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; };
@@ -644,22 +643,15 @@ static int rockchip_pcie_probe(struct platform_device *pdev)return ret;/* DON'T MOVE ME: must be enable before PHY init */ - 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 =devm_regulator_get_enable_optional (dev,"vpcie3v3" ); +if (ret <0 && ret != -ENODEV ) +return dev_err_probe (dev, ret, +"failed to enable vpcie3v3 regulator\n" ); ret =rockchip_pcie_phy_init (rockchip);if (ret) - goto disable_regulator; +return dev_err_probe (dev, ret, +"failed to initialize the phy\n" ); ret =reset_control_deassert (rockchip->rst);if (ret)
@@ -692,9 +684,6 @@ 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; }
base-commit: d69eb204c255c35abd9e8cb621484e8074c75eaa
Signature · 1 line
2.50.1
Hi All,
Quoted 7 lines · Anand Moon
Replace manual get/enable logic with
devm_regulator_get_enable_optional()to reduce boilerplate and improve error handling. This devm helper ensures the regulator is enabled during probe and automatically disabled on driver removal. Dropping the vpcie3v3 struct member eliminates redundant state tracking, resulting in cleaner and more maintainable code.
Quoted 5 lines
Signed-off-by Anand Moon <[email protected]>--- drivers/pci/controller/dwc/pcie-dw-rockchip.c | 23 +++++-------------- 1 file changed, 6 insertions(+), 17 deletions(-)
If we compile the kernel with phy and regulator as modules, I observe this message.
[ 25.473960][ T55] platform 3c0800000.pcie: deferred probe pending: platform: supplier regulator-vcc3v3-pcie not ready [ 25.474071][ T55] platform fe0a0000.hdmi: deferred probe pending: platform: wait for supplier /i2c@fdd40000/pmic@20/regulators/LDO_REG9 [ 25.474124][ T55] platform regulator-vcc5v0-usb-otg: deferred probe pending: reg-fixed-voltage: can't get GPIO [ 25.474171][ T55] platform fdc20000.syscon:io-domains: deferred probe pending: platform: wait for supplier /i2c@fdd40000/pmic@20/regulators/SWITCH_REG1 [ 25.474218][ T55] platform cpufreq-dt: deferred probe pending: (reason unknown) [ 25.474264][ T55] platform regulator-vcc3v3-pcie: deferred probe pending: reg-fixed-voltage: can't get GPIO [ 25.474343][ T55] rockchip-pm-domain fdd90000.power-management:power-controller: Timed out. Forcing sync_state() [ 37.744968][ T2415] psi: inconsistent task state! task=2280:(udev-worker) cpu=1 psi_flags=4 clear=0 set=4 [ 37.849725][ T50] fan53555-regulator 3-001c: FAN53555 Option[12] Rev[15] Detected! [ 37.990008][ T2216] SCSI subsystem initialized
Thanks
-Anand
Manivannan Sadhasivam
maintainerQuoted 31 lines · Anand Moon
Hi All,
Quoted 7 lines · Anand Moon
Replace manual get/enable logic with
devm_regulator_get_enable_optional()to reduce boilerplate and improve error handling. This devm helper ensures the regulator is enabled during probe and automatically disabled on driver removal. Dropping the vpcie3v3 struct member eliminates redundant state tracking, resulting in cleaner and more maintainable code.Quoted 5 lines
Signed-off-by Anand Moon <[email protected]>--- drivers/pci/controller/dwc/pcie-dw-rockchip.c | 23 +++++-------------- 1 file changed, 6 insertions(+), 17 deletions(-)If we compile the kernel with phy and regulator as modules, I observe this message.
[ 25.473960][ T55] platform 3c0800000.pcie: deferred probe pending: platform: supplier regulator-vcc3v3-pcie not ready [ 25.474071][ T55] platform fe0a0000.hdmi: deferred probe pending: platform: wait for supplier /i2c@fdd40000/pmic@20/regulators/LDO_REG9 [ 25.474124][ T55] platform regulator-vcc5v0-usb-otg: deferred probe pending: reg-fixed-voltage: can't get GPIO [ 25.474171][ T55] platform fdc20000.syscon:io-domains: deferred probe pending: platform: wait for supplier /i2c@fdd40000/pmic@20/regulators/SWITCH_REG1 [ 25.474218][ T55] platform cpufreq-dt: deferred probe pending: (reason unknown) [ 25.474264][ T55] platform regulator-vcc3v3-pcie: deferred probepending: reg-fixed-voltage: can't get GPIO
Quoted 9 lines
[ 25.474343][ T55] rockchip-pm-domain fdd90000.power-management:power-controller: Timed out. Forcing sync_state() [ 37.744968][ T2415] psi: inconsistent task state! task=2280:(udev-worker) cpu=1 psi_flags=4 clear=0 set=4 [ 37.849725][ T50] fan53555-regulator 3-001c: FAN53555 Option[12] Rev[15] Detected! [ 37.990008][ T2216] SCSI subsystem initialized
This is a deferred probe log and not related to this patch or the PCIe controller driver. The controller drivers should still be functional once the dependent GPIO driver is probed.
- Mani
Signature · 1 line
மணிவண்ணன் சதாசிவம்
Quoted 8 lines · Anand Moon
Replace manual get/enable logic with
devm_regulator_get_enable_optional()to reduce boilerplate and improve error handling. This devm helper ensures the regulator is enabled during probe and automatically disabled on driver removal. Dropping the vpcie3v3 struct member eliminates redundant state tracking, resulting in cleaner and more maintainable code.[...]
Applied, thanks!
[1/1] PCI: dw-rockchip: Simplify regulator setup with devm_regulator_get_enable_optional()
commit: c930b10f17c03858cfe19b9873ba5240128b4d1b
Best regards,
Signature · 1 line
Manivannan Sadhasivam <[email protected]>
Hi Manivannan,
Quoted 10 lines · Manivannan Sadhasivam
Quoted 7 lines · Anand Moon
Replace manual get/enable logic with
devm_regulator_get_enable_optional()to reduce boilerplate and improve error handling. This devm helper ensures the regulator is enabled during probe and automatically disabled on driver removal. Dropping the vpcie3v3 struct member eliminates redundant state tracking, resulting in cleaner and more maintainable code.
Quoted 7 lines
Quoted 1 line
[...]
Applied, thanks!
[1/1] PCI: dw-rockchip: Simplify regulator setup with
devm_regulator_get_enable_optional()commit: c930b10f17c03858cfe19b9873ba5240128b4d1b
I am looking to suspend or resume the issue. We probably need to toggle the regulator
to maintain the power status on the PCIe controller. Therefore, dropping the patch is an option; I will add dev_err_probe for PHY later in the patch.
Quoted 4 lines
Best regards,
--
Manivannan Sadhasivam <[email protected]>
Thanks
-Anand
Hi Manivannan,
Quoted 18 lines · Anand Moon
Hi Manivannan,
Quoted 14 lines · Manivannan Sadhasivam
Quoted 8 lines · Anand Moon
Replace manual get/enable logic with
devm_regulator_get_enable_optional()to reduce boilerplate and improve error handling. This devm helper ensures the regulator is enabled during probe and automatically disabled on driver removal. Dropping the vpcie3v3 struct member eliminates redundant state tracking, resulting in cleaner and more maintainable code.[...]
Applied, thanks!
Quoted 9 lines
Quoted 3 lines
[1/1] PCI: dw-rockchip: Simplify regulator setup with
devm_regulator_get_enable_optional()commit: c930b10f17c03858cfe19b9873ba5240128b4d1bI am looking to suspend or resume the issue. We probably need to toggle the regulator
to maintain the power status on the PCIe controller. Therefore, dropping the patch is an option; I will adddev_err_probefor PHY later in the patch.
I found this series with the address system suspend support
This patch will conflict with
[2] https://lore.kernel.org/linux-pci/20251029-rockchip-pcie-system-suspend-v4-3-ce2e1b0692d2@collabora.com/
So please drop my patch.
Thanks
-Anand