Re: [PATCH v3] gpio: interrupt consistency check for OF GPIO IRQs
From: Linus Walleij <hidden>
Date: 2013-09-24 08:31:46
Also in:
linux-devicetree, lkml
On Mon, Sep 23, 2013 at 10:21 PM, Stephen Warren [off-list ref] wrote:
On 09/23/2013 02:01 PM, Linus Walleij wrote:
quoted
And how to you block the same line from being gpio_request()ed and set as output?To be honest, I really don't think this problem is terribly likely to occur, so I'm really not convinced that it's worth putting a lot of effort into solving it.
I have a different opionion, I think this is important. As GPIO subsystem maintainer I need to be convinced of the integrity of the system.
If the problem does occur, it's trivial to see that this has happened by looking at /proc/interrupts and /sys/kernel/debug/gpio,
I basically want /sys/kernel/debug/gpio to say if a certain line is tied for IRQ.
That driver needs to maintain some state that indicates which of its IRQs have been requested. Any time a GPIO request (I mean e.g. set_output() not request_gpio)) comes in, the request needs to be validated against that IRQ usage state. If there's a conflict, deny the GPIO request.
I think this should be done by gpiolib, and I think it is trivial given the right APIs. Putting it in the drivers will just create an array of similar-look Rube Goldberg-machines and code duplication. There is no point.
Now, it's quite possible that the code to maintain this state and perform the checks will be similar/common across multiple drivers. If so, by all means implement the code somewhere common, and have the various irq_chip/gpio_chip drivers call into it.
And this is what we should do in gpiolib.
The main thing is that all of this has to be driven/controlled/enabled by the gpio_chip/irq_chip driver itself, not as some global/blanket feature of the GPIO or IRQ subsystems.
Sure.
Perhaps rather than having the gpio_chip/irq_chip drivers physically implement a function which calls this common code, they could set some flags/data/... in the struct gpio_chip/irq_chip indicating that they desire the core code that implements the error-checking to be enabled.
I think it should more be like a function they can call to flag a GPIO as used for IRQ. Yours, Linus Walleij