[linux-yocto] [PATCH 06/87] usb/ehci-ci13612: use dynamic virtual address to map the hcd registers
Paul Butler
butler.paul at gmail.com
Mon May 27 09:55:37 PDT 2013
From: Kevin Hao <kexin.hao at windriver.com>
Use of_iomap to map the hcd registers instead of assuming that there
always has a fix virtual address we can use to access these registers.
Signed-off-by: Kevin Hao <kexin.hao at windriver.com>
---
drivers/usb/host/ehci-ci13612.c | 23 ++++++++++++++++++++---
1 file changed, 20 insertions(+), 3 deletions(-)
diff --git a/drivers/usb/host/ehci-ci13612.c b/drivers/usb/host/ehci-ci13612.c
index 76919aa..7215c79 100644
--- a/drivers/usb/host/ehci-ci13612.c
+++ b/drivers/usb/host/ehci-ci13612.c
@@ -142,8 +142,7 @@ static int ci13612_ehci_probe(struct platform_device *pdev)
{
struct usb_hcd *hcd;
const struct hc_driver *driver = &ci13612_hc_driver;
- void __iomem *USB_base = (void __iomem *) 0xF00A0000;
- void __iomem *gpreg_base = (void __iomem *) 0xF000C000;
+ void __iomem *gpreg_base;
int irq;
int retval;
struct device_node *np = pdev->dev.of_node;
@@ -181,17 +180,34 @@ static int ci13612_ehci_probe(struct platform_device *pdev)
hcd->rsrc_start = ci13612_PHY_ADDR;
hcd->rsrc_len = 0x20000;
- hcd->regs = USB_base;
+ hcd->regs = of_iomap(np, 0);
+ if (!hcd->regs) {
+ dev_err(&pdev->dev, "of_iomap error\n");
+ retval = -ENOMEM;
+ goto fail_put_hcd;
+ }
+
+ gpreg_base = of_iomap(np, 1);
+ if (!gpreg_base) {
+ dev_err(&pdev->dev, "of_iomap error\n");
+ retval = -ENOMEM;
+ goto fail_unmap;
+ }
/* Setup GPREG for USB to enable the 6-bit address line */
writel(0x0, gpreg_base + 0x8);
+ iounmap(gpreg_base);
+
retval = usb_add_hcd(hcd, irq, IRQF_SHARED);
if (retval == 0) {
platform_set_drvdata(pdev, hcd);
return retval;
}
+fail_unmap:
+ iounmap(hcd->regs);
+fail_put_hcd:
usb_put_hcd(hcd);
fail_create_hcd:
dev_err(&pdev->dev, "init %s fail, %d\n", dev_name(&pdev->dev), retval);
@@ -203,6 +219,7 @@ static int ci13612_ehci_remove(struct platform_device *pdev)
struct usb_hcd *hcd = platform_get_drvdata(pdev);
usb_remove_hcd(hcd);
+ iounmap(hcd->regs);
usb_put_hcd(hcd);
platform_set_drvdata(pdev, NULL);
--
1.8.3
More information about the linux-yocto
mailing list