[Meego-kernel] [RFC]intel_mid_keypad: Remove Fn key mapping
Jekyll_Lai at wistron.com
Jekyll_Lai at wistron.com
Mon Jan 17 02:06:19 PST 2011
> 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 <jekyll_lai at wistron.com>
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 <jekyll_lai at wistron.com>
---
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
More information about the MeeGo-kernel
mailing list