sony-laptop driver: Volume keys on Sony Vaio TX3 don't work

From: John Hughes
Date: Sun Oct 16 2011 - 07:18:05 EST


Even though sony-laptop has code to handle the volume-up/volume-down keys they don't work. Pressing volume-down gets treated as SONYPI_EVENT_PKEY_P1 and volume-up as SONYPI_EVENT_PKEY_P2.

This is because volume-down generates event 0x01 with data mask 0x05 and although the sonypi_volumeev table exists to handle this the table sonypi_pkeyev steals the event before it gets handled.

Re-ordering the entries in the table type3_events and fixing the bug in sonypi_volumeev (up and down were inverted) makes the volume keys work.

See attached patch.

The two remaining problems are:

1. the EJECT key is mapped to FN_E
2. the MUTE key (event 5f, 31) is mapped to nothing. (Not to important as it turns the speaker off in hardware). --- drivers/platform/x86/sony-laptop.c.orig 2009-12-03 04:51:21.000000000 +0100
+++ drivers/platform/x86/sony-laptop.c 2011-10-16 12:58:07.000000000 +0200
@@ -1576,8 +1576,8 @@

/* The set of possible volume events */
static struct sonypi_event sonypi_volumeev[] = {
- { 0x01, SONYPI_EVENT_VOLUME_INC_PRESSED },
- { 0x02, SONYPI_EVENT_VOLUME_DEC_PRESSED },
+ { 0x01, SONYPI_EVENT_VOLUME_DEC_PRESSED },
+ { 0x02, SONYPI_EVENT_VOLUME_INC_PRESSED },
{ 0, 0 }
};

@@ -1624,10 +1624,10 @@
{ 0x31, SONYPI_MEMORYSTICK_MASK, sonypi_memorystickev },
{ 0x41, SONYPI_BATTERY_MASK, sonypi_batteryev },
{ 0x31, SONYPI_PKEY_MASK, sonypi_pkeyev },
+ { 0x05, SONYPI_PKEY_MASK, sonypi_volumeev },
{ 0x05, SONYPI_PKEY_MASK, sonypi_pkeyev },
{ 0x05, SONYPI_ZOOM_MASK, sonypi_zoomev },
{ 0x05, SONYPI_CAPTURE_MASK, sonypi_captureev },
- { 0x05, SONYPI_PKEY_MASK, sonypi_volumeev },
{ 0x05, SONYPI_PKEY_MASK, sonypi_brightnessev },
{ 0 },
};