On Tue, Jun 28, 2022 at 02:50:36PM +0200, Andy Shevchenko wrote: > On Tue, Jun 28, 2022 at 10:17 AM Colin Foster > <colin.foster@xxxxxxxxxxxxxxxx> wrote: > > > > Several ocelot-related modules are designed for MMIO / regmaps. As such, > > they often use a combination of devm_platform_get_and_ioremap_resource and > > devm_regmap_init_mmio. > > > > Operating in an MFD might be different, in that it could be memory mapped, > > or it could be SPI, I2C... In these cases a fallback to use IORESOURCE_REG > > instead of IORESOURCE_MEM becomes necessary. > > > > When this happens, there's redundant logic that needs to be implemented in > > every driver. In order to avoid this redundancy, utilize a single function > > that, if the MFD scenario is enabled, will perform this fallback logic. > > > + regs = devm_platform_get_and_ioremap_resource(pdev, index, &res); > > + > > + if (!res) > > + return ERR_PTR(-ENOENT); > > This needs a comment why the original error code from devm_ call above > is not good here. I think what is really needed is an _optional() variant of ocelot_platform_init_regmap_from_resource(), which just returns NULL on missing resource and doesn't ioremap anything. It can be easily open coded, i.e. instead of creating devm_platform_get_and_ioremap_resource_optional(), we could just call platform_get_resource() and devm_ioremap_resource() individually.