[PATCH 1/3] usb: ohci-at91: fix irq and iomem resource retrieval

2013-12-03 Thread Boris BREZILLON
When using dt resources retrieval (interrupts and reg properties) there is
no predefined order for these resources in the platform dev resource
table.

Retrieve resources using the platform_get_resource function instead of
direct resource table entries to avoid resource type mismatch.

Signed-off-by: Boris BREZILLON 
Tested-by: Robert Nelson 
---
 drivers/usb/host/ohci-at91.c |   19 +++
 1 file changed, 11 insertions(+), 8 deletions(-)

diff --git a/drivers/usb/host/ohci-at91.c b/drivers/usb/host/ohci-at91.c
index 418444e..7aec6ca 100644
--- a/drivers/usb/host/ohci-at91.c
+++ b/drivers/usb/host/ohci-at91.c
@@ -136,23 +136,26 @@ 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 *mem_r, *irq_r;
 
-   if (pdev->num_resources != 2) {
-   pr_debug("hcd probe: invalid num_resources");
+   mem_r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+   if (!mem_r) {
+   dev_dbg(dev, "hcd probe: missing memory resource\n");
return -ENODEV;
}
 
-   if ((pdev->resource[0].flags != IORESOURCE_MEM)
-   || (pdev->resource[1].flags != IORESOURCE_IRQ)) {
-   pr_debug("hcd probe: invalid resource type\n");
+   irq_r = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
+   if (!irq_r) {
+   dev_dbg(dev, "hcd probe: missing irq resource\n");
return -ENODEV;
}
 
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 = mem_r->start;
+   hcd->rsrc_len = resource_size(mem_r);
 
if (!request_mem_region(hcd->rsrc_start, hcd->rsrc_len, hcd_name)) {
pr_debug("request_mem_region failed\n");
@@ -199,7 +202,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_r->start, IRQF_SHARED);
if (retval == 0)
return retval;
 
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/3] usb: ohci-at91: fix irq and iomem resource retrieval

2013-12-03 Thread Nicolas Ferre

On 03/12/2013 15:07, Boris BREZILLON :

When using dt resources retrieval (interrupts and reg properties) there is
no predefined order for these resources in the platform dev resource
table.

Retrieve resources using the platform_get_resource function instead of
direct resource table entries to avoid resource type mismatch.

Signed-off-by: Boris BREZILLON 
Tested-by: Robert Nelson 


Acked-by: Nicolas Ferre 


---
  drivers/usb/host/ohci-at91.c |   19 +++
  1 file changed, 11 insertions(+), 8 deletions(-)

diff --git a/drivers/usb/host/ohci-at91.c b/drivers/usb/host/ohci-at91.c
index 418444e..7aec6ca 100644
--- a/drivers/usb/host/ohci-at91.c
+++ b/drivers/usb/host/ohci-at91.c
@@ -136,23 +136,26 @@ 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 *mem_r, *irq_r;

-   if (pdev->num_resources != 2) {
-   pr_debug("hcd probe: invalid num_resources");
+   mem_r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+   if (!mem_r) {
+   dev_dbg(dev, "hcd probe: missing memory resource\n");
return -ENODEV;
}

-   if ((pdev->resource[0].flags != IORESOURCE_MEM)
-   || (pdev->resource[1].flags != IORESOURCE_IRQ)) {
-   pr_debug("hcd probe: invalid resource type\n");
+   irq_r = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
+   if (!irq_r) {
+   dev_dbg(dev, "hcd probe: missing irq resource\n");
return -ENODEV;
}

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 = mem_r->start;
+   hcd->rsrc_len = resource_size(mem_r);

if (!request_mem_region(hcd->rsrc_start, hcd->rsrc_len, hcd_name)) {
pr_debug("request_mem_region failed\n");
@@ -199,7 +202,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_r->start, IRQF_SHARED);
if (retval == 0)
return retval;





--
Nicolas Ferre
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html