gpio: aspeed: Add debounce support
authorAndrew Jeffery <andrew@aj.id.au>
Fri, 7 Apr 2017 12:59:01 +0000 (22:29 +0930)
committerLinus Walleij <linus.walleij@linaro.org>
Mon, 24 Apr 2017 12:49:53 +0000 (14:49 +0200)
commit5ae4cb94b3133d00857bb2909dae779782db40cb
treedb147b3a31d25174bc443168db106511b9a4b5ab
parent9d7163f5167fa60e71071ab6dcb60da0f7230beb
gpio: aspeed: Add debounce support

Each GPIO in the Aspeed GPIO controller can choose one of four input
debounce states: to disable debouncing for an input, or select from one
of three programmable debounce timer values. Each GPIO in a
four-bank-set is assigned one bit in each of two debounce configuration
registers dedicated to the set, and selects a debounce state by
configuring the two bits to select one of the four options.

The limitation on debounce timer values is managed by mapping offsets
onto a configured timer value and keeping count of the number of users
a timer has. Timer values are configured on a first-come-first-served
basis.

A small twist in the hardware design is that the debounce configuration
register numbering is reversed with respect to the binary representation
of the debounce timer of interest (i.e. debounce register 1 represents
bit 1, and debounce register 2 represents bit 0 of the timer numbering).

Tested on an AST2500EVB with additional inspection under QEMU's
romulus-bmc machine.

Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/gpio/gpio-aspeed.c