|
@@ -347,6 +347,7 @@ 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 scancode = -1;
|
|
|
|
|
|
if (event == SONYPI_EVENT_FNKEY_RELEASED ||
|
|
|
event == SONYPI_EVENT_ANYBUTTON_RELEASED) {
|
|
@@ -380,8 +381,8 @@ static void sony_laptop_report_input_event(u8 event)
|
|
|
dprintk("sony_laptop_report_input_event, event not known: %d\n", event);
|
|
|
break;
|
|
|
}
|
|
|
- if (sony_laptop_input_index[event] != -1) {
|
|
|
- kp.key = sony_laptop_input_keycode_map[sony_laptop_input_index[event]];
|
|
|
+ if ((scancode = sony_laptop_input_index[event]) != -1) {
|
|
|
+ kp.key = sony_laptop_input_keycode_map[scancode];
|
|
|
if (kp.key != KEY_UNKNOWN)
|
|
|
kp.dev = key_dev;
|
|
|
}
|
|
@@ -389,9 +390,11 @@ static void sony_laptop_report_input_event(u8 event)
|
|
|
}
|
|
|
|
|
|
if (kp.dev) {
|
|
|
+ /* if we have a scancode we emit it so we can always
|
|
|
+ remap the key */
|
|
|
+ if (scancode != -1)
|
|
|
+ input_event(kp.dev, EV_MSC, MSC_SCAN, scancode);
|
|
|
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);
|
|
|
|
|
|
/* schedule key release */
|
|
@@ -466,7 +469,7 @@ static int sony_laptop_setup_input(struct acpi_device *acpi_device)
|
|
|
jog_dev->name = "Sony Vaio Jogdial";
|
|
|
jog_dev->id.bustype = BUS_ISA;
|
|
|
jog_dev->id.vendor = PCI_VENDOR_ID_SONY;
|
|
|
- key_dev->dev.parent = &acpi_device->dev;
|
|
|
+ jog_dev->dev.parent = &acpi_device->dev;
|
|
|
|
|
|
input_set_capability(jog_dev, EV_KEY, BTN_MIDDLE);
|
|
|
input_set_capability(jog_dev, EV_REL, REL_WHEEL);
|