On Tue, Nov 10, 2020 at 3:26 PM Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> wrote: > > On Tue, Nov 10, 2020 at 04:26:24PM +0200, Andy Shevchenko wrote: > > On Tue, Nov 10, 2020 at 01:34:05PM +0100, Bartosz Golaszewski wrote: > > > From: Bartosz Golaszewski <bgolaszewski@xxxxxxxxxxxx> > > > > > > We can simplify the code in gpio-exar by using regmap. This allows us to > > > drop the mutex (regmap provides its own locking) and we can also reuse > > > regmap's bit operations instead of implementing our own update function. > > > > ... > > > > > + /* > > > + * We don't need to check the return values of mmio regmap operations (unless > > > + * the regmap has a clock attached which is not the case here). > > > + */ > > > + exar_gpio->regs = devm_regmap_init_mmio(dev, p, &exar_regmap_config); > > > + if (IS_ERR(exar_gpio->regs)) > > > + return PTR_ERR(exar_gpio->regs); > > > > > > index = ida_alloc(&ida_index, GFP_KERNEL); > > > - if (index < 0) { > > > - ret = index; > > > - goto err_mutex_destroy; > > > - } > > > + if (index < 0) > > > + return index; > > > > And below you effectively use p as regmap! > > That's what renaming of variable regs -> regmap or map can easily reveal. > > > > exar_gpio->regs = p; > > Jan, if you remove this line, does it help? > Ha! I guess you were right saying that keeping the name is asking for trouble then. :) I think that may be it but address width should still be changed to 16. Bartosz