spi->irq == 0 on module reload of driver using IRQF_TRIGGER_LOW
kernel at martin.sperl.org
kernel at martin.sperl.org
Sun Nov 12 08:49:39 PST 2017
> On 12.11.2017, at 16:41, Marc Zyngier <marc.zyngier at 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
More information about the linux-rpi-kernel
mailing list