| From 428525f97153505e83983460a8d08a3210aa6b8a Mon Sep 17 00:00:00 2001 |
| From: Roger Quadros <rogerq@ti.com> |
| Date: Thu, 14 Feb 2013 17:08:08 +0200 |
| Subject: USB: ehci-omap: Don't free gpios that we didn't request |
| |
| From: Roger Quadros <rogerq@ti.com> |
| |
| commit 428525f97153505e83983460a8d08a3210aa6b8a upstream. |
| |
| This driver does not request any gpios so don't free them. |
| Fixes L3 bus error on multiple modprobe/rmmod of ehci_hcd |
| with ehci-omap in use. |
| |
| Without this patch, EHCI will break on repeated insmod/rmmod |
| of ehci_hcd for all OMAP2+ platforms that use EHCI and |
| set 'phy_reset = true' in usbhs_omap_board_data. |
| i.e. |
| |
| board-3430sdp.c: .phy_reset = true, |
| board-3630sdp.c: .phy_reset = true, |
| board-am3517crane.c: .phy_reset = true, |
| board-am3517evm.c: .phy_reset = true, |
| board-cm-t3517.c: .phy_reset = true, |
| board-cm-t35.c: .phy_reset = true, |
| board-devkit8000.c: .phy_reset = true, |
| board-igep0020.c: .phy_reset = true, |
| board-igep0020.c: .phy_reset = true, |
| board-omap3beagle.c: .phy_reset = true, |
| board-omap3evm.c: .phy_reset = true, |
| board-omap3pandora.c: .phy_reset = true, |
| board-omap3stalker.c: .phy_reset = true, |
| board-omap3touchbook.c: .phy_reset = true, |
| board-omap4panda.c: .phy_reset = false, |
| board-overo.c: .phy_reset = true, |
| board-zoom.c: .phy_reset = true, |
| |
| Signed-off-by: Roger Quadros <rogerq@ti.com> |
| Reviewed-by: Felipe Balbi <balbi@ti.com> |
| Acked-by: Alan Stern <stern@rowland.harvard.edu> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/usb/host/ehci-omap.c | 8 -------- |
| 1 file changed, 8 deletions(-) |
| |
| --- a/drivers/usb/host/ehci-omap.c |
| +++ b/drivers/usb/host/ehci-omap.c |
| @@ -288,7 +288,6 @@ static int ehci_hcd_omap_remove(struct p |
| { |
| struct device *dev = &pdev->dev; |
| struct usb_hcd *hcd = dev_get_drvdata(dev); |
| - struct ehci_hcd_omap_platform_data *pdata = dev->platform_data; |
| |
| usb_remove_hcd(hcd); |
| disable_put_regulator(dev->platform_data); |
| @@ -298,13 +297,6 @@ static int ehci_hcd_omap_remove(struct p |
| pm_runtime_put_sync(dev); |
| pm_runtime_disable(dev); |
| |
| - if (pdata->phy_reset) { |
| - if (gpio_is_valid(pdata->reset_gpio_port[0])) |
| - gpio_free(pdata->reset_gpio_port[0]); |
| - |
| - if (gpio_is_valid(pdata->reset_gpio_port[1])) |
| - gpio_free(pdata->reset_gpio_port[1]); |
| - } |
| return 0; |
| } |
| |