spi->irq == 0 on module reload of driver using IRQF_TRIGGER_LOW

kernel at martin.sperl.org
2017-11-12T16:49:39Z

> On 12.11.2017, at 16:41, Marc Zyngier <marc.zyngier@arm.com> wrote:
>> +
>> + can0: mcp2517fd at 0 {
>> + reg = <0>;
>> + compatible = "microchip,mcp2517fd";
>> + pinctrl-names = "default";
>> + pinctrl-0 = <&can0_pins>;
>> + spi-max-frequency = <12500000>;
>> + interrupt-parent = <&gpio>;
>> + interrupts = <16 0x2>;
>
> This indicates a falling edge. No wonder the kernel is confused (I
> don't know why this isn't enforced the first time though, probably an
> issue in the GPIO irqchip driver...). Replacing this 2 with a 8 should
> allow you to make some progress.

Thanks for the clarification - with that change it works!

For a better understanding:
Isn?t the interrupt type to use more of a driver decision than a
HW implementation detail that needs to get defined in the device tree?

In my case I probably could write some more code that would allow edge
interrupts to work (without race-conditions on spi transfers - probably
by using spi_async to reenable interrupts on the HW device), but it
would not be as straight-forward and a bit more complex.

Summary: Essentially the driver has to match the interrupt type -
otherwise it will fail (on second initialization).

Thanks,
Martin