Dell Vostro 3360 multimedia keys

From: Oleksandr Natalenko
Date: Mon Nov 20 2017 - 10:08:49 EST


Hi.

I've got Dell Vostro 3360 with extra multimedia keys as shown here [1], but
have no luck to get them working.

I've modified dell_wmi_smbios_list structure in drivers/platform/x86/dell-
wmi.c adding new entry:

===
84 {
85 .callback = dmi_matched,
86 .ident = "Dell Vostro 3360",
87 .matches = {
88 DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
89 DMI_MATCH(DMI_PRODUCT_NAME, "Vostro 3360"),
90 },
91 },
===

While pressing keys "1" and/or "2" I get the following notice in dmesg:

===
Nov 20 15:53:35 spock kernel: dell_wmi: Unknown key with type 0x0000 and code
0xe0f0 pressed
===

(it is the same for both keys)

While pressing key "3" I get the following:

===
Nov 20 15:36:51 spock kernel: atkbd serio0: Unknown key pressed (translated
set 2, code 0x60 on isa0060/serio0).
Nov 20 15:36:51 spock kernel: atkbd serio0: Use 'setkeycodes 60 <keycode>' to
make it known.
===

Here is what I've found in DSDT:

===
Method (_Q70, 0, NotSerialized) // _Qxx: EC Query
{
P8XH (Zero, 0x70)
Notify (MBT1, 0x80) // Status Change
^^^^AMW0.INF0 = 0x04
^^^^AMW0.INF1 = Zero
^^^^AMW0.INF2 = 0xE0F0
^^^^AMW0.INF3 = One
Notify (AMW0, 0xD0) // Hardware-Specific
}

Method (_QAF, 0, NotSerialized) // _Qxx: EC Query
{
P8XH (Zero, 0xAF)
Notify (MBT, 0x80) // Status Change
^^^^AMW0.INF0 = 0x04
^^^^AMW0.INF1 = Zero
^^^^AMW0.INF2 = 0xE0F0
^^^^AMW0.INF3 = 0x02
Notify (AMW0, 0xD0) // Hardware-Specific
}
===

These are the only 2 records that contain 0xe0f0 sequence, and if they
correspond to first two multimedia keys, as you can see they differ only in
.INF3 field. Unfortunately, I do not know what it might mean.

I was monitoring /proc/interrupts file and noticed that values here:

===
9: 430 293 65 24 IO-APIC 9-fasteoi acpi
===

are incremented by one on each key press. Also, if i press key "3" (the one
that generates different message in kernel log), the following interrupt is
fired too:

===
1: 646 6391 358 487 IO-APIC 1-edge i8042
===

Running evtest, I'm able to catch some output while pressing key "3":

===
Event: time 1511189973.016907, type 4 (EV_MSC), code 4 (MSC_SCAN), value e025
Event: time 1511189973.016907, type 1 (EV_KEY), code 203 (KEY_PROG4), value 1
Event: time 1511189973.016907, -------------- SYN_REPORT ------------
Event: time 1511189973.016942, type 1 (EV_KEY), code 203 (KEY_PROG4), value 0
Event: time 1511189973.016942, -------------- SYN_REPORT ------------
===

I think this corresponds to what I see in drivers/platform/x86/dell-wmi.c file
here:

===
143 /* Dell Instant Launch key */
144 { KE_KEY, 0xe025, { KEY_PROG4 } },
===

Other two keys do not produce any evtest output.

Here is acpidump output: [2]
Here is decompiled DSDT: [3]

Also, I've raised this question before a couple of times (for instance, [4]),
but unfortunately got no result :(.

Could you please help me in fixing multimedia keys?

Thanks.

[1] http://beta.hstor.org/files/c3b/a26/628/
c3ba26628409486f8b9ae16d97be7d21.jpg
[2] https://gist.github.com/7c04035ba2a3f0e5501af83efdb1456d
[3] https://gist.github.com/83687126c46417b5bc0b48529de52460
[4] https://www.spinics.net/lists/platform-driver-x86/msg05251.html