• Alberto Panizzo's avatar
    Input: add imx-keypad driver to support the IMX Keypad Port · 76cdc083
    Alberto Panizzo authored
    The IMX family of Application Processors is shipped with a Keypad Port
    supported by this driver.
    
    The peripheral can control up to an 8x8 matrix key pad where all the
    scanning is done via software.  The hardware provides two interrupts:
    one for key presses (KDI) and one for all key releases (KRI). There is
    also a simple circuit for glitch reduction (said for synchronization)
    made by two series of 3 D-latches clocked by the keypad-clock that
    stabilize the interrupts sources. KDI and KRI are fired only if the
    respective conditions are maintained for at last 4 keypad-clock cycle.
    
    Since those circuits are poor for a correct debounce process (the
    keypad-clock frequency is 32K and bounces longer than 94us are not
    masked) the driver, when an interrupt arrives, samples the matrix
    with a period of 10ms until the readins are stable for
    IMX_KEYPAD_SCANS_FOR_STABILITY times (currently set at 3). After
    getting stable result appropriate events are sent through the input
    stack.
    
    If some keys are maintained pressed, the driver continues to scan
    the matrix with a longer period (60ms) to catch possible multiple
    key presses without overloading the cpu. This process ends when all
    keys are released.
    
    This driver is tested to build in kernel or as a module and follow
    the specification of Freescale Application processors:
    i.MX25 i.MX27 i.MX31 i.MX35 i.MX51 especially tested on i.MX31.
    Signed-off-by: default avatarAlberto Panizzo <maramaopercheseimorto@gmail.com>
    Signed-off-by: default avatarDmitry Torokhov <dtor@mail.ru>
    76cdc083
imx_keypad.c 16 KB