On Fri, Sep 12, 2008 at 08:50:33PM +0300, Felipe Balbi wrote:
> On Fri, Sep 12, 2008 at 09:32:56AM -0700, David Brownell wrote:
> > On Friday 12 September 2008, Felipe Balbi wrote:
> > > -       hcd->regs = (void __iomem *) (int) IO_ADDRESS(hcd->rsrc_start);
> > > +       hcd->regs = ioremap(hcd->rsrc_start, hcd->rsrc_len);
> > 
> > This is missing its sibling iounmap() ...
> 
> God... thanks Dave. Good catch. Patch coming soonish.

Here's the updated version. While at it, I'll send another patch getting
rid of some other mistakes during probe.

===== cut here ====

>From 818dc8ebd261cdc59670fe1580248ad47f18a1de Mon Sep 17 00:00:00 2001
From: Felipe Balbi <[EMAIL PROTECTED]>
Date: Fri, 12 Sep 2008 21:07:09 +0300
Subject: [PATCH] omap: usb: ehci: fix usb of hcd->regs

hcd->regs should be initialized by ioremaping hcd->rsrc_start and
hcd->rsrc_len. Fix it for ehci-omap.c.

Signed-off-by: Felipe Balbi <[EMAIL PROTECTED]>
---
 drivers/usb/host/ehci-omap.c |   10 ++++++++--
 1 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/usb/host/ehci-omap.c b/drivers/usb/host/ehci-omap.c
index 8f122e5..fff4195 100644
--- a/drivers/usb/host/ehci-omap.c
+++ b/drivers/usb/host/ehci-omap.c
@@ -438,7 +438,11 @@ static int ehci_hcd_omap_drv_probe(struct platform_device 
*dev)
        hcd->rsrc_start = dev->resource[0].start;
        hcd->rsrc_len = dev->resource[0].end - dev->resource[0].start + 1;
 
-       hcd->regs = (void __iomem *) (int) IO_ADDRESS(hcd->rsrc_start);
+       hcd->regs = ioremap(hcd->rsrc_start, hcd->rsrc_len);
+       if (!hcd->regs) {
+               dev_err(&dev->dev, "ioremap failed\n");
+               return -ENOMEM;
+       }
 
        ehci = hcd_to_ehci(hcd);
        ehci->caps = hcd->regs;
@@ -457,8 +461,9 @@ static int ehci_hcd_omap_drv_probe(struct platform_device 
*dev)
 
        dev_dbg(hcd->self.controller, "ERR: add_hcd");
        omap_stop_ehc(dev, hcd);
-
+       iounmap(hcd->regs);
        usb_put_hcd(hcd);
+
        return retval;
 }
 
@@ -483,6 +488,7 @@ static int ehci_hcd_omap_drv_remove(struct platform_device 
*dev)
 
        dev_dbg(&dev->dev, "ehci_hcd_omap_drv_remove()");
 
+       iounmap(hcd->regs);
        usb_remove_hcd(hcd);
        usb_put_hcd(hcd);
        omap_stop_ehc(dev, hcd);
-- 
1.6.0.1.196.g01914

-- 
balbi
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to