|
29 | 29 | #define PLAT_DRIVER_NAME "cdns-usbssp"
|
30 | 30 |
|
31 | 31 | #define CDNS_VENDOR_ID 0x17cd
|
32 |
| -#define CDNS_DEVICE_ID 0x0100 |
| 32 | +#define CDNS_DEVICE_ID 0x0200 |
| 33 | +#define CDNS_DRD_ID 0x0100 |
33 | 34 | #define CDNS_DRD_IF (PCI_CLASS_SERIAL_USB << 8 | 0x80)
|
34 | 35 |
|
35 | 36 | static struct pci_dev *cdnsp_get_second_fun(struct pci_dev *pdev)
|
36 | 37 | {
|
37 |
| - struct pci_dev *func; |
38 |
| - |
39 | 38 | /*
|
40 | 39 | * Gets the second function.
|
41 |
| - * It's little tricky, but this platform has two function. |
42 |
| - * The fist keeps resources for Host/Device while the second |
43 |
| - * keeps resources for DRD/OTG. |
| 40 | + * Platform has two function. The fist keeps resources for |
| 41 | + * Host/Device while the secon keeps resources for DRD/OTG. |
44 | 42 | */
|
45 |
| - func = pci_get_device(pdev->vendor, pdev->device, NULL); |
46 |
| - if (!func) |
47 |
| - return NULL; |
| 43 | + if (pdev->device == CDNS_DEVICE_ID) |
| 44 | + return pci_get_device(pdev->vendor, CDNS_DRD_ID, NULL); |
| 45 | + else if (pdev->device == CDNS_DRD_ID) |
| 46 | + return pci_get_device(pdev->vendor, CDNS_DEVICE_ID, NULL); |
48 | 47 |
|
49 |
| - if (func->devfn == pdev->devfn) { |
50 |
| - func = pci_get_device(pdev->vendor, pdev->device, func); |
51 |
| - if (!func) |
52 |
| - return NULL; |
53 |
| - } |
54 |
| - |
55 |
| - return func; |
| 48 | + return NULL; |
56 | 49 | }
|
57 | 50 |
|
58 | 51 | static int cdnsp_pci_probe(struct pci_dev *pdev,
|
@@ -230,6 +223,8 @@ static const struct pci_device_id cdnsp_pci_ids[] = {
|
230 | 223 | PCI_CLASS_SERIAL_USB_DEVICE, PCI_ANY_ID },
|
231 | 224 | { PCI_VENDOR_ID_CDNS, CDNS_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,
|
232 | 225 | CDNS_DRD_IF, PCI_ANY_ID },
|
| 226 | + { PCI_VENDOR_ID_CDNS, CDNS_DRD_ID, PCI_ANY_ID, PCI_ANY_ID, |
| 227 | + CDNS_DRD_IF, PCI_ANY_ID }, |
233 | 228 | { 0, }
|
234 | 229 | };
|
235 | 230 |
|
|
0 commit comments