From: Xiangfu Liu <xiangfu.z@gmail.com>
To: linux-input@vger.kernel.org
Subject: make the CtrlR and CtrlL modifier output different keys
Date: Fri, 18 Sep 2009 13:13:17 +0800 [thread overview]
Message-ID: <4AB316ED.80005@gmail.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 299 bytes --]
Hi.
I want make the CtrlR and CtrlL output different keys.
like:
CtrlR + U = 7
CtrlR + U = Control + U.
so I modify the keyboard.c code. attach is the code.
give me some feedback about this patch.
thanks.
--
Xiangfu Liu
Email: xiangfu at qi-hardware dot com
Web: http://www.qi-hardware.com
[-- Attachment #2: 510-Fn-modifier-keys-work.patch --]
[-- Type: text/x-patch, Size: 3440 bytes --]
diff --git a/arch/mips/jz4740/platform.c b/arch/mips/jz4740/platform.c
index 5859589..ddd7d3f 100644
--- a/arch/mips/jz4740/platform.c
+++ b/arch/mips/jz4740/platform.c
@@ -242,11 +242,11 @@ static struct platform_device jz_nand_device = {
* don't define this. the keyboard and keyboard both work
*/
-#define KEY_QI_QI KEY_F13
-#define KEY_QI_UPRED KEY_RIGHTCTRL
+#define KEY_QI_QI KEY_RIGHTCTRL
+#define KEY_QI_UPRED KEY_RIGHTSHIFT
#define KEY_QI_VOLUP KEY_F15
#define KEY_QI_VOLDOWN KEY_F16
-#define KEY_QI_FN KEY_F17
+#define KEY_QI_FN KEY_RIGHTCTRL
static const uint32_t qi_lb60_keymap[] = {
KEY(0, 0, KEY_F1), /* S2 */
diff --git a/drivers/char/defkeymap.map b/drivers/char/defkeymap.map
index 25d05b4..497cfc2 100644
--- a/drivers/char/defkeymap.map
+++ b/drivers/char/defkeymap.map
@@ -113,9 +113,9 @@ keycode 43 = backslash bar
control keycode 43 = Control_backslash
alt keycode 43 = Meta_backslash
keycode 44 = z
- altgr keycode 43 = nine
+ altgr keycode 44 = nine
keycode 45 = x
- altgr keycode 43 = zero
+ altgr keycode 45 = zero
keycode 46 = c
altgr keycode 46 = Hex_C
keycode 47 = v
@@ -133,7 +133,7 @@ keycode 52 = period greater
keycode 53 = slash question
control keycode 53 = Delete
alt keycode 53 = Meta_slash
-keycode 54 = Shift
+keycode 54 = AltGr
keycode 55 = KP_Multiply
keycode 56 = Alt
keycode 57 = space space
@@ -240,7 +240,7 @@ keycode 93 =
keycode 94 =
keycode 95 =
keycode 96 = KP_Enter
-keycode 97 = AltGr
+keycode 97 = Control
keycode 98 = KP_Divide
keycode 99 = Control_backslash
control keycode 99 = Control_backslash
diff --git a/drivers/char/keyboard.c b/drivers/char/keyboard.c
index 737be95..4cdd9ac 100644
--- a/drivers/char/keyboard.c
+++ b/drivers/char/keyboard.c
@@ -121,6 +121,8 @@ struct vt_spawn_console vt_spawn_con = {
.sig = 0,
};
+static int ctrlr = 0;
+
/*
* Variables exported for vt.c
*/
@@ -1133,6 +1135,60 @@ static int emulate_raw(struct vc_data *vc, unsigned int keycode, unsigned char u
}
#endif
+static int qi_keymap(int keysym, int keycode, int up_flag)
+{
+ int ret;
+ ret = keysym;
+
+ if (up_flag && keycode == KEY_RIGHTCTRL) {
+ ctrlr = 0;
+ return ret;
+ }
+
+ if (ctrlr) {
+ switch (keycode) {
+ case KEY_SLASH: /* 0 */
+ ret = 61488;
+ break;
+ case KEY_N: /* 1 */
+ ret = 61489;
+ break;
+ case KEY_M: /* 2 */
+ ret = 61490;
+ break;
+ case KEY_B: /* 3 */
+ ret = 61491;
+ break;
+ case KEY_J: /* 4 */
+ ret = 61492;
+ break;
+ case KEY_K: /* 5 */
+ ret = 61493;
+ break;
+ case KEY_L: /* 6 */
+ ret = 61494;
+ break;
+ case KEY_U: /* 7 */
+ ret = 61495;
+ break;
+ case KEY_I: /* 8 */
+ ret = 61496;
+ break;
+ case KEY_O: /* 9 */
+ ret = 61497;
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (keycode == KEY_RIGHTCTRL) {
+ ctrlr = 1;
+ }
+
+ return ret;
+}
+
static void kbd_rawcode(unsigned char data)
{
struct vc_data *vc = vc_cons[fg_console].d;
@@ -1284,6 +1340,8 @@ static void kbd_keycode(unsigned int keycode, int down, int hw_raw)
if (raw_mode && type != KT_SPEC && type != KT_SHIFT)
return;
+ keysym = qi_keymap(keysym, keycode, !down);
+
(*k_handler[type])(vc, keysym & 0xff, !down);
param.ledstate = kbd->ledflagstate;
next reply other threads:[~2009-09-18 5:13 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-09-18 5:13 Xiangfu Liu [this message]
2009-09-18 6:10 ` make the CtrlR and CtrlL modifier output different keys Dmitry Torokhov
2009-09-18 6:46 ` Xiangfu Liu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4AB316ED.80005@gmail.com \
--to=xiangfu.z@gmail.com \
--cc=linux-input@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).