[ARM] ohci-pxa27x: use platform_get_{irq,resource} for the resource
authorEric Miao <eric.miao@marvell.com>
Fri, 3 Oct 2008 14:37:21 +0000 (22:37 +0800)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Tue, 7 Oct 2008 18:12:58 +0000 (19:12 +0100)
Depending on the order of how resource is defined in the platform
device is not good, use platform_get_{irq,resource} for the IRQ
and memory resources.

Signed-off-by: Eric Miao <eric.miao@marvell.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
drivers/usb/host/ohci-pxa27x.c

index 5515817..8530c6e 100644 (file)
@@ -255,18 +255,20 @@ static void pxa27x_stop_hc(struct device *dev)
  */
 int usb_hcd_pxa27x_probe (const struct hc_driver *driver, struct platform_device *pdev)
 {
-       int retval;
+       int retval, irq;
        struct usb_hcd *hcd;
        struct pxaohci_platform_data *inf;
+       struct resource *r;
 
        inf = pdev->dev.platform_data;
 
        if (!inf)
                return -ENODEV;
 
-       if (pdev->resource[1].flags != IORESOURCE_IRQ) {
-               pr_debug ("resource[1] is not IORESOURCE_IRQ");
-               return -ENOMEM;
+       irq = platform_get_irq(pdev, 0);
+       if (irq < 0) {
+               pr_err("no resource of IORESOURCE_IRQ");
+               return -ENXIO;
        }
 
        usb_clk = clk_get(&pdev->dev, "USBCLK");
@@ -276,8 +278,16 @@ int usb_hcd_pxa27x_probe (const struct hc_driver *driver, struct platform_device
        hcd = usb_create_hcd (driver, &pdev->dev, "pxa27x");
        if (!hcd)
                return -ENOMEM;
-       hcd->rsrc_start = pdev->resource[0].start;
-       hcd->rsrc_len = pdev->resource[0].end - pdev->resource[0].start + 1;
+
+       r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+       if (!r) {
+               pr_err("no resource of IORESOURCE_MEM");
+               retval = -ENXIO;
+               goto err1;
+       }
+
+       hcd->rsrc_start = r->start;
+       hcd->rsrc_len = resource_size(r);
 
        if (!request_mem_region(hcd->rsrc_start, hcd->rsrc_len, hcd_name)) {
                pr_debug("request_mem_region failed");
@@ -305,7 +315,7 @@ int usb_hcd_pxa27x_probe (const struct hc_driver *driver, struct platform_device
 
        ohci_hcd_init(hcd_to_ohci(hcd));
 
-       retval = usb_add_hcd(hcd, pdev->resource[1].start, IRQF_DISABLED);
+       retval = usb_add_hcd(hcd, irq, IRQF_DISABLED);
        if (retval == 0)
                return retval;