Re: GPIO and interrupt

Ahmad Fatoum <[email protected]>
Newsgroups org.kernelnewbies.kernelnewbies
Message-ID <[email protected]>
Hello Tony,

On 26.07.23 12:10, Tony He wrote:
> Hi,
> 
> I'm writing button driver. The button is based on GPIO.When the button
> is pressed or released, the interrupt is generated. According to the
> GPIO value(1 or 0) , I can know which action is taken(pressed or
> released).
> However, a question occurred to me. Do I need to consider when to get
> the GPIO value? I mean is it possible that GPIO value will be changed
> caused by another interrupt when I get the GPIO value in top or bottom
> half
> of first interrupt? I know the CPU is fast and pushing/releasing
> button is slow, so it should not happen in practice. But let's just
> consider this case in theory. You can assume the button is pushed or
> released very very fast.

This is not only a theoretical issue. The transition from button being
pressed to unpressed and back is not noise free, so a naive translation
of IRQ/GPIO state to input events may not be sufficient.

Dealing with this is called debouncing and involves taking multiple
samples before signalling the input event.

> Seems that GPIO interrupt is special comparing with other device with
> cache. There is no cache to store data(GPIO value) for GPIO. Right?
> Can someone help to clarify this question? Thanks a lot.

IRQ handlers have a second argument with a pointer to device specific data.
You can store information there and many drivers do so. You need to take
care that the data isn't accessed concurrently though, e.g. via a spinlock.

You can see how all this is implemented in the Linux gpio_keys driver.

Cheers,
Ahmad

> 
> Tony
> 
> _______________________________________________
> Kernelnewbies mailing list
> [email protected]
> https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
> 

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |


_______________________________________________
Kernelnewbies mailing list
[email protected]
https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.