usb: pci: Use pci_find_class() to find the device
authorSimon Glass <sjg@chromium.org>
Wed, 28 Jan 2015 05:13:30 +0000 (22:13 -0700)
committerSimon Glass <sjg@chromium.org>
Fri, 6 Feb 2015 05:16:42 +0000 (22:16 -0700)
Use the new utility function instead of local code.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
drivers/usb/host/ehci-pci.c

index 991b19998b7e407a214f698939284577d61cb4da..b9eabc55936a2aa47574c543b5f0db68019c03c7 100644 (file)
@@ -34,57 +34,6 @@ static struct pci_device_id ehci_pci_ids[] = {
        {0, 0}
 };
 #else
-static pci_dev_t ehci_find_class(int index)
-{
-       int bus;
-       int devnum;
-       pci_dev_t bdf;
-       uint32_t class;
-
-       for (bus = 0; bus <= pci_last_busno(); bus++) {
-               for (devnum = 0; devnum < PCI_MAX_PCI_DEVICES-1; devnum++) {
-                       pci_read_config_dword(PCI_BDF(bus, devnum, 0),
-                                             PCI_CLASS_REVISION, &class);
-                       if (class >> 16 == 0xffff)
-                               continue;
-
-                       for (bdf = PCI_BDF(bus, devnum, 0);
-                                       bdf <= PCI_BDF(bus, devnum,
-                                               PCI_MAX_PCI_FUNCTIONS - 1);
-                                       bdf += PCI_BDF(0, 0, 1)) {
-                               pci_read_config_dword(bdf, PCI_CLASS_REVISION,
-                                                     &class);
-                               class >>= 8;
-                               /*
-                                * Here be dragons! In case we have multiple
-                                * PCI EHCI controllers, this function will
-                                * be called multiple times as well. This
-                                * function will scan the PCI busses, always
-                                * starting from bus 0, device 0, function 0,
-                                * until it finds an USB controller. The USB
-                                * stack gives us an 'index' of a controller
-                                * that is currently being registered, which
-                                * is a number, starting from 0 and growing
-                                * in ascending order as controllers are added.
-                                * To avoid probing the same controller in tne
-                                * subsequent runs of this function, we will
-                                * skip 'index - 1' detected controllers and
-                                * report the index'th controller.
-                                */
-                               if (class != PCI_CLASS_SERIAL_USB_EHCI)
-                                       continue;
-                               if (index) {
-                                       index--;
-                                       continue;
-                               }
-                               /* Return index'th controller. */
-                               return bdf;
-                       }
-               }
-       }
-
-       return -ENODEV;
-}
 #endif
 
 /*
@@ -102,7 +51,7 @@ int ehci_hcd_init(int index, enum usb_init_type init,
 #ifdef CONFIG_PCI_EHCI_DEVICE
        pdev = pci_find_devices(ehci_pci_ids, CONFIG_PCI_EHCI_DEVICE);
 #else
-       pdev = ehci_find_class(index);
+       pdev = pci_find_class(PCI_CLASS_SERIAL_USB_EHCI, index);
 #endif
        if (pdev < 0) {
                printf("EHCI host controller not found\n");