drivers/mfd/qcom-pm8xxx.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-)
Since commit c6e126de43e7 ("of: Keep track of populated platform
devices") child devices will not be created by of_platform_populate()
if the devices had previously been deregistered individually so that the
OF_POPULATED flag is still set in the corresponding OF nodes.
Switch to using of_platform_depopulate() instead of open coding so that
the child devices are created if the driver is rebound.
Fixes: c6e126de43e7 ("of: Keep track of populated platform devices")
Cc: stable@vger.kernel.org # 3.16
Signed-off-by: Johan Hovold <johan@kernel.org>
---
drivers/mfd/qcom-pm8xxx.c | 8 +-------
1 file changed, 1 insertion(+), 7 deletions(-)
diff --git a/drivers/mfd/qcom-pm8xxx.c b/drivers/mfd/qcom-pm8xxx.c
index 1149f7102a36..0cf374c015ce 100644
--- a/drivers/mfd/qcom-pm8xxx.c
+++ b/drivers/mfd/qcom-pm8xxx.c
@@ -577,17 +577,11 @@ static int pm8xxx_probe(struct platform_device *pdev)
return rc;
}
-static int pm8xxx_remove_child(struct device *dev, void *unused)
-{
- platform_device_unregister(to_platform_device(dev));
- return 0;
-}
-
static void pm8xxx_remove(struct platform_device *pdev)
{
struct pm_irq_chip *chip = platform_get_drvdata(pdev);
- device_for_each_child(&pdev->dev, NULL, pm8xxx_remove_child);
+ of_platform_depopulate(&pdev->dev);
irq_domain_remove(chip->irqdomain);
}
--
2.51.2
On Fri, 19 Dec 2025 12:09:47 +0100, Johan Hovold wrote:
> Since commit c6e126de43e7 ("of: Keep track of populated platform
> devices") child devices will not be created by of_platform_populate()
> if the devices had previously been deregistered individually so that the
> OF_POPULATED flag is still set in the corresponding OF nodes.
>
> Switch to using of_platform_depopulate() instead of open coding so that
> the child devices are created if the driver is rebound.
>
> [...]
Applied, thanks!
[1/1] mfd: qcom-pm8xxx: fix OF populate on driver rebind
commit: 0b6a34ca0ac3b6e02389a2594f0638e5b9c65814
--
Lee Jones [李琼斯]
On Fri, 19 Dec 2025, Johan Hovold wrote:
> Since commit c6e126de43e7 ("of: Keep track of populated platform
> devices") child devices will not be created by of_platform_populate()
> if the devices had previously been deregistered individually so that the
> OF_POPULATED flag is still set in the corresponding OF nodes.
>
> Switch to using of_platform_depopulate() instead of open coding so that
> the child devices are created if the driver is rebound.
>
> Fixes: c6e126de43e7 ("of: Keep track of populated platform devices")
> Cc: stable@vger.kernel.org # 3.16
> Signed-off-by: Johan Hovold <johan@kernel.org>
> ---
> drivers/mfd/qcom-pm8xxx.c | 8 +-------
> 1 file changed, 1 insertion(+), 7 deletions(-)
>
> diff --git a/drivers/mfd/qcom-pm8xxx.c b/drivers/mfd/qcom-pm8xxx.c
> index 1149f7102a36..0cf374c015ce 100644
> --- a/drivers/mfd/qcom-pm8xxx.c
> +++ b/drivers/mfd/qcom-pm8xxx.c
> @@ -577,17 +577,11 @@ static int pm8xxx_probe(struct platform_device *pdev)
> return rc;
> }
>
> -static int pm8xxx_remove_child(struct device *dev, void *unused)
> -{
> - platform_device_unregister(to_platform_device(dev));
> - return 0;
> -}
> -
> static void pm8xxx_remove(struct platform_device *pdev)
> {
> struct pm_irq_chip *chip = platform_get_drvdata(pdev);
>
> - device_for_each_child(&pdev->dev, NULL, pm8xxx_remove_child);
> + of_platform_depopulate(&pdev->dev);
> irq_domain_remove(chip->irqdomain);
Have you explored devm_of_platform_populate()?
--
Lee Jones [李琼斯]
On Fri, Jan 09, 2026 at 03:27:38PM +0000, Lee Jones wrote:
> On Fri, 19 Dec 2025, Johan Hovold wrote:
>
> > Since commit c6e126de43e7 ("of: Keep track of populated platform
> > devices") child devices will not be created by of_platform_populate()
> > if the devices had previously been deregistered individually so that the
> > OF_POPULATED flag is still set in the corresponding OF nodes.
> >
> > Switch to using of_platform_depopulate() instead of open coding so that
> > the child devices are created if the driver is rebound.
> >
> > Fixes: c6e126de43e7 ("of: Keep track of populated platform devices")
> > Cc: stable@vger.kernel.org # 3.16
> > Signed-off-by: Johan Hovold <johan@kernel.org>
> > -static int pm8xxx_remove_child(struct device *dev, void *unused)
> > -{
> > - platform_device_unregister(to_platform_device(dev));
> > - return 0;
> > -}
> > -
> > static void pm8xxx_remove(struct platform_device *pdev)
> > {
> > struct pm_irq_chip *chip = platform_get_drvdata(pdev);
> >
> > - device_for_each_child(&pdev->dev, NULL, pm8xxx_remove_child);
> > + of_platform_depopulate(&pdev->dev);
> > irq_domain_remove(chip->irqdomain);
>
> Have you explored devm_of_platform_populate()?
Yeah, but mixing devres and explicit release risks introducing bugs. And
here we want to make sure the children are deregistered before freeing
the irqdomain.
Johan
On Fri, Dec 19, 2025 at 12:09:47PM +0100, Johan Hovold wrote:
> Since commit c6e126de43e7 ("of: Keep track of populated platform
> devices") child devices will not be created by of_platform_populate()
> if the devices had previously been deregistered individually so that the
> OF_POPULATED flag is still set in the corresponding OF nodes.
>
> Switch to using of_platform_depopulate() instead of open coding so that
> the child devices are created if the driver is rebound.
>
> Fixes: c6e126de43e7 ("of: Keep track of populated platform devices")
> Cc: stable@vger.kernel.org # 3.16
> Signed-off-by: Johan Hovold <johan@kernel.org>
> ---
> drivers/mfd/qcom-pm8xxx.c | 8 +-------
> 1 file changed, 1 insertion(+), 7 deletions(-)
>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
--
With best wishes
Dmitry
On 12/19/25 12:09 PM, Johan Hovold wrote:
> Since commit c6e126de43e7 ("of: Keep track of populated platform
> devices") child devices will not be created by of_platform_populate()
> if the devices had previously been deregistered individually so that the
> OF_POPULATED flag is still set in the corresponding OF nodes.
>
> Switch to using of_platform_depopulate() instead of open coding so that
> the child devices are created if the driver is rebound.
>
> Fixes: c6e126de43e7 ("of: Keep track of populated platform devices")
> Cc: stable@vger.kernel.org # 3.16
> Signed-off-by: Johan Hovold <johan@kernel.org>
> ---
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Konrad
© 2016 - 2026 Red Hat, Inc.