Especially in embedded devices, you frequently find chips where the
irq pin is tied to its own dedicated interrupt line. In such cases,
where you can be really sure the interrupt is not shared, we can take
the concept of uio_pdrv
one step further and use a
generic interrupt handler. That's what
uio_pdrv_genirq
does.
The setup for this driver is the same as described above for
uio_pdrv
, except that you do not implement an
interrupt handler. The .handler
element of
struct uio_info
must remain
NULL
. The .irq_flags
element
must not contain IRQF_SHARED
.
You will set the .name
element of
struct platform_device
to
"uio_pdrv_genirq"
to use this driver.
The generic interrupt handler of uio_pdrv_genirq
will simply disable the interrupt line using
disable_irq_nosync()
. After doing its work,
userspace can reenable the interrupt by writing 0x00000001 to the UIO
device file. The driver already implements an
irq_control()
to make this possible, you must not
implement your own.
Using uio_pdrv_genirq
not only saves a few lines of
interrupt handler code. You also do not need to know anything about
the chip's internal registers to create the kernel part of the driver.
All you need to know is the irq number of the pin the chip is
connected to.