Thread (10 messages) 10 messages, 3 authors, 2012-10-28
STALE4963d

Re: [PATCH V3 3/4] Input: pxa27x_keypad direct key may be low active

From: Haojian Zhuang <haojian.zhuang@gmail.com>
Date: 2012-04-02 09:38:01
Also in: linux-arm-kernel

On Sun, Apr 1, 2012 at 10:08 AM, Chao Xie [off-list ref] wrote:
quoted hunk ↗ jump to hunk
KPDK_DK only indicates the pin level of direct key.
So it is related to board, and low level may be active which
indicates that a key is pressed.

Signed-off-by: Chao Xie <redacted>
---
 arch/arm/plat-pxa/include/plat/pxa27x_keypad.h |    2 ++
 drivers/input/keyboard/pxa27x_keypad.c         |   10 +++++++++-
 2 files changed, 11 insertions(+), 1 deletions(-)
diff --git a/arch/arm/plat-pxa/include/plat/pxa27x_keypad.h b/arch/arm/plat-pxa/include/plat/pxa27x_keypad.h
index abcc36e..7ffb16b 100644
--- a/arch/arm/plat-pxa/include/plat/pxa27x_keypad.h
+++ b/arch/arm/plat-pxa/include/plat/pxa27x_keypad.h
@@ -44,6 +44,8 @@ struct pxa27x_keypad_platform_data {
       /* direct keys */
       int             direct_key_num;
       unsigned int    direct_key_map[MAX_DIRECT_KEY_NUM];
+       /* the key output may be low active */
+       int             direct_key_low_active;

       /* rotary encoders 0 */
       int             enable_rotary0;
diff --git a/drivers/input/keyboard/pxa27x_keypad.c b/drivers/input/keyboard/pxa27x_keypad.c
index 5d71720..a60f14e 100644
--- a/drivers/input/keyboard/pxa27x_keypad.c
+++ b/drivers/input/keyboard/pxa27x_keypad.c
@@ -311,7 +311,15 @@ static void pxa27x_keypad_scan_direct(struct pxa27x_keypad *keypad)
       if (pdata->enable_rotary0 || pdata->enable_rotary1)
               pxa27x_keypad_scan_rotary(keypad);

-       new_state = KPDK_DK(kpdk) & keypad->direct_key_mask;
+       /*
+        * The KPDR_DK only output the key pin level, so it relates to board,
+        * and low level may be active.
+        */
+       if (pdata->direct_key_low_active)
+               new_state = ~KPDK_DK(kpdk) & keypad->direct_key_mask;
+       else
+               new_state = KPDK_DK(kpdk) & keypad->direct_key_mask;
+
       bits_changed = keypad->direct_key_state ^ new_state;

       if (bits_changed == 0)
--
1.7.0.4


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Loop Dmitry
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help