ACPI is initialized after scanning pci device. --- arch/x86/pci/legacy.c | 7 +++++++ drivers/acpi/bus.c | 14 +++++++++++--- drivers/acpi/glue.c | 5 +++-- 3 files changed, 21 insertions(+), 5 deletions(-) Index: linux-2.6.28-rc8/drivers/acpi/glue.c =================================================================== --- linux-2.6.28-rc8.orig/drivers/acpi/glue.c +++ linux-2.6.28-rc8/drivers/acpi/glue.c @@ -294,8 +294,9 @@ static int __init init_acpi_device_notif printk(KERN_ERR PREFIX "Can't use platform_notify\n"); return 0; } - platform_notify = acpi_platform_notify; - platform_notify_remove = acpi_platform_notify_remove; + /* disable the bind between pci and ACPI */ + //platform_notify = acpi_platform_notify; + //platform_notify_remove = acpi_platform_notify_remove; return 0; } Index: linux-2.6.28-rc8/arch/x86/pci/legacy.c =================================================================== --- linux-2.6.28-rc8.orig/arch/x86/pci/legacy.c +++ linux-2.6.28-rc8/arch/x86/pci/legacy.c @@ -72,4 +72,11 @@ int __init pci_subsys_init(void) return 0; } +int __init pci_test_scan_init(void) +{ + pci_legacy_init(); + pcibios_scanned--; + return 0; +} +arch_initcall_sync(pci_test_scan_init); subsys_initcall(pci_subsys_init); Index: linux-2.6.28-rc8/drivers/acpi/bus.c =================================================================== --- linux-2.6.28-rc8.orig/drivers/acpi/bus.c +++ linux-2.6.28-rc8/drivers/acpi/bus.c @@ -744,14 +744,14 @@ void __init acpi_early_init(void) } #endif - status = +/* status = acpi_enable_subsystem(~ (ACPI_NO_HARDWARE_INIT | ACPI_NO_ACPI_ENABLE)); if (ACPI_FAILURE(status)) { printk(KERN_ERR PREFIX "Unable to enable ACPI\n"); goto error0; - } + } */ return; @@ -848,8 +848,16 @@ struct kobject *acpi_kobj; static int __init acpi_init(void) { int result = 0; + acpi_status status = AE_OK; - + status = + acpi_enable_subsystem(~ + (ACPI_NO_HARDWARE_INIT | + ACPI_NO_ACPI_ENABLE)); + if (ACPI_FAILURE(status)) { + printk(KERN_ERR PREFIX "Unable to enable ACPI\n"); + disable_acpi(); + } if (acpi_disabled) { printk(KERN_INFO PREFIX "Interpreter disabled.\n"); return -ENODEV;