diff -urpNX ../dontdiff linux-forrh/drivers/hotplug/acpiphp_glue.c linux-hotp/drivers/hotplug/acpiphp_glue.c
--- linux-forrh/drivers/hotplug/acpiphp_glue.c  Sun Dec 15 09:43:55 2002
+++ linux-hotp/drivers/hotplug/acpiphp_glue.c   Sun Dec 15 09:48:53 2002
@@ -750,8 +750,9 @@ find_p2p_bridge (acpi_handle handle, u32


/* find hot-pluggable slots, and then find P2P bridge */
-static int add_bridges (acpi_handle *handle)
+static int add_bridge(struct acpi_device *device)
{
+       acpi_handle *handle = device->handle;
       acpi_status status;
       unsigned long tmp;
       int seg, bus;
@@ -805,36 +806,6 @@ static int add_bridges (acpi_handle *han
}


-/* callback routine to enumerate all the bridges in ACPI namespace */
-static acpi_status
-find_host_bridge (acpi_handle handle, u32 lvl, void *context, void **rv)
-{
-       acpi_status status;
-       acpi_device_info info;
-       char objname[5];
-       acpi_buffer buffer = { .length = sizeof(objname),
-                              .pointer = objname };
-
-       status = acpi_get_object_info(handle, &info);
-       if (ACPI_FAILURE(status)) {
-               dbg("%s: failed to get bridge information\n", __FUNCTION__);
-               return AE_OK;           /* continue */
-       }
-
-       info.hardware_id[sizeof(info.hardware_id)-1] = '\0';
-
-       /* TBD use acpi_get_devices() API */
-       if (info.current_status &&
-           (info.valid & ACPI_VALID_HID) &&
-           strcmp(info.hardware_id, ACPI_PCI_HOST_HID) == 0) {
-               acpi_get_name(handle, ACPI_SINGLE_NAME, &buffer);
-               dbg("checking PCI-hotplug capable bridges under [%s]\n", objname);
-               add_bridges(handle);
-       }
-       return AE_OK;
-}
-
-
static int power_on_slot (struct acpiphp_slot *slot)
{
       acpi_status status;
@@ -1194,6 +1165,14 @@ static void handle_hotplug_event_func (a
       }
}

+static struct acpi_driver acpi_pci_hp_driver = {
+       .name =         "pci_hp",
+       .class =        "",
+       .ids =          ACPI_PCI_HOST_HID,
+       .ops =  {
+               .add =  add_bridge,
+       },
+};

/**
 * acpiphp_glue_init - initializes all PCI hotplug - ACPI glue data structures
@@ -1201,7 +1180,7 @@ static void handle_hotplug_event_func (a
 */
int acpiphp_glue_init (void)
{
-       acpi_status status;
+       int num;

       if (list_empty(&pci_root_buses))
               return -1;
@@ -1211,14 +1190,10 @@ int acpiphp_glue_init (void)
       if (!default_ops)
               return -1;

-       status = acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
-                                    ACPI_UINT32_MAX, find_host_bridge,
-                                    NULL, NULL);
+       num = acpi_bus_register_driver(&acpi_pci_hp_driver);

-       if (ACPI_FAILURE(status)) {
-               err("%s: acpi_walk_namespace() failed\n", __FUNCTION__);
+       if (num <= 0)
               return -1;
-       }

       return 0;
}