On Tue, Jun 28, 2022 at 10:25:18AM -0700, Colin Foster wrote: > > struct regmap * > > ocelot_regmap_from_resource(struct platform_device *pdev, > > unsigned int index, > > const struct regmap_config *config) > > { > > struct regmap *map; > > > > map = ocelot_regmap_from_resource_optional(pdev, index, config); > > return map ? : ERR_PTR(-ENOENT); > > } > > > > I hope I didn't get something wrong, this is all code written within the > > email client, so it is obviously not compiled/tested.... > > Yep - I definitely get the point. And thanks for the review. > > The other (bigger?) issue is around how this MFD can be loaded as a > module. Right now it is pretty straightforward to say > #if IS_ENABLED(CONFIG_MFD_OCELOT). Theres a level of nuance if > CONFIG_MFD_OCELOT=m while the child devices are compiled in > (CONFIG_PINCTRL_MICROCHIP_SGPIO=y for example). It still feels like this > code belongs somewhere in platform / resource / device / mfd...? > > It might be perfectly valid to have multiple SGPIO controllers - one > local and one remote / SPI. But without the CONFIG_MFD_OCELOT module > loaded, I don't think the SGPIO module would work. > > This patch set deals with the issue by setting MFD_OCELOT to a boolean - > but in the long run I think a module makes sense. I admittedly haven't > spent enough time researching (bashing my head against the wall) this, > but this seems like a good opportunity to at least express that I'm > expecting to have to deal with this issue soon. I met with Alexandre at > ELC this past week, and he said Arnd (both added to CC) might be a good > resource - but again I'd like to do a little more searching before > throwing it over the wall. Well, that's quite a different ball game. It sounds like what you want is to have a dynamic list of regmap providers for a device, and when a device probes, to not depend on all the modules of all the possible providers being inserted at that particular time. Which makes sense, and I agree it's something that should be handled by the kernel core if you don't want the sgpio code to directly call symbols exported by the ocelot mfd core. I searched for 5 minutes or so, and I noticed regmap_attach_dev() and dev_get_regmap(), maybe those could be of help? I'm not completely sure about the mechanics of it all, but what I'm searching for is something through which the mfd core could attach a regmap to a platform device through devres before calling platform_device_add(), such that the driver can use it (or manually fall back to an MMIO regmap) via dev_get_regmap().