Quoting Brian Masney (2019-01-06 18:11:42) > + }, > + { > + .name = "pm8941-regulators", > + .of_compatible = "qcom,pm8941-regulators", > + }, > +}; > + > static int pmic_spmi_probe(struct spmi_device *sdev) > { > struct regmap *regmap; > @@ -136,7 +191,9 @@ static int pmic_spmi_probe(struct spmi_device *sdev) > if (sdev->usid % 2 == 0) > pmic_spmi_show_revid(regmap, &sdev->dev); > > - return devm_of_platform_populate(&sdev->dev); > + return devm_mfd_add_devices(&sdev->dev, PLATFORM_DEVID_AUTO, > + pmic_spmi_cells, > + ARRAY_SIZE(pmic_spmi_cells), NULL, 0, NULL); Now this seems worse. We have gotten by without having to explicitly list all the devices that are inside the PMIC as mfd cells. But now, to avoid creating the irqs before the hierarchy is installed, we have to undo all of that and rely on the difference in behavior of of_platform_populate() and mfd_add_devices(). That's pretty obscure to figure out. I'd prefer we drop this patch and keep disassociating virqs and reassociating them in the gpio driver. Then we can remove the interrupts properties in all the DTS files and finally remove the disassociate and reassociating code in the gpio driver when all the DT files are cleaned up. It makes things less confusing that way and doesn't require updates to this driver.