From: Mattia Dongili <malattia@linux.it>
To: Len Brown <lenb@kernel.org>
Cc: linux-acpi@vger.kernel.org, Stelian Pop <stelian@popies.net>,
Richard Hughes <richard@hughsie.com>,
Dmitry Torokhov <dmitry.torokhov@gmail.com>,
Mattia Dongili <malattia@linux.it>
Subject: [PATCH 5/7] Make the driver use MSC_SCAN and a setkeycode and getkeycode key table.
Date: Mon, 16 Jul 2007 02:34:37 +0900 [thread overview]
Message-ID: <11845208791511-git-send-email-malattia@linux.it> (raw)
In-Reply-To: <11845208794064-git-send-email-malattia@linux.it>
From: Richard Hughes <richard@hughsie.com>
Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Richard Hughes <richard@hughsie.com>
Signed-off-by: Mattia Dongili <malattia@linux.it>
---
drivers/misc/sony-laptop.c | 134 +++++++++++++++++++++++++++----------------
1 files changed, 84 insertions(+), 50 deletions(-)
diff --git a/drivers/misc/sony-laptop.c b/drivers/misc/sony-laptop.c
index 4b15f0c..916b477 100644
--- a/drivers/misc/sony-laptop.c
+++ b/drivers/misc/sony-laptop.c
@@ -143,44 +143,69 @@ struct sony_laptop_keypress {
};
/* Correspondance table between sonypi events and input layer events */
-static struct {
- int sonypiev;
- int inputev;
-} sony_laptop_inputkeys[] = {
- { SONYPI_EVENT_CAPTURE_PRESSED, KEY_CAMERA },
- { SONYPI_EVENT_FNKEY_ONLY, KEY_FN },
- { SONYPI_EVENT_FNKEY_ESC, KEY_FN_ESC },
- { SONYPI_EVENT_FNKEY_F1, KEY_FN_F1 },
- { SONYPI_EVENT_FNKEY_F2, KEY_FN_F2 },
- { SONYPI_EVENT_FNKEY_F3, KEY_FN_F3 },
- { SONYPI_EVENT_FNKEY_F4, KEY_FN_F4 },
- { SONYPI_EVENT_FNKEY_F5, KEY_FN_F5 },
- { SONYPI_EVENT_FNKEY_F6, KEY_FN_F6 },
- { SONYPI_EVENT_FNKEY_F7, KEY_FN_F7 },
- { SONYPI_EVENT_FNKEY_F8, KEY_FN_F8 },
- { SONYPI_EVENT_FNKEY_F9, KEY_FN_F9 },
- { SONYPI_EVENT_FNKEY_F10, KEY_FN_F10 },
- { SONYPI_EVENT_FNKEY_F11, KEY_FN_F11 },
- { SONYPI_EVENT_FNKEY_F12, KEY_FN_F12 },
- { SONYPI_EVENT_FNKEY_1, KEY_FN_1 },
- { SONYPI_EVENT_FNKEY_2, KEY_FN_2 },
- { SONYPI_EVENT_FNKEY_D, KEY_FN_D },
- { SONYPI_EVENT_FNKEY_E, KEY_FN_E },
- { SONYPI_EVENT_FNKEY_F, KEY_FN_F },
- { SONYPI_EVENT_FNKEY_S, KEY_FN_S },
- { SONYPI_EVENT_FNKEY_B, KEY_FN_B },
- { SONYPI_EVENT_BLUETOOTH_PRESSED, KEY_BLUE },
- { SONYPI_EVENT_BLUETOOTH_ON, KEY_BLUE },
- { SONYPI_EVENT_PKEY_P1, KEY_PROG1 },
- { SONYPI_EVENT_PKEY_P2, KEY_PROG2 },
- { SONYPI_EVENT_PKEY_P3, KEY_PROG3 },
- { SONYPI_EVENT_BACK_PRESSED, KEY_BACK },
- { SONYPI_EVENT_HELP_PRESSED, KEY_HELP },
- { SONYPI_EVENT_ZOOM_PRESSED, KEY_ZOOM },
- { SONYPI_EVENT_WIRELESS_ON, KEY_WLAN },
- { SONYPI_EVENT_WIRELESS_OFF, KEY_WLAN },
- { SONYPI_EVENT_THUMBPHRASE_PRESSED, BTN_THUMB },
- { 0, 0 },
+static int sony_laptop_input_keycode_map[] = {
+ KEY_RESERVED, /* no event... */
+ KEY_RESERVED, /* SONYPI_EVENT_JOGDIAL_DOWN */
+ KEY_RESERVED, /* SONYPI_EVENT_JOGDIAL_UP */
+ KEY_RESERVED, /* SONYPI_EVENT_JOGDIAL_DOWN_PRESSED */
+ KEY_RESERVED, /* SONYPI_EVENT_JOGDIAL_UP_PRESSED */
+ KEY_RESERVED, /* SONYPI_EVENT_JOGDIAL_PRESSED */
+ KEY_RESERVED, /* SONYPI_EVENT_JOGDIAL_RELEASED */
+ KEY_CAMERA, /* SONYPI_EVENT_CAPTURE_PRESSED */
+ KEY_RESERVED, /* SONYPI_EVENT_CAPTURE_RELEASED */
+ KEY_RESERVED, /* SONYPI_EVENT_CAPTURE_PARTIALPRESSED */
+ KEY_RESERVED, /* SONYPI_EVENT_CAPTURE_PARTIALRELEASED */
+ KEY_FN_ESC, /* SONYPI_EVENT_FNKEY_ESC */
+ KEY_FN_F1, /* SONYPI_EVENT_FNKEY_F1 */
+ KEY_FN_F2, /* SONYPI_EVENT_FNKEY_F2 */
+ KEY_FN_F3, /* SONYPI_EVENT_FNKEY_F3 */
+ KEY_FN_F4, /* SONYPI_EVENT_FNKEY_F4 */
+ KEY_FN_F5, /* SONYPI_EVENT_FNKEY_F5 */
+ KEY_FN_F6, /* SONYPI_EVENT_FNKEY_F6 */
+ KEY_FN_F7, /* SONYPI_EVENT_FNKEY_F7 */
+ KEY_FN_F8, /* SONYPI_EVENT_FNKEY_F8 */
+ KEY_FN_F9, /* SONYPI_EVENT_FNKEY_F9 */
+ KEY_FN_F10, /* SONYPI_EVENT_FNKEY_F10 */
+ KEY_FN_F11, /* SONYPI_EVENT_FNKEY_F11 */
+ KEY_FN_F12, /* SONYPI_EVENT_FNKEY_F12 */
+ KEY_FN_F1, /* SONYPI_EVENT_FNKEY_1 */
+ KEY_FN_F2, /* SONYPI_EVENT_FNKEY_2 */
+ KEY_FN_D, /* SONYPI_EVENT_FNKEY_D */
+ KEY_FN_E, /* SONYPI_EVENT_FNKEY_E */
+ KEY_FN_F, /* SONYPI_EVENT_FNKEY_F */
+ KEY_FN_S, /* SONYPI_EVENT_FNKEY_S */
+ KEY_FN_B, /* SONYPI_EVENT_FNKEY_B */
+ KEY_BLUE, /* SONYPI_EVENT_BLUETOOTH_PRESSED */
+ KEY_PROG1, /* SONYPI_EVENT_PKEY_P1 */
+ KEY_PROG2, /* SONYPI_EVENT_PKEY_P2 */
+ KEY_PROG3, /* SONYPI_EVENT_PKEY_P3 */
+ KEY_BACK, /* SONYPI_EVENT_BACK_PRESSED */
+ KEY_RESERVED, /* SONYPI_EVENT_LID_CLOSED */
+ KEY_RESERVED, /* SONYPI_EVENT_LID_OPENED */
+ KEY_BLUE, /* SONYPI_EVENT_BLUETOOTH_ON */
+ KEY_BLUE, /* SONYPI_EVENT_BLUETOOTH_OFF */
+ KEY_HELP, /* SONYPI_EVENT_HELP_PRESSED */
+ KEY_FN, /* SONYPI_EVENT_FNKEY_ONLY */
+ KEY_RESERVED, /* SONYPI_EVENT_JOGDIAL_FAST_DOWN */
+ KEY_RESERVED, /* SONYPI_EVENT_JOGDIAL_FAST_UP */
+ KEY_RESERVED, /* SONYPI_EVENT_JOGDIAL_FAST_DOWN_PRESSED */
+ KEY_RESERVED, /* SONYPI_EVENT_JOGDIAL_FAST_UP_PRESSED */
+ KEY_RESERVED, /* SONYPI_EVENT_JOGDIAL_VFAST_DOWN */
+ KEY_RESERVED, /* SONYPI_EVENT_JOGDIAL_VFAST_UP */
+ KEY_RESERVED, /* SONYPI_EVENT_JOGDIAL_VFAST_DOWN_PRESSED */
+ KEY_RESERVED, /* SONYPI_EVENT_JOGDIAL_VFAST_UP_PRESSED */
+ KEY_ZOOM, /* SONYPI_EVENT_ZOOM_PRESSED */
+ BTN_THUMB, /* SONYPI_EVENT_THUMBPHRASE_PRESSED */
+ KEY_RESERVED, /* SONYPI_EVENT_MEYE_FACE */
+ KEY_RESERVED, /* SONYPI_EVENT_MEYE_OPPOSITE */
+ KEY_RESERVED, /* SONYPI_EVENT_MEMORYSTICK_INSERT */
+ KEY_RESERVED, /* SONYPI_EVENT_MEMORYSTICK_EJECT */
+ KEY_RESERVED, /* SONYPI_EVENT_ANYBUTTON_RELEASED */
+ KEY_RESERVED, /* SONYPI_EVENT_BATTERY_INSERT */
+ KEY_RESERVED, /* SONYPI_EVENT_BATTERY_REMOVE */
+ KEY_RESERVED, /* SONYPI_EVENT_FNKEY_RELEASED */
+ KEY_WLAN, /* SONYPI_EVENT_WIRELESS_ON */
+ KEY_WLAN, /* SONYPI_EVENT_WIRELESS_OFF */
};
/* release buttons after a short delay if pressed */
@@ -204,7 +229,6 @@ static void sony_laptop_report_input_event(u8 event)
struct input_dev *jog_dev = sony_laptop_input.jog_dev;
struct input_dev *key_dev = sony_laptop_input.key_dev;
struct sony_laptop_keypress kp = { NULL };
- int i;
if (event == SONYPI_EVENT_FNKEY_RELEASED) {
/* Nothing, not all VAIOs generate this event */
@@ -233,17 +257,20 @@ static void sony_laptop_report_input_event(u8 event)
break;
default:
- for (i = 0; sony_laptop_inputkeys[i].sonypiev; i++)
- if (event == sony_laptop_inputkeys[i].sonypiev) {
- kp.dev = key_dev;
- kp.key = sony_laptop_inputkeys[i].inputev;
- break;
- }
+ if (event > ARRAY_SIZE (sony_laptop_input_keycode_map)) {
+ dprintk("sony_laptop_report_input_event, event not known: %d\n", event);
+ break;
+ }
+ kp.key = sony_laptop_input_keycode_map[event];
+ if (kp.key != KEY_UNKNOWN)
+ kp.dev = key_dev;
break;
}
if (kp.dev) {
input_report_key(kp.dev, kp.key, 1);
+ /* we emit the scancode so we can always remap the key */
+ input_event(kp.dev, EV_MSC, MSC_SCAN, event);
input_sync(kp.dev);
kfifo_put(sony_laptop_input.fifo,
(unsigned char *)&kp, sizeof(kp));
@@ -298,11 +325,18 @@ static int sony_laptop_setup_input(void)
key_dev->id.vendor = PCI_VENDOR_ID_SONY;
/* Initialize the Input Drivers: special keys */
- key_dev->evbit[0] = BIT(EV_KEY);
- for (i = 0; sony_laptop_inputkeys[i].sonypiev; i++)
- if (sony_laptop_inputkeys[i].inputev)
- set_bit(sony_laptop_inputkeys[i].inputev,
- key_dev->keybit);
+ set_bit(EV_KEY, key_dev->evbit);
+ set_bit(EV_MSC, key_dev->evbit);
+ set_bit(MSC_SCAN, key_dev->mscbit);
+ key_dev->keycodesize = sizeof(sony_laptop_input_keycode_map[0]);
+ key_dev->keycodemax = ARRAY_SIZE(sony_laptop_input_keycode_map);
+ key_dev->keycode = &sony_laptop_input_keycode_map;
+ for (i = 0; i < ARRAY_SIZE(sony_laptop_input_keycode_map); i++) {
+ if (sony_laptop_input_keycode_map[i] != KEY_RESERVED) {
+ set_bit(sony_laptop_input_keycode_map[i],
+ key_dev->keybit);
+ }
+ }
error = input_register_device(key_dev);
if (error)
--
1.5.2.3
next prev parent reply other threads:[~2007-07-15 17:35 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-07-15 17:34 [PATCH 0/7] sony-laptop for 2.6.23 (updated) Mattia Dongili
2007-07-15 17:34 ` [PATCH 1/7] sony-laptop: add new SNC handlers Mattia Dongili
2007-07-15 17:34 ` [PATCH 2/7] sony-laptop: map wireless switch events to KEY_WLAN Mattia Dongili
2007-07-15 17:34 ` [PATCH 3/7] Add support for recent Vaios Fn keys (C series for now) Mattia Dongili
2007-07-15 17:34 ` [PATCH 4/7] Invoke _INI for SNC devices that provide it Mattia Dongili
2007-07-15 17:34 ` Mattia Dongili [this message]
2007-07-15 17:34 ` [PATCH 6/7] Add Vaio FE to the special init sequence Mattia Dongili
2007-07-15 17:34 ` [PATCH 7/7] Fix event reading in sony-laptop Mattia Dongili
2007-07-15 21:11 ` [PATCH 5/7] Make the driver use MSC_SCAN and a setkeycode and getkeycode key table Matthew Garrett
2007-07-16 17:06 ` Richard Hughes
2007-07-16 18:09 ` Matthew Garrett
2007-07-17 10:37 ` Richard Hughes
2007-07-17 10:46 ` Matthew Garrett
2007-07-18 11:45 ` Mattia Dongili
2007-07-18 14:28 ` Matthew Garrett
2007-07-18 15:05 ` Dmitry Torokhov
2007-07-18 15:17 ` Richard Hughes
2007-07-18 16:02 ` Dmitry Torokhov
2007-07-18 16:20 ` Richard Hughes
2007-07-18 16:25 ` Matthew Garrett
2007-07-18 16:39 ` Dmitry Torokhov
2007-07-18 16:44 ` Richard Hughes
2007-07-18 16:56 ` Matthew Garrett
2007-07-19 15:51 ` Mattia Dongili
2007-07-16 13:22 ` Dmitry Torokhov
2007-07-18 11:33 ` Mattia Dongili
2007-07-19 17:01 ` Mattia Dongili
2007-07-22 4:36 ` Len Brown
2007-07-18 11:45 ` Mattia Dongili
2007-07-22 4:37 ` [PATCH 0/7] sony-laptop for 2.6.23 (updated) Len Brown
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=11845208791511-git-send-email-malattia@linux.it \
--to=malattia@linux.it \
--cc=dmitry.torokhov@gmail.com \
--cc=lenb@kernel.org \
--cc=linux-acpi@vger.kernel.org \
--cc=richard@hughsie.com \
--cc=stelian@popies.net \
/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