> 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
