Comment 12 for bug 539477

Revision history for this message
Kai Jauch (kaijauch) wrote : Re: Fn+F8 key combination doesn't work on Dell E5500

I think I found the reason for the different behaviour of 2.6.31 and 2.6.32.

According to:
http://support.euro.dell.com/support/downloads/download.aspx?c=de&cs=debsdt1&l=de&s=bsd&releaseid=R231574&SystemID=LAT_E6400&servicetag=&os=WLH&osl=ge&deviceid=15569&devlib=0&typecnt=0&vercnt=11&catid=-1&impid=-1&formatcnt=0&libid=1&typeid=-1&dateid=-1&formatid=-1&fileid=333175

Dell added support for Windows 7 with BIOS version A15 for the Latitude E6400. A14 + kernel 2.6.32 caused fn-f8 to be reported as keycode 227.
Kernel 2.6.31 claims to support the ACPI interface for Vista, 2.6.32 claims to support the ACPI interface for Win7.

linux-2.6.31/drivers/acpi/acpica/uteval.c:
static struct acpi_interface_info acpi_interfaces_supported[] = {
        /* Operating System Vendor Strings */

        {"Windows 2000", ACPI_OSI_WIN_2000}, /* Windows 2000 */
        {"Windows 2001", ACPI_OSI_WIN_XP}, /* Windows XP */
        {"Windows 2001 SP1", ACPI_OSI_WIN_XP_SP1}, /* Windows XP SP1 */
        {"Windows 2001.1", ACPI_OSI_WINSRV_2003}, /* Windows Server 2003 */
        {"Windows 2001 SP2", ACPI_OSI_WIN_XP_SP2}, /* Windows XP SP2 */
        {"Windows 2001.1 SP1", ACPI_OSI_WINSRV_2003_SP1}, /* Windows Server 2003 SP1 - Added 03/2006 */
        {"Windows 2006", ACPI_OSI_WIN_VISTA}, /* Windows Vista - Added 03/2006 */

linux-2.6.32/drivers/acpi/acpica/uteval.c:
static struct acpi_interface_info acpi_interfaces_supported[] = {
        /* Operating System Vendor Strings */

        {"Windows 2000", ACPI_OSI_WIN_2000}, /* Windows 2000 */
        {"Windows 2001", ACPI_OSI_WIN_XP}, /* Windows XP */
        {"Windows 2001 SP1", ACPI_OSI_WIN_XP_SP1}, /* Windows XP SP1 */
        {"Windows 2001.1", ACPI_OSI_WINSRV_2003}, /* Windows Server 2003 */
        {"Windows 2001 SP2", ACPI_OSI_WIN_XP_SP2}, /* Windows XP SP2 */
        {"Windows 2001.1 SP1", ACPI_OSI_WINSRV_2003_SP1}, /* Windows Server 2003 SP1 - Added 03/2006 */
        {"Windows 2006", ACPI_OSI_WIN_VISTA}, /* Windows Vista - Added 03/2006 */
        {"Windows 2006.1", ACPI_OSI_WINSRV_2008}, /* Windows Server 2008 - Added 09/2009 */
        {"Windows 2006 SP1", ACPI_OSI_WIN_VISTA_SP1}, /* Windows Vista SP1 - Added 09/2009 */
        {"Windows 2009", ACPI_OSI_WIN_7}, /* Windows 7 and Server 2008 R2 - Added 09/2009 */

If the OS claims to support the Vista interface, the BIOS reports fn-f8 as keycode 227.
If the OS claims to support the Win7 interface, the BIOS reports fn-f8 as Super_L + p.

Conclusion: No bug in Linux, the BIOS just (intentionally) reports fn-f8 differently for Vista and Win7. Which would indicate that Super + p is a feature that was introduced with Win7 :)

As I suspect that more and more newer laptops are going to default to this behaviour, you would have to either quirk those to convert Super_L + p to DISPLAYTOGGLE (which is not feasible), or have everything that previously only reacted on DISPLAYTOGGLE to also react on Super_L + p. But that's out of scope for this bug report.