[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