--- linux-2.6.31-rc9-git3/drivers/acpi/osl.c 2009-09-06 01:38:12.000000000 +0200 +++ linux-2.6.31-rc9-git3-kp/drivers/acpi/osl.c 2009-09-09 18:41:51.000000000 +0200 @@ -1113,6 +1113,8 @@ * - no (0) * -> ACPI Operation Region resources will not be registered * + * We do detect some special boards and switch to lax checking + * as we do not want to break support of sensors. */ #define ENFORCE_RESOURCES_STRICT 2 #define ENFORCE_RESOURCES_LAX 1 @@ -1120,8 +1122,30 @@ static unsigned int acpi_enforce_resources = ENFORCE_RESOURCES_STRICT; +static int enforce_resources_lax(const struct dmi_system_id *d) +{ + + printk(KERN_NOTICE "ACPI: %s detected: " + "using lax resource checking\n", d->ident); + acpi_enforce_resources = ENFORCE_RESOURCES_LAX; + return 0; +} + +static struct dmi_system_id osl_dmi_table[] __initdata = { + { + .callback = enforce_resources_lax, + .ident = "AOpen i915GMm-HFS", + .matches = { + DMI_MATCH(DMI_BOARD_VENDOR, "AOpen"), + DMI_MATCH(DMI_BOARD_NAME, "i915GMm-HFS"), + }, + }, + {} +}; + static int __init acpi_enforce_resources_setup(char *str) { + if (str == NULL || *str == '\0') return 0; @@ -1421,3 +1445,11 @@ } #endif + +static int __init acpi_osl_init(void) +{ + dmi_check_system(osl_dmi_table); + return 0; +} + +module_init(acpi_osl_init);