Bug 1260455

Summary: Dell AIO WMI hotkeys (dell_wmi_aio) driver does not emit input device events on Dell XPS One 2710
Product: [Fedora] Fedora Reporter: major <major>
Component: kernelAssignee: Kernel Maintainer List <kernel-maint>
Status: CLOSED INSUFFICIENT_DATA QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: low Docs Contact:
Priority: unspecified    
Version: 22CC: gansalmon, itamar, jonathan, kernel-maint, madhu.chinakonda, mchehab
Target Milestone: ---Flags: jforbes: needinfo?
Target Release: ---   
Hardware: x86_64   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2015-11-23 17:18:30 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Attachments:
Description Flags
ACPI DSDT table from /sys/firmware/acpi/tables/DSDT
none
Decompiled dsdt.dat (iasl -d dsdt.dat)
none
Recompiled dsdt.dsl (iasl -tc dsdt.dsl) none

Description major 2015-09-07 01:20:27 UTC
Created attachment 1070784 [details]
ACPI DSDT table from /sys/firmware/acpi/tables/DSDT

My friend's Dell XPS One 2710 (BIOS Revision A12, Bios Build Date 08/27/2013) has lighted control buttons on the lower right of the screen for changing audio volume, screen brightness, video source, and cdrom eject. I verified all tests in single user mode with no other processes grabbing the input device events. I observed problems that are summarized in the following table showing the control, whether or not the control works properly, whether or not the onscreen display works properly, the netlink message, and the input device event:

===============================================================================
control          | works? | onscreen? | netlink message                | event
===============================================================================
volume down      | no     | no        | "PNP0C14:00 000000c1 00000000" | (none)
volume up        | no     | no        | "PNP0C14:00 000000c0 00000000" | (none)
brightness down  | yes    | yes       | (none)                         | (none)
brightness up    | yes    | yes       | (none)                         | (none)
Computer to HDMI | yes    | yes       | "PNP0C14:00 000000c4 00000000" | (none)
HDMI to Computer | yes    | yes       | "PNP0C14:00 000000c5 00000000" | (none)
cdrom eject      | no     | no        | "PNP0C14:00 000000c6 00000000" | (none)
===============================================================================


The following key_entry structure array from the driver "linux-4.1.6/drivers/platform/x86/dell-wmi-aio.c" seems to match the volume keys for "c0" and "c1", but they do not work. The other keys do not seem to match.

static const struct key_entry dell_wmi_aio_keymap[] = {
        { KE_KEY, 0xc0, { KEY_VOLUMEUP } },
        { KE_KEY, 0xc1, { KEY_VOLUMEDOWN } },
        { KE_KEY, 0xe030, { KEY_VOLUMEUP } },
        { KE_KEY, 0xe02e, { KEY_VOLUMEDOWN } },
        { KE_KEY, 0xe020, { KEY_MUTE } },
        { KE_KEY, 0xe027, { KEY_DISPLAYTOGGLE } },
        { KE_KEY, 0xe006, { KEY_BRIGHTNESSUP } },
        { KE_KEY, 0xe005, { KEY_BRIGHTNESSDOWN } },
        { KE_KEY, 0xe00b, { KEY_SWITCHVIDEOMODE } },
        { KE_END, 0 }
};


The following contains commands and responses for diagnosis.


[major@empress ~]$ uname -a
Linux empress.localdomain 4.1.6-200.fc22.x86_64 #1 SMP Mon Aug 17 19:54:31 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux


[root@empress ~]# cat /etc/modprobe.d/custom-wmi.conf
options wmi debug_event=1 debug_dump_wdg=1


[major@empress ~]$ lsmod | grep wmi
dell_wmi_aio           16384  0
sparse_keymap          16384  1 dell_wmi_aio
wmi                    20480  1 dell_wmi_aio


The following evtest command does not produce any events.

[root@empress ~]# evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0:	Power Button
/dev/input/event1:	Power Button
/dev/input/event2:	Video Bus
/dev/input/event3:	Dell Dell KM713 Wireless Keyboard and Mouse
/dev/input/event4:	Dell Dell KM713 Wireless Keyboard and Mouse
/dev/input/event5:	Dell Dell KM713 Wireless Keyboard and Mouse
/dev/input/event6:	Fintek LPC SuperIO Consumer IR Transceiver
/dev/input/event7:	MCE IR Keyboard/Mouse (fintek-cir)
/dev/input/event8:	Dell AIO WMI hotkeys
/dev/input/event9:	HDA Intel PCH Mic
/dev/input/event10:	HDA Intel PCH Headphone
/dev/input/event11:	HDA Intel PCH HDMI/DP,pcm=3
/dev/input/event12:	Laptop_Integrated_Webcam_FHD
Select the device event number [0-12]: 8
Input driver version is 1.0.1
Input device ID: bus 0x19 vendor 0x0 product 0x0 version 0x0
Input device name: "Dell AIO WMI hotkeys"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 113 (KEY_MUTE)
    Event code 114 (KEY_VOLUMEDOWN)
    Event code 115 (KEY_VOLUMEUP)
    Event code 224 (KEY_BRIGHTNESSDOWN)
    Event code 225 (KEY_BRIGHTNESSUP)
    Event code 227 (KEY_SWITCHVIDEOMODE)
    Event code 240 (KEY_UNKNOWN)
    Event code 431 (KEY_DISPLAYTOGGLE)
  Event type 4 (EV_MSC)
    Event code 4 (MSC_SCAN)
Properties:
Testing ... (interrupt to exit)


[root@empress ~]# journalctl -b0 | grep -i wmi
Sep 06 14:50:23 empress.localdomain kernel: wmi: 02314822-307C-4F66-BF0E-48AEAEB26CC8:
Sep 06 14:50:23 empress.localdomain kernel: wmi:         notify_id: C0
Sep 06 14:50:23 empress.localdomain kernel: wmi:         reserved: 00
Sep 06 14:50:23 empress.localdomain kernel: wmi:         instance_count: 1
Sep 06 14:50:23 empress.localdomain kernel: wmi:         flags: 0x8 ACPI_WMI_EVENT
Sep 06 14:50:23 empress.localdomain kernel: wmi: 02314822-307C-4F66-BF0E-48AEAEB26CC8:
Sep 06 14:50:23 empress.localdomain kernel: wmi:         notify_id: C1
Sep 06 14:50:23 empress.localdomain kernel: wmi:         reserved: 00
Sep 06 14:50:23 empress.localdomain kernel: wmi:         instance_count: 1
Sep 06 14:50:23 empress.localdomain kernel: wmi:         flags: 0x8 ACPI_WMI_EVENT
Sep 06 14:50:23 empress.localdomain kernel: wmi: 02314822-307C-4F66-BF0E-48AEAEB26CC8:
Sep 06 14:50:23 empress.localdomain kernel: wmi:         notify_id: C4
Sep 06 14:50:23 empress.localdomain kernel: wmi:         reserved: 00
Sep 06 14:50:23 empress.localdomain kernel: wmi:         instance_count: 1
Sep 06 14:50:23 empress.localdomain kernel: wmi:         flags: 0x8 ACPI_WMI_EVENT
Sep 06 14:50:23 empress.localdomain kernel: wmi: 02314822-307C-4F66-BF0E-48AEAEB26CC8:
Sep 06 14:50:23 empress.localdomain kernel: wmi:         notify_id: C5
Sep 06 14:50:23 empress.localdomain kernel: wmi:         reserved: 00
Sep 06 14:50:23 empress.localdomain kernel: wmi:         instance_count: 1
Sep 06 14:50:23 empress.localdomain kernel: wmi:         flags: 0x8 ACPI_WMI_EVENT
Sep 06 14:50:23 empress.localdomain kernel: wmi: 02314822-307C-4F66-BF0E-48AEAEB26CC8:
Sep 06 14:50:24 empress.localdomain kernel: wmi:         notify_id: C6
Sep 06 14:50:24 empress.localdomain kernel: wmi:         reserved: 00
Sep 06 14:50:24 empress.localdomain kernel: wmi:         instance_count: 1
Sep 06 14:50:24 empress.localdomain kernel: wmi:         flags: 0x8 ACPI_WMI_EVENT
Sep 06 14:50:24 empress.localdomain kernel: wmi: 96E2988F-E24D-49AF-84E2-7F3BF72602CD:
Sep 06 14:50:24 empress.localdomain kernel: wmi:         object_id: AA
Sep 06 14:50:24 empress.localdomain kernel: wmi:         notify_id: 41
Sep 06 14:50:24 empress.localdomain kernel: wmi:         reserved: 41
Sep 06 14:50:24 empress.localdomain kernel: wmi:         instance_count: 1
Sep 06 14:50:24 empress.localdomain kernel: wmi:         flags: 0x0
Sep 06 14:50:24 empress.localdomain kernel: wmi: 2D703EE8-36AC-4F88-BDB5-7556CE6B2946:
Sep 06 14:50:24 empress.localdomain kernel: wmi:         object_id: BC
Sep 06 14:50:24 empress.localdomain kernel: wmi:         notify_id: 42
Sep 06 14:50:24 empress.localdomain kernel: wmi:         reserved: 43
Sep 06 14:50:24 empress.localdomain kernel: wmi:         instance_count: 1
Sep 06 14:50:24 empress.localdomain kernel: wmi:         flags: 0x2 ACPI_WMI_METHOD
Sep 06 14:50:24 empress.localdomain kernel: wmi: 05901221-D566-11D1-B2F0-00A0C9062910:
Sep 06 14:50:24 empress.localdomain kernel: wmi:         object_id: MO
Sep 06 14:50:24 empress.localdomain kernel: wmi:         notify_id: 4D
Sep 06 14:50:24 empress.localdomain kernel: wmi:         reserved: 4F
Sep 06 14:50:24 empress.localdomain kernel: wmi:         instance_count: 1
Sep 06 14:50:24 empress.localdomain kernel: wmi:         flags: 0x0
Sep 06 14:50:24 empress.localdomain kernel: wmi: Mapper loaded
Sep 06 14:50:24 empress.localdomain kernel: input: Dell AIO WMI hotkeys as /devices/virtual/input/input14
Sep 06 14:51:06 empress.localdomain kernel: wmi: DEBUG Event GUID: 02314822-307C-4F66-BF0E-48AEAEB26CC8
Sep 06 14:51:07 empress.localdomain kernel: wmi: DEBUG Event GUID: 02314822-307C-4F66-BF0E-48AEAEB26CC8
Sep 06 14:56:15 empress.localdomain kernel: wmi: DEBUG Event GUID: 02314822-307C-4F66-BF0E-48AEAEB26CC8
Sep 06 14:56:15 empress.localdomain kernel: wmi: DEBUG Event GUID: 02314822-307C-4F66-BF0E-48AEAEB26CC8
Sep 06 14:56:16 empress.localdomain kernel: wmi: DEBUG Event GUID: 02314822-307C-4F66-BF0E-48AEAEB26CC8


The acpi_listen command gives output for volume down, volume up, video source from Computer to HDMI, video source from HDMI to Computer, and cdrom eject (in that order).

[root@empress ~]# systemctl start acpid.service
[root@empress ~]# acpi_listen
 PNP0C14:00 000000c1 00000000
 PNP0C14:00 000000c0 00000000
 PNP0C14:00 000000c4 00000000
 PNP0C14:00 000000c5 00000000
 PNP0C14:00 000000c6 00000000


I have attached the ACPI DSDT table files that were produced with the following commands.

[root@empress ~]# cat /sys/firmware/acpi/tables/DSDT > dsdt.dat


[root@empress ~]# iasl -d dsdt.dat          # produces dsdt.dsl

Intel ACPI Component Architecture
ASL+ Optimizing Compiler version 20150515-64
Copyright (c) 2000 - 2015 Intel Corporation

Reading ACPI table from file   dsdt.dat - Length 00044263 (0x00ACE7)
ACPI: DSDT 0x0000000000000000 00ACE7 (v02 DELL   AS09     00000000 INTL 20051117)
Acpi table [DSDT] successfully installed and loaded
Pass 1 parse of [DSDT]
Pass 2 parse of [DSDT]
Parsing Deferred Opcodes (Methods/Buffers/Packages/Regions)

Parsing completed

Found 6 external control methods, reparsing with new information
Pass 1 parse of [DSDT]
Pass 2 parse of [DSDT]
Parsing Deferred Opcodes (Methods/Buffers/Packages/Regions)

Parsing completed
Disassembly completed
ASL Output:    dsdt.dsl - 401119 bytes

iASL Warning: There were 6 external control methods found during
disassembly, but additional ACPI tables to resolve these externals
were not specified. The resulting disassembler output file may not
compile because the disassembler did not know how many arguments
to assign to these methods. To specify the tables needed to resolve
external control method references, the -e option can be used to
specify the filenames. Note: SSDTs can be dynamically loaded at
runtime and may or may not be available via the host OS.
Example iASL invocations:
    iasl -e ssdt1.aml ssdt2.aml ssdt3.aml -d dsdt.aml
    iasl -e dsdt.aml ssdt2.aml -d ssdt1.aml
    iasl -e ssdt*.aml -d dsdt.aml

In addition, the -fe option can be used to specify a file containing
control method external declarations with the associated method
argument counts. Each line of the file must be of the form:
    External (<method pathname>, MethodObj, <argument count>)
Invocation:
    iasl -fe refs.txt -d dsdt.aml


[root@empress ~]# iasl -tc dsdt.dsl         # produces dsdt.hex

Intel ACPI Component Architecture
ASL+ Optimizing Compiler version 20150515-64
Copyright (c) 2000 - 2015 Intel Corporation

dsdt.dsl   2491:                     CreateDWordField (BUF0, \_SB.PCI0._Y0F._LEN, MSLN)  
Warning  3128 -                                 ResourceTag larger than Field ^  (Size mismatch, Tag: 64 bits, Field: 32 bits)

dsdt.dsl   3660:                         Acquire (MUT0, 0x0FFF)
Warning  3130 -                                             ^ Result is not used, possible operator timeout will be missed

dsdt.dsl   3877:                     CreateByteField (CRS3, \_SB.PCI0.LPCB.SIO1._Y1B._HE, IRQS)  
Warning  3129 -                                        ResourceTag smaller than Field ^  (Size mismatch, Tag: 1 bit, Field: 8 bits)

dsdt.dsl   4180:                     Name (_FDE, Package (0x05)  
Error    6105 -       Invalid object type for reserved name ^  (_FDE: found Package, Buffer required)

dsdt.dsl   5976:                                 Name (_T_0, Zero)  
Remark   2011 -            Use of compiler reserved name ^  (_T_0)

dsdt.dsl   6055:                                 Name (_T_0, Zero)  
Remark   2011 -            Use of compiler reserved name ^  (_T_0)

dsdt.dsl   6134:                                 Name (_T_0, Zero)  
Remark   2011 -            Use of compiler reserved name ^  (_T_0)

dsdt.dsl   6235:                                 Name (_T_0, Zero)  
Remark   2011 -            Use of compiler reserved name ^  (_T_0)

dsdt.dsl   6430:                                 Name (_T_0, Zero)  
Remark   2011 -            Use of compiler reserved name ^  (_T_0)

dsdt.dsl   6509:                                 Name (_T_0, Zero)  
Remark   2011 -            Use of compiler reserved name ^  (_T_0)

dsdt.dsl   7606:     Method (UXDV, 1, NotSerialized)
Remark   2120 -                ^ Control Method should be made Serialized (due to creation of named objects within)

dsdt.dsl   7609:         Name (_T_0, Zero)  
Remark   2011 -                  ^ Use of compiler reserved name (_T_0)

dsdt.dsl   7668:     Method (RRIO, 4, NotSerialized)
Remark   2120 -                ^ Control Method should be made Serialized (due to creation of named objects within)

dsdt.dsl   7670:         Name (_T_0, Zero)  
Remark   2011 -                  ^ Use of compiler reserved name (_T_0)

dsdt.dsl   8024:             Method (_DOD, 0, NotSerialized)  
Remark   2120 -                        ^ Control Method should be made Serialized (due to creation of named objects within)

dsdt.dsl   8418:                         Return (Package (0x00) {})
Remark   2095 -        Effective AML package length is zero ^ 

dsdt.dsl  11396:         Method (PHWM, 2, NotSerialized)
Remark   2120 -                    ^ Control Method should be made Serialized (due to creation of named objects within)

dsdt.dsl  11409:         Method (FOWM, 2, NotSerialized)
Remark   2120 -                    ^ Control Method should be made Serialized (due to creation of named objects within)

dsdt.dsl  11425:         Method (_L12, 0, NotSerialized)  
Warning  3115 -                    ^ Not all control paths return a value (_L12)

dsdt.dsl  11464:         Method (_L16, 0, NotSerialized)  
Warning  3115 -                    ^ Not all control paths return a value (_L16)

dsdt.dsl  11578:         Method (GOBT, 1, NotSerialized)
Remark   2120 -                    ^ Control Method should be made Serialized (due to creation of named objects within)

dsdt.dsl  11615:         Method (NVOP, 4, NotSerialized)
Remark   2120 -                    ^ Control Method should be made Serialized (due to creation of named objects within)

dsdt.dsl  11622:             Name (_T_0, Zero)  
Remark   2011 -                      ^ Use of compiler reserved name (_T_0)

dsdt.dsl  11658:                     CreateField (Local0, 0x06, One, SHPC)
Remark   2089 -                               Object is not referenced ^  (Name is within method [NVOP])

dsdt.dsl  11659:                     CreateField (Local0, 0x18, 0x03, DGPC)
Remark   2089 -                                Object is not referenced ^  (Name is within method [NVOP])

dsdt.dsl  11660:                     CreateField (Local0, 0x1B, 0x02, HDAC)
Remark   2089 -                                Object is not referenced ^  (Name is within method [NVOP])

dsdt.dsl  11708:         Method (GPS, 4, NotSerialized)
Remark   2120 -                   ^ Control Method should be made Serialized (due to creation of named objects within)

dsdt.dsl  11715:             Name (_T_0, Zero)  
Remark   2011 -                      ^ Use of compiler reserved name (_T_0)

dsdt.dsl  11959:         Method (_DSM, 4, NotSerialized)  
Remark   2120 -                    ^ Control Method should be made Serialized (due to creation of named objects within)

dsdt.dsl  11959:         Method (_DSM, 4, NotSerialized)  
Warning  3115 -                    ^ Not all control paths return a value (_DSM)

dsdt.dsl  11959:         Method (_DSM, 4, NotSerialized)  
Warning  3107 -                    ^ Reserved method must return a value (Integer/String/Buffer/Package/Reference required for _DSM)

ASL Input:     dsdt.dsl - 12227 lines, 360541 bytes, 4756 keywords
Hex Dump:      dsdt.hex - 414155 bytes

Compilation complete. 1 Errors, 7 Warnings, 23 Remarks, 112 Optimizations

Comment 1 major 2015-09-07 01:23:54 UTC
Created attachment 1070785 [details]
Decompiled dsdt.dat (iasl -d dsdt.dat)

Comment 2 major 2015-09-07 01:25:02 UTC
Created attachment 1070786 [details]
Recompiled dsdt.dsl (iasl -tc dsdt.dsl)

Comment 3 Justin M. Forbes 2015-10-20 19:32:23 UTC
*********** MASS BUG UPDATE **************

We apologize for the inconvenience.  There is a large number of bugs to go through and several of them have gone stale.  Due to this, we are doing a mass bug update across all of the Fedora 22 kernel bugs.

Fedora 22 has now been rebased to 4.2.3-200.fc22.  Please test this kernel update (or newer) and let us know if you issue has been resolved or if it is still present with the newer kernel.

If you have moved on to Fedora 23, and are still experiencing this issue, please change the version to Fedora 23.

If you experience different issues, please open a new bug report for those.

Comment 4 Fedora Kernel Team 2015-11-23 17:18:30 UTC
*********** MASS BUG UPDATE **************
This bug is being closed with INSUFFICIENT_DATA as there has not been a response in over 4 weeks. If you are still experiencing this issue, please reopen and attach the relevant data from the latest kernel you are running and any data that might have been requested previously.