diff options
Diffstat (limited to 'drivers/usb/cdns3/cdnsp-pci.c')
| -rw-r--r-- | drivers/usb/cdns3/cdnsp-pci.c | 27 | 
1 files changed, 11 insertions, 16 deletions
| diff --git a/drivers/usb/cdns3/cdnsp-pci.c b/drivers/usb/cdns3/cdnsp-pci.c index efd54ed918b9..7b151f5af3cc 100644 --- a/drivers/usb/cdns3/cdnsp-pci.c +++ b/drivers/usb/cdns3/cdnsp-pci.c @@ -29,30 +29,23 @@  #define PLAT_DRIVER_NAME	"cdns-usbssp"  #define CDNS_VENDOR_ID		0x17cd -#define CDNS_DEVICE_ID		0x0100 +#define CDNS_DEVICE_ID		0x0200 +#define CDNS_DRD_ID		0x0100  #define CDNS_DRD_IF		(PCI_CLASS_SERIAL_USB << 8 | 0x80)  static struct pci_dev *cdnsp_get_second_fun(struct pci_dev *pdev)  { -	struct pci_dev *func; -  	/*  	 * Gets the second function. -	 * It's little tricky, but this platform has two function. -	 * The fist keeps resources for Host/Device while the second -	 * keeps resources for DRD/OTG. +	 * Platform has two function. The fist keeps resources for +	 * Host/Device while the secon keeps resources for DRD/OTG.  	 */ -	func = pci_get_device(pdev->vendor, pdev->device, NULL); -	if (!func) -		return NULL; +	if (pdev->device == CDNS_DEVICE_ID) +		return  pci_get_device(pdev->vendor, CDNS_DRD_ID, NULL); +	else if (pdev->device == CDNS_DRD_ID) +		return pci_get_device(pdev->vendor, CDNS_DEVICE_ID, NULL); -	if (func->devfn == pdev->devfn) { -		func = pci_get_device(pdev->vendor, pdev->device, func); -		if (!func) -			return NULL; -	} - -	return func; +	return NULL;  }  static int cdnsp_pci_probe(struct pci_dev *pdev, @@ -230,6 +223,8 @@ static const struct pci_device_id cdnsp_pci_ids[] = {  	  PCI_CLASS_SERIAL_USB_DEVICE, PCI_ANY_ID },  	{ PCI_VENDOR_ID_CDNS, CDNS_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,  	  CDNS_DRD_IF, PCI_ANY_ID }, +	{ PCI_VENDOR_ID_CDNS, CDNS_DRD_ID, PCI_ANY_ID, PCI_ANY_ID, +	  CDNS_DRD_IF, PCI_ANY_ID },  	{ 0, }  }; |