On Wed, Apr 24, 2024 at 08:51:23PM +0200, Marek Behún wrote: > On Wed, 24 Apr 2024 21:33:44 +0300 > Andy Shevchenko <andy@xxxxxxxxxx> wrote: > > On Wed, Apr 24, 2024 at 07:38:05PM +0200, Marek Behún wrote: ... > > > +static void omnia_irq_mapping_drop(void *res) > > > +{ > > > + irq_dispose_mapping((unsigned int)(unsigned long)res); > > > +} > > > > Leftover? > > What do you mean? I dropped the devm-helpers.h changes, now I do > devm_add_action_or_reset() manually, with this function as the action. But why? ... > > > + irq_idx = omnia_int_to_gpio_idx[__bf_shf(INT_TRNG)]; > > > + irq = gpiod_to_irq(gpiochip_get_desc(&mcu->gc, irq_idx)); > > > + if (irq < 0) > > > + return dev_err_probe(dev, irq, "Cannot get TRNG IRQ\n"); > > > + err = devm_add_action_or_reset(dev, omnia_irq_mapping_drop, > > > + (void *)(unsigned long)irq); > > > + if (err) > > > + return err; > > > > Are you sure it's correct now? > > Yes, why wouldn't it? For what purpose? I don't see drivers doing that. Are you expecting that the same IRQ mapping will be reused for something else? Can you elaborate how? (I can imagine one theoretical / weird case how to achieve that, but impractical.) Besides above, this is asymmetrical call to gpiod_to_irq(). If we really care about this, it should be provided by GPIO library. -- With Best Regards, Andy Shevchenko