linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / drivers / acpi / blacklist.c
index f9c972b..9824f67 100644 (file)
@@ -77,13 +77,28 @@ static struct acpi_blacklist_item acpi_blacklist[] __initdata = {
 
 static int __init blacklist_by_year(void)
 {
-       int year = dmi_get_year(DMI_BIOS_DATE);
-       /* Doesn't exist? Likely an old system */
-       if (year == -1) 
-               return 1;
-       /* 0? Likely a buggy new BIOS */
-       if (year == 0)
+       int year;
+       char *s = dmi_get_system_info(DMI_BIOS_DATE);
+
+       if (!s)
+               return 0;
+       if (!*s)
+               return 0;
+
+       s = strrchr(s, '/');
+       if (!s)
                return 0;
+
+       s += 1;
+
+       year = simple_strtoul(s, NULL, 0);
+
+       if (year < 100) {       /* 2-digit year */
+               year += 1900;
+               if (year < 1996)        /* no dates < spec 1.0 */
+                       year += 100;
+       }
+
        if (year < CONFIG_ACPI_BLACKLIST_YEAR) {
                printk(KERN_ERR PREFIX "BIOS age (%d) fails cutoff (%d), "
                       "acpi=force is required to enable ACPI\n",