vserver 1.9.5.x5
[linux-2.6.git] / drivers / pnp / pnpacpi / core.c
index 9a9352f..8655dd2 100644 (file)
@@ -236,23 +236,34 @@ static acpi_status __init pnpacpi_add_device_handler(acpi_handle handle,
 
        if (!acpi_bus_get_device(handle, &device))
                pnpacpi_add_device(device);
+       else
+               return AE_CTRL_DEPTH;
        return AE_OK;
 }
 
+int pnpacpi_disabled __initdata;
 int __init pnpacpi_init(void)
 {
-       if (acpi_disabled) {
-               pnp_info("PnP ACPI: ACPI disable");
+       if (acpi_disabled || pnpacpi_disabled) {
+               pnp_info("PnP ACPI: disabled");
                return 0;
        }
        pnp_info("PnP ACPI init");
        pnp_register_protocol(&pnpacpi_protocol);
-       acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
-                       ACPI_UINT32_MAX, pnpacpi_add_device_handler,
-                       NULL, NULL);
+       acpi_get_devices(NULL, pnpacpi_add_device_handler, NULL, NULL);
        pnp_info("PnP ACPI: found %d devices", num);
        return 0;
 }
 subsys_initcall(pnpacpi_init);
 
+static int __init pnpacpi_setup(char *str)
+{
+       if (str == NULL)
+               return 1;
+       if (!strncmp(str, "off", 3))
+               pnpacpi_disabled = 1;
+       return 1;
+}
+__setup("pnpacpi=", pnpacpi_setup);
+
 EXPORT_SYMBOL(pnpacpi_protocol);