On Fri, Jul 01, 2022 at 10:23:36PM +0200, Andy Shevchenko wrote: > On Fri, Jul 1, 2022 at 9:26 PM 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. > > ... > > > + res = platform_get_resource(pdev, IORESOURCE_MEM, index); > > + if (res) { > > + regs = devm_ioremap_resource(dev, res); > > + if (IS_ERR(regs)) > > + return ERR_CAST(regs); > > Why can't it be devm_platform_get_and_ioremap_resource() here? It can... but it invokes prints of "invalid resource" during initialization. Here it was implied that I should break the function call out: https://patchwork.kernel.org/project/netdevbpf/patch/20220628081709.829811-2-colin.foster@xxxxxxxxxxxxxxxx/#24917551 > > regs = devm_platform_get_and_ioremap_resource(); > if (res) { > if (IS_ERR(regs)) > return ERR_CAST(); > return ... > } > > > + return devm_regmap_init_mmio(dev, regs, config); > > + } > > ... > > > + return (map) ? map : ERR_PTR(-ENOENT); > > Too many parentheses. > > Also you may use short form of ternary operator: > > return map ?: ERR_PTR(-ENOENT); Agreed, and I didn't know about that operator. When Vladimir suggested it I thought it was a typo. I should've known better. > > -- > With Best Regards, > Andy Shevchenko