eeepc-wmi: use the presence bit correctly
authorCorentin Chary <corentincj@iksaif.net>
Sun, 6 Feb 2011 12:28:35 +0000 (13:28 +0100)
committerMatthew Garrett <mjg@redhat.com>
Mon, 28 Mar 2011 10:05:17 +0000 (06:05 -0400)
I checked some more DSDT, and it seems that I wasn't
totally right about the meaning of DSTS return value.
Bit 0 is clearly the status of the device, and I discovered
that bit 16 is set when the device is present.

Signed-off-by: Corentin Chary <corentincj@iksaif.net>
Signed-off-by: Matthew Garrett <mjg@redhat.com>
drivers/platform/x86/eeepc-wmi.c

index aa9e1d1719da3de088bf8a095e9483d2a5e33493..391c32bd703e1c77171800d6e17aefe53acbeff7 100644 (file)
@@ -75,6 +75,9 @@ MODULE_ALIAS("wmi:"EEEPC_WMI_MGMT_GUID);
 #define EEEPC_WMI_DEVID_BACKLIGHT      0x00050012
 #define EEEPC_WMI_DEVID_TPDLED         0x00100011
 
+#define EEEPC_WMI_DSTS_STATUS_BIT      0x00000001
+#define EEEPC_WMI_DSTS_PRESENCE_BIT    0x00010000
+
 static bool hotplug_wireless;
 
 module_param(hotplug_wireless, bool, 0444);
@@ -265,16 +268,10 @@ static int eeepc_wmi_get_devstate_simple(u32 dev_id)
        if (ACPI_FAILURE(status))
                return -EINVAL;
 
-       /* If the device is present, DSTS will always set some bits
-        * 0x00070000 - 1110000000000000000 - device supported
-        * 0x00060000 - 1100000000000000000 - not supported
-        * 0x00020000 - 0100000000000000000 - device supported
-        * 0x00010000 - 0010000000000000000 - not supported / special mode ?
-        */
-       if (!retval || retval == 0x00060000)
+       if (!(retval & EEEPC_WMI_DSTS_PRESENCE_BIT))
                return -ENODEV;
 
-       return retval & 0x1;
+       return retval & EEEPC_WMI_DSTS_STATUS_BIT;
 }
 
 /*