> Alan:
> I found Dmitry didn't think it's a good idea that having a different
> Fn key mapping in keypad driver. There is more discussion in the
> thread "input: tegra-kbc - Add tegra keyboard driver" which was posted
> in linux-input. However, intel_mid_keypad just took the same way to
> deal with Fn and Numlock. Shall we remove this function for submitting
> to the upstream?
> 
Attach a temporary patch for reviewing.
It might be wrapping up by my email client.


>From 9cd49cb78bf61ebc2b62508a6ad93e2842e2bdf9 Mon Sep 17 00:00:00 2001
From: Jekyll Lai <[email protected]>
Date: Mon, 17 Jan 2011 17:19:39 +0800
Subject: [PATCH] Remove NumLK and Fn key mapping

Just keep one keypad matrix in driver layer; the others key mapping
should be loaded in userspace layer.

Signed-off-by: Jekyll Lai <[email protected]>
---
 drivers/input/keyboard/intel_mid_keypad.c |  101
+----------------------------
 1 files changed, 3 insertions(+), 98 deletions(-)

diff --git a/drivers/input/keyboard/intel_mid_keypad.c
b/drivers/input/keyboard/intel_mid_keypad.c
index b41d50f..7a26242 100644
--- a/drivers/input/keyboard/intel_mid_keypad.c
+++ b/drivers/input/keyboard/intel_mid_keypad.c
@@ -132,33 +132,6 @@ static unsigned int
mrst_keycode[MAX_MATRIX_KEY_NUM] = {
        0, KEY_RIGHTSHIFT, KEY_ENTER, 0, KEY_RIGHT, 0, 0, 0,
 };
 
-/* NumLk key mapping */
-static unsigned int mrst_keycode_numlck[MAX_MATRIX_KEY_NUM] = {
-       KEY_F, KEY_D, KEY_E, KEY_GRAVE, KEY_C, KEY_R, KEY_4, KEY_V,
-       KEY_NUMLOCK, KEY_LEFTCTRL, KEY_Z, KEY_W, KEY_2, KEY_X, KEY_S,
KEY_3,
-       KEY_EQUAL, KEY_N, KEY_H, KEY_KP4, KEY_KP7, KEY_KP0, KEY_KP1,
KEY_KP8,
-       KEY_6, KEY_5, KEY_APOSTROPHE, KEY_G, KEY_T, KEY_SPACE, KEY_B,
KEY_Y,
-       KEY_MINUS, KEY_KPSLASH, KEY_LEFT, KEY_KPMINUS, KEY_KPASTERISK,
-       KEY_DOWN, KEY_UP, KEY_BACKSPACE,
-       KEY_KP3, KEY_KP2, KEY_KP5, KEY_SLASH, KEY_KPDOT, KEY_KP6,
KEY_KP9,
-       KEY_KPPLUS,
-       KEY_Q, KEY_TAB, KEY_ESC, KEY_LEFTSHIFT, KEY_CAPSLOCK, KEY_1,
KEY_FN,
-       KEY_A,
-       0, KEY_RIGHTSHIFT, KEY_ENTER, 0, KEY_RIGHT, 0, 0, 0,
-};
-
-/* Fn key mapping */
-static unsigned int mrst_keycode_fn[MAX_MATRIX_KEY_NUM] = {
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       KEY_LEFTBRACE, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, KEY_HOME, 0, 0, KEY_PAGEDOWN, KEY_PAGEUP, 0,
-       0, 0, 0, KEY_RIGHTBRACE, KEY_LEFTBRACE, 0, 0, KEY_RIGHTBRACE,
-       0, 0, 0, KEY_LEFTSHIFT, 0, 0, KEY_FN, 0,
-       0, KEY_RIGHTSHIFT, 0, 0, KEY_END, 0, 0, 0,
-};
-
 /* direct key map */
 static unsigned int mrst_direct_keycode[MAX_DIRECT_KEY_NUM] = {
        KEY_VOLUMEUP, KEY_VOLUMEDOWN, KEY_HALFSHUTTER, KEY_FULLSHUTTER,
@@ -230,16 +203,8 @@ static void mrst_keypad_build_keycode(struct
mrst_keypad *keypad)
        keypad->matrix_key_map_size = MAX_MATRIX_KEY_NUM;
        keypad->debounce_interval = DEBOUNCE_INTERVAL;
 
-       /* three sets of keycode here */
-       if (keypad->fn)
-               memcpy(keypad->matrix_keycodes, mrst_keycode_fn,
-                      sizeof(keypad->matrix_keycodes));
-       else if (keypad->numlck)
-               memcpy(keypad->matrix_keycodes, mrst_keycode_numlck,
-                      sizeof(keypad->matrix_keycodes));
-       else
-               memcpy(keypad->matrix_keycodes, mrst_keycode,
-                      sizeof(keypad->matrix_keycodes));
+       memcpy(keypad->matrix_keycodes, mrst_keycode,
+              sizeof(keypad->matrix_keycodes));
 
        memcpy(keypad->direct_key_map, mrst_direct_keycode,
               sizeof(keypad->direct_key_map));
@@ -272,25 +237,10 @@ static void handle_constant_keypress(struct
mrst_keypad *keypad,
                                     int num, int col, int row,
                                     int state)
 {
-       struct input_dev *dev = keypad->input_dev;
-
        switch (num) {
        case 0:
                if (keypad->fn)
                        keypad->fn = 0;
-               /* Manually release special keys (Fn combinations) */
-               if (test_bit(KEY_LEFTBRACE, dev->key))
-                       input_report_key(dev, KEY_LEFTBRACE, 0);
-               if (test_bit(KEY_RIGHTBRACE, dev->key))
-                       input_report_key(dev, KEY_RIGHTBRACE, 0);
-               if (test_bit(KEY_HOME, dev->key))
-                       input_report_key(dev, KEY_RIGHTBRACE, 0);
-               if (test_bit(KEY_END, dev->key))
-                       input_report_key(dev, KEY_END, 0);
-               if (test_bit(KEY_PAGEUP, dev->key))
-                       input_report_key(dev, KEY_RIGHTBRACE, 0);
-               if (test_bit(KEY_PAGEDOWN, dev->key))
-                       input_report_key(dev, KEY_RIGHTBRACE, 0);
 
                return;
 
@@ -298,30 +248,6 @@ static void handle_constant_keypress(struct
mrst_keypad *keypad,
                /* if Fn pressed */
                if (col == 6 && row == 6)
                        keypad->fn = 1;
-               /* key '[' */
-               else if ((col == 0 && row == 2) && state) {
-                       keypad->fn = 0;
-                       set_bit(KEY_EQUAL, dev->key);
-                       dev->repeat_key = KEY_EQUAL;
-               }
-               /* key ']' */
-               else if ((col == 3 && row == 5) && state) {
-                       keypad->fn = 0;
-                       set_bit(KEY_SLASH, dev->key);
-                       dev->repeat_key = KEY_SLASH;
-               }
-               /* key '{' */
-               else if ((col == 4 && row == 5) && state) {
-                       keypad->fn = 0;
-                       set_bit(KEY_COMMA, dev->key);
-                       dev->repeat_key = KEY_COMMA;
-               }
-               /* key '}' */
-               else if ((col == 7 && row == 5) && state) {
-                       keypad->fn = 0;
-                       set_bit(KEY_DOT, dev->key);
-                       dev->repeat_key = KEY_DOT;
-               }
 
                return;
        default:
@@ -385,34 +311,13 @@ static void mrst_keypad_scan_matrix(struct
mrst_keypad *keypad)
                new_state[6] = kpasmkp3 & KPASMKP_MKC_MASK;
                new_state[7] = (kpasmkp3 >> 16) & KPASMKP_MKC_MASK;
 
-               /* if Fn is pressed, all SHIFT is ignored, except when {
-                * or } is pressed */
+               /* if Fn is pressed */
                if (new_state[6] & 0x40) {
                        keypad->fn = 1;
-                       new_state[3] &= ~0x40;
-                       new_state[1] &= ~0x80;
-               }
-
-               if (keypad->fn == 1) {
-                       /* if { or } pressed */
-                       if ((new_state[4] & 0x20) || (new_state[7] &
0x20)) {
-                               /* as if LEFTSHIFT is pressed */
-                               new_state[3] |= 0x40;
-                               /* as if Fn not pressed */
-                               new_state[6] &= ~0x40;
-                       }
-                       /* if [ or ] pressed */
-                       if ((new_state[0] & 0x04) || (new_state[3] &
0x20))
-                               /* as if Fn not pressed */
-                               new_state[6] &= ~0x40;
                }
        }
 
-
 scan:
-       /* re-build keycode */
-       mrst_keypad_build_keycode(keypad);
-
        for (col = 0; col < keypad->matrix_key_cols; col++) {
                uint32_t bits_changed;
 
-- 
1.7.0.4


_______________________________________________
MeeGo-kernel mailing list
[email protected]
http://lists.meego.com/listinfo/meego-kernel

Reply via email to