Input: pxa27x_keypad add choice to set direct_key_mask
authorChao Xie <chao.xie@marvell.com>
Sun, 1 Apr 2012 02:08:04 +0000 (10:08 +0800)
committerHaojian Zhuang <haojian.zhuang@gmail.com>
Fri, 27 Apr 2012 08:50:05 +0000 (16:50 +0800)
Direct keys usage may not start from KP_DKIN0, add a msk option
to configure the specifics for platforms that can skip some keys.

Signed-off-by: Chao Xie <chao.xie@marvell.com>
Signed-off-by: Haojian Zhuang <haojian.zhuang@gmail.com>
arch/arm/plat-pxa/include/plat/pxa27x_keypad.h
drivers/input/keyboard/pxa27x_keypad.c

index 7ffb16b..5ce8d5e 100644 (file)
@@ -46,6 +46,8 @@ struct pxa27x_keypad_platform_data {
        unsigned int    direct_key_map[MAX_DIRECT_KEY_NUM];
        /* the key output may be low active */
        int             direct_key_low_active;
+       /* give board a chance to choose the start direct key */
+       unsigned int    direct_key_mask;
 
        /* rotary encoders 0 */
        int             enable_rotary0;
index a60f14e..7f7b724 100644 (file)
@@ -391,7 +391,14 @@ static void pxa27x_keypad_config(struct pxa27x_keypad *keypad)
        if (pdata->direct_key_num > direct_key_num)
                direct_key_num = pdata->direct_key_num;
 
-       keypad->direct_key_mask = ((1 << direct_key_num) - 1) & ~mask;
+       /*
+        * Direct keys usage may not start from KP_DKIN0, check the platfrom
+        * mask data to config the specific.
+        */
+       if (pdata->direct_key_mask)
+               keypad->direct_key_mask = pdata->direct_key_mask;
+       else
+               keypad->direct_key_mask = ((1 << direct_key_num) - 1) & ~mask;
 
        /* enable direct key */
        if (direct_key_num)