Merge branch 'acer' into release
Len Brown [Sun, 5 Apr 2009 05:42:03 +0000 (01:42 -0400)]
Documentation/laptops/acer-wmi.txt
drivers/platform/x86/acer-wmi.c

index 2b3a6b5..5ee2a02 100644 (file)
@@ -1,9 +1,9 @@
 Acer Laptop WMI Extras Driver
 http://code.google.com/p/aceracpi
-Version 0.2
-18th August 2008
+Version 0.3
+4th April 2009
 
-Copyright 2007-2008 Carlos Corbacho <carlos@strangeworlds.co.uk>
+Copyright 2007-2009 Carlos Corbacho <carlos@strangeworlds.co.uk>
 
 acer-wmi is a driver to allow you to control various parts of your Acer laptop
 hardware under Linux which are exposed via ACPI-WMI.
@@ -36,6 +36,10 @@ not possible in kernel space from a 64 bit OS.
 Supported Hardware
 ******************
 
+NOTE: The Acer Aspire One is not supported hardware. It cannot work with
+acer-wmi until Acer fix their ACPI-WMI implementation on them, so has been
+blacklisted until that happens.
+
 Please see the website for the current list of known working hardare:
 
 http://code.google.com/p/aceracpi/wiki/SupportedHardware
index a6a42e8..0f6e43b 100644 (file)
@@ -1,7 +1,7 @@
 /*
  *  Acer WMI Laptop Extras
  *
- *  Copyright (C) 2007-2008    Carlos Corbacho <carlos@strangeworlds.co.uk>
+ *  Copyright (C) 2007-2009    Carlos Corbacho <carlos@strangeworlds.co.uk>
  *
  *  Based on acer_acpi:
  *    Copyright (C) 2005-2007  E.M. Smith
@@ -225,6 +225,25 @@ static struct quirk_entry quirk_fujitsu_amilo_li_1718 = {
        .wireless = 2,
 };
 
+/* The Aspire One has a dummy ACPI-WMI interface - disable it */
+static struct dmi_system_id __devinitdata acer_blacklist[] = {
+       {
+               .ident = "Acer Aspire One (SSD)",
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
+                       DMI_MATCH(DMI_PRODUCT_NAME, "AOA110"),
+               },
+       },
+       {
+               .ident = "Acer Aspire One (HDD)",
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
+                       DMI_MATCH(DMI_PRODUCT_NAME, "AOA150"),
+               },
+       },
+       {}
+};
+
 static struct dmi_system_id acer_quirks[] = {
        {
                .callback = dmi_matched,
@@ -1117,11 +1136,17 @@ static int __devinit acer_platform_probe(struct platform_device *device)
        }
 
        err = acer_rfkill_init(&device->dev);
+       if (err)
+               goto error_rfkill;
 
        return err;
 
+error_rfkill:
+       if (has_cap(ACER_CAP_BRIGHTNESS))
+               acer_backlight_exit();
 error_brightness:
-       acer_led_exit();
+       if (has_cap(ACER_CAP_MAILLED))
+               acer_led_exit();
 error_mailled:
        return err;
 }
@@ -1254,6 +1279,12 @@ static int __init acer_wmi_init(void)
 
        printk(ACER_INFO "Acer Laptop ACPI-WMI Extras\n");
 
+       if (dmi_check_system(acer_blacklist)) {
+               printk(ACER_INFO "Blacklisted hardware detected - "
+                               "not loading\n");
+               return -ENODEV;
+       }
+
        find_quirks();
 
        /*