On Thu, 28 Jul 2011 tom.leiming@xxxxxxxxx wrote: > From: Ming Lei <tom.leiming@xxxxxxxxx> > > Obviously, disabling & put regulator and iounmap(hcd->regs) > are missed in .remove and failure handling path of .probe, > so add them. > > Signed-off-by: Ming Lei <tom.leiming@xxxxxxxxx> > --- > drivers/usb/host/ehci-omap.c | 16 ++++++++++++++++ > 1 files changed, 16 insertions(+), 0 deletions(-) > > diff --git a/drivers/usb/host/ehci-omap.c b/drivers/usb/host/ehci-omap.c > index 55a57c2..23dc8769 100644 > --- a/drivers/usb/host/ehci-omap.c > +++ b/drivers/usb/host/ehci-omap.c > @@ -98,6 +98,18 @@ static void omap_ehci_soft_phy_reset(struct platform_device *pdev, u8 port) > } > } > > +static void disable_put_regulator( > + struct ehci_hcd_omap_platform_data *pdata) > +{ > + int i; > + > + for (i = 0 ; i < OMAP3_HS_USB_PORTS ; i++) { > + if (pdata->regulator[i]) { > + regulator_disable(pdata->regulator[i]); > + regulator_put(pdata->regulator[i]); > + } > + } > +} > > /* configure so an HC device and id are always provided */ > /* always called with process context; sleeping is OK */ > @@ -231,6 +243,8 @@ err_add_hcd: > omap_usbhs_disable(dev); > > err_enable: > + disable_put_regulator(pdata); > + iounmap(hcd->regs); > usb_put_hcd(hcd); > > err_io: Doesn't iounmap() belong after the err_io label? The ioremap() call is made before usb_create_hcd() gets called. (And if that line is moved, the argument should be changed to regs instead of hcd->regs.) > @@ -253,6 +267,8 @@ static int ehci_hcd_omap_remove(struct platform_device *pdev) > > usb_remove_hcd(hcd); > omap_usbhs_disable(dev); > + disable_put_regulator(dev->platform_data); > + iounmap(hcd->regs); > usb_put_hcd(hcd); > return 0; > } Alan Stern -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html