Dear Andy, On Wed, 12 Jun 2024 10:55:55 +0200 Marek Behún <kabel@xxxxxxxxxx> wrote: > Originally, I used the low-level irq_create_mapping(), passing it the > gpiochip's IRQ domain, something like: > > irq = irq_create_mapping(mcu->gc.irq.domain, TRNG_HWIRQ); > > Andy said [1] that > > This looks like some workaround against existing gpiod_to_irq(). Why > do you need this? > > I should not poke into gpiolib's internals like that. > > So I changed it to > > irq = gpiod_to_irq(gpiochip_get_desc(&mcu->gc, TRNG_HWIRQ)); I think the original code irq = irq_create_mapping(mcu->gc.irq.domain, TRNG_HWIRQ); should be used. The trng part of the driver is interested in the interrupt, it does not care if the interrupt is provided via a GPIO chip. The mcu device is a gpio-controller, but also an interrupt-controller. That the interrupts are provided via gpiolib is irrelevant. So I think that what we did back in April, changing to gpiod_to_irq(), is not actually correct, from semantic point of view. For example if some other driver wanted to use a MCU interrupt, it would have simply used: of_get_irq() not referring to gpio descriptors at all, i.e. not something like gpiod_to_irq(gpiod_find_and_request()) (I do actually have code prepared for another driver that will use an interrupt provided by the MCU.) What do you think? Marek