diff options
author | Eric Piel <eric.piel@tremplin-utc.net> | 2007-04-12 01:32:41 -0400 |
---|---|---|
committer | Dmitry Torokhov <dtor@insightbb.com> | 2007-04-12 01:32:41 -0400 |
commit | 7b0a4cd7601774d1312f477a879f86b0968880fd (patch) | |
tree | dc2027782067e4a4b819e2100d70c793fc2a2649 /drivers | |
parent | 6480e2a275ff8ff48ae23a011616fcf819ed7a4e (diff) |
Input: wistron - introduce generic keymap
It turns out that the keymaps in the wistron driver are almost the
same, the main difference being some keys which may not exist and
leds which might not be present. Therefore it's possible to write
a generic keymap which would allow the use of an unknown keyboard
with little drawbacks. The user can select it specifying the parameter
"keymap=generic".
Signed-off-by: Eric Piel <eric.piel@tremplin-utc.net>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/input/misc/wistron_btns.c | 42 |
1 files changed, 40 insertions, 2 deletions
diff --git a/drivers/input/misc/wistron_btns.c b/drivers/input/misc/wistron_btns.c index 47de377330b8..b9ef1dfc9a07 100644 --- a/drivers/input/misc/wistron_btns.c +++ b/drivers/input/misc/wistron_btns.c | |||
@@ -58,7 +58,7 @@ MODULE_PARM_DESC(force, "Load even if computer is not in database"); | |||
58 | 58 | ||
59 | static char *keymap_name; /* = NULL; */ | 59 | static char *keymap_name; /* = NULL; */ |
60 | module_param_named(keymap, keymap_name, charp, 0); | 60 | module_param_named(keymap, keymap_name, charp, 0); |
61 | MODULE_PARM_DESC(keymap, "Keymap name, if it can't be autodetected"); | 61 | MODULE_PARM_DESC(keymap, "Keymap name, if it can't be autodetected [generic, 1557/MS2141]"); |
62 | 62 | ||
63 | static struct platform_device *wistron_device; | 63 | static struct platform_device *wistron_device; |
64 | 64 | ||
@@ -568,6 +568,42 @@ static struct key_entry keymap_wistron_md96500[] = { | |||
568 | { KE_END, FE_UNTESTED } | 568 | { KE_END, FE_UNTESTED } |
569 | }; | 569 | }; |
570 | 570 | ||
571 | static struct key_entry keymap_wistron_generic[] = { | ||
572 | { KE_KEY, 0x01, {KEY_HELP} }, | ||
573 | { KE_KEY, 0x02, {KEY_CONFIG} }, | ||
574 | { KE_KEY, 0x03, {KEY_POWER} }, | ||
575 | { KE_KEY, 0x05, {KEY_SWITCHVIDEOMODE} }, /* Display selection */ | ||
576 | { KE_KEY, 0x06, {KEY_DISPLAYTOGGLE} }, /* Display on/off */ | ||
577 | { KE_KEY, 0x08, {KEY_MUTE} }, | ||
578 | { KE_KEY, 0x11, {KEY_PROG1} }, | ||
579 | { KE_KEY, 0x12, {KEY_PROG2} }, | ||
580 | { KE_KEY, 0x13, {KEY_PROG3} }, | ||
581 | { KE_KEY, 0x14, {KEY_MAIL} }, | ||
582 | { KE_KEY, 0x15, {KEY_WWW} }, | ||
583 | { KE_KEY, 0x20, {KEY_VOLUMEUP} }, | ||
584 | { KE_KEY, 0x21, {KEY_VOLUMEDOWN} }, | ||
585 | { KE_KEY, 0x22, {KEY_REWIND} }, | ||
586 | { KE_KEY, 0x23, {KEY_FORWARD} }, | ||
587 | { KE_KEY, 0x24, {KEY_PLAYPAUSE} }, | ||
588 | { KE_KEY, 0x25, {KEY_STOPCD} }, | ||
589 | { KE_KEY, 0x31, {KEY_MAIL} }, | ||
590 | { KE_KEY, 0x36, {KEY_WWW} }, | ||
591 | { KE_KEY, 0x37, {KEY_DISPLAYTOGGLE} }, /* Display on/off */ | ||
592 | { KE_KEY, 0x40, {KEY_WLAN} }, | ||
593 | { KE_KEY, 0x49, {KEY_CONFIG} }, | ||
594 | { KE_SW, 0x4a, {.sw = {SW_LID, 1}} }, /* lid close */ | ||
595 | { KE_SW, 0x4b, {.sw = {SW_LID, 0}} }, /* lid open */ | ||
596 | { KE_KEY, 0x6a, {KEY_CONFIG} }, | ||
597 | { KE_KEY, 0x6d, {KEY_POWER} }, | ||
598 | { KE_KEY, 0x71, {KEY_STOPCD} }, | ||
599 | { KE_KEY, 0x72, {KEY_PLAYPAUSE} }, | ||
600 | { KE_KEY, 0x74, {KEY_REWIND} }, | ||
601 | { KE_KEY, 0x78, {KEY_FORWARD} }, | ||
602 | { KE_WIFI, 0x30 }, | ||
603 | { KE_BLUETOOTH, 0x44 }, | ||
604 | { KE_END, 0 } | ||
605 | }; | ||
606 | |||
571 | /* | 607 | /* |
572 | * If your machine is not here (which is currently rather likely), please send | 608 | * If your machine is not here (which is currently rather likely), please send |
573 | * a list of buttons and their key codes (reported when loading this module | 609 | * a list of buttons and their key codes (reported when loading this module |
@@ -886,15 +922,17 @@ static struct dmi_system_id dmi_ids[] __initdata = { | |||
886 | 922 | ||
887 | static int __init select_keymap(void) | 923 | static int __init select_keymap(void) |
888 | { | 924 | { |
925 | dmi_check_system(dmi_ids); | ||
889 | if (keymap_name != NULL) { | 926 | if (keymap_name != NULL) { |
890 | if (strcmp (keymap_name, "1557/MS2141") == 0) | 927 | if (strcmp (keymap_name, "1557/MS2141") == 0) |
891 | keymap = keymap_wistron_ms2141; | 928 | keymap = keymap_wistron_ms2141; |
929 | else if (strcmp (keymap_name, "generic") == 0) | ||
930 | keymap = keymap_wistron_generic; | ||
892 | else { | 931 | else { |
893 | printk(KERN_ERR "wistron_btns: Keymap unknown\n"); | 932 | printk(KERN_ERR "wistron_btns: Keymap unknown\n"); |
894 | return -EINVAL; | 933 | return -EINVAL; |
895 | } | 934 | } |
896 | } | 935 | } |
897 | dmi_check_system(dmi_ids); | ||
898 | if (keymap == NULL) { | 936 | if (keymap == NULL) { |
899 | if (!force) { | 937 | if (!force) { |
900 | printk(KERN_ERR "wistron_btns: System unknown\n"); | 938 | printk(KERN_ERR "wistron_btns: System unknown\n"); |