Merge branch 'kmemtrace-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[sfrench/cifs-2.6.git] / drivers / platform / x86 / acer-wmi.c
index a6a42e8c060b7036e0955827d281c47cffc852b5..0f6e43bf4fc211804272790d409e18daeba128fa 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();
 
        /*