mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 11:11:45 -04:00
usb: ohci-at91: fix irq and iomem resource retrieval
When using dt resources retrieval (interrupts and reg properties) there is no predefined order for these resources in the platform dev resources table. Retrieve resources using platform_get_resource and platform_get_irq functions instead of direct resource table entries to avoid resource type mismatch. Signed-off-by: Boris BREZILLON <[email protected]> Acked-by: Nicolas Ferre <[email protected]> Signed-off-by: Alan Stern <[email protected]> Reviewed-by: Tomasz Figa <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
This commit is contained in:
parent
7cd0c298f6
commit
fb5f1834c3
1 changed files with 15 additions and 11 deletions
|
|
@ -136,23 +136,27 @@ static int usb_hcd_at91_probe(const struct hc_driver *driver,
|
|||
struct ohci_hcd *ohci;
|
||||
int retval;
|
||||
struct usb_hcd *hcd = NULL;
|
||||
struct device *dev = &pdev->dev;
|
||||
struct resource *res;
|
||||
int irq;
|
||||
|
||||
if (pdev->num_resources != 2) {
|
||||
pr_debug("hcd probe: invalid num_resources");
|
||||
return -ENODEV;
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (!res) {
|
||||
dev_dbg(dev, "hcd probe: missing memory resource\n");
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
if ((pdev->resource[0].flags != IORESOURCE_MEM)
|
||||
|| (pdev->resource[1].flags != IORESOURCE_IRQ)) {
|
||||
pr_debug("hcd probe: invalid resource type\n");
|
||||
return -ENODEV;
|
||||
irq = platform_get_irq(pdev, 0);
|
||||
if (irq < 0) {
|
||||
dev_dbg(dev, "hcd probe: missing irq resource\n");
|
||||
return irq;
|
||||
}
|
||||
|
||||
hcd = usb_create_hcd(driver, &pdev->dev, "at91");
|
||||
if (!hcd)
|
||||
return -ENOMEM;
|
||||
hcd->rsrc_start = pdev->resource[0].start;
|
||||
hcd->rsrc_len = resource_size(&pdev->resource[0]);
|
||||
hcd->rsrc_start = res->start;
|
||||
hcd->rsrc_len = resource_size(res);
|
||||
|
||||
if (!request_mem_region(hcd->rsrc_start, hcd->rsrc_len, hcd_name)) {
|
||||
pr_debug("request_mem_region failed\n");
|
||||
|
|
@ -199,7 +203,7 @@ static int usb_hcd_at91_probe(const struct hc_driver *driver,
|
|||
ohci->num_ports = board->ports;
|
||||
at91_start_hc(pdev);
|
||||
|
||||
retval = usb_add_hcd(hcd, pdev->resource[1].start, IRQF_SHARED);
|
||||
retval = usb_add_hcd(hcd, irq, IRQF_SHARED);
|
||||
if (retval == 0)
|
||||
return retval;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue