public inbox for linux-omap@vger.kernel.org
 help / color / mirror / Atom feed
* [patch-2.6.34-rc2+ 00/11] musb patches
@ 2010-03-24 11:47 Felipe Balbi
  2010-03-24 11:47 ` [patch-2.6.34-rc2+ 04/11] musb: save and restore missing bus control register Felipe Balbi
                   ` (6 more replies)
  0 siblings, 7 replies; 17+ messages in thread
From: Felipe Balbi @ 2010-03-24 11:47 UTC (permalink / raw)
  To: Greg KH; +Cc: Linux USB Mailing List, Linux OMAP Mailing List, Felipe Balbi

Hi Greg,

the following patches are the fixes I have for you for next
-rc release.

Ajay Kumar Gupta (2):
  musb: fix power field to hold all possible values
  musb: save and restore missing bus control register

Dan Carpenter (1):
  musb: potential use after free

Sergei Shtylyov (8):
  MUSB: fix DaVinci glue layer dependency
  MUSB: Blackfin: don't fake blackfin_interrupt() result
  musb_core: don't touch 'musb->clock' in musb_free()
  musb_core: don't prevent disabling clock on driver unload
  MUSB: DaVinci: fix musb_platform_init() error cleanup path
  MUSB: OMAP: don't call clk_put()
  musb_core: don't call musb_platform_exit() twice
  musb_core: fix musb_init_controller() error cleanup path

 arch/arm/plat-omap/include/plat/usb.h |    2 +-
 drivers/usb/musb/Kconfig              |    2 +-
 drivers/usb/musb/Makefile             |    2 +-
 drivers/usb/musb/blackfin.c           |    8 +---
 drivers/usb/musb/davinci.c            |    2 +
 drivers/usb/musb/musb_core.c          |   76 ++++++++++++++++++---------------
 drivers/usb/musb/musb_core.h          |    2 +-
 drivers/usb/musb/musb_host.c          |    1 +
 drivers/usb/musb/omap2430.c           |    3 -
 9 files changed, 50 insertions(+), 48 deletions(-)


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [patch-2.6.34-rc2+ 01/11] musb: fix power field to hold all possible values
       [not found] ` <1269431279-22438-1-git-send-email-felipe.balbi-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
@ 2010-03-24 11:47   ` Felipe Balbi
  2010-03-24 11:47   ` [patch-2.6.34-rc2+ 02/11] MUSB: fix DaVinci glue layer dependency Felipe Balbi
                     ` (3 subsequent siblings)
  4 siblings, 0 replies; 17+ messages in thread
From: Felipe Balbi @ 2010-03-24 11:47 UTC (permalink / raw)
  To: Greg KH
  Cc: Linux USB Mailing List, Linux OMAP Mailing List, Ajay Kumar Gupta,
	Felipe Balbi

From: Ajay Kumar Gupta <ajay.gupta-l0cyMroinI0@public.gmane.org>

MUSB can supply upto 500mA such as, AM3517 and OMAP3EVM Rev >=E and thus
the 'power' field has to hold values above 255.

Signed-off-by: Ajay Kumar Gupta <ajay.gupta-l0cyMroinI0@public.gmane.org>
Signed-off-by: Felipe Balbi <felipe.balbi-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
---
 arch/arm/plat-omap/include/plat/usb.h |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/arm/plat-omap/include/plat/usb.h b/arch/arm/plat-omap/include/plat/usb.h
index 568578d..876ca8d 100644
--- a/arch/arm/plat-omap/include/plat/usb.h
+++ b/arch/arm/plat-omap/include/plat/usb.h
@@ -46,7 +46,7 @@ struct ehci_hcd_omap_platform_data {
 struct omap_musb_board_data {
 	u8	interface_type;
 	u8	mode;
-	u8	power;
+	u16	power;
 };
 
 enum musb_interface    {MUSB_INTERFACE_ULPI, MUSB_INTERFACE_UTMI};
-- 
1.7.0.rc0.33.g7c3932

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [patch-2.6.34-rc2+ 02/11] MUSB: fix DaVinci glue layer dependency
       [not found] ` <1269431279-22438-1-git-send-email-felipe.balbi-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
  2010-03-24 11:47   ` [patch-2.6.34-rc2+ 01/11] musb: fix power field to hold all possible values Felipe Balbi
@ 2010-03-24 11:47   ` Felipe Balbi
  2010-03-24 11:47   ` [patch-2.6.34-rc2+ 03/11] MUSB: Blackfin: don't fake blackfin_interrupt() result Felipe Balbi
                     ` (2 subsequent siblings)
  4 siblings, 0 replies; 17+ messages in thread
From: Felipe Balbi @ 2010-03-24 11:47 UTC (permalink / raw)
  To: Greg KH
  Cc: Linux USB Mailing List, Linux OMAP Mailing List, Sergei Shtylyov,
	Felipe Balbi

From: Sergei Shtylyov <sshtylyov-hkdhdckH98+B+jHODAdFcQ@public.gmane.org>

CONFIG_ARCH_DAVINCI now embraces both the "real" DaVinci and DA8xx/OMAP-L1x --
on which the DaVinci glue layer won't work. Change the Makefile dependency to
CONFIG_ARCH_DAVINCI_DMx which corresponds to "real" DaVinci.

Signed-off-by: Sergei Shtylyov <sshtylyov-hkdhdckH98+B+jHODAdFcQ@public.gmane.org>
Signed-off-by: Felipe Balbi <felipe.balbi-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
---
 drivers/usb/musb/Kconfig  |    2 +-
 drivers/usb/musb/Makefile |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/usb/musb/Kconfig b/drivers/usb/musb/Kconfig
index 5e3f3ee..cfd38ed 100644
--- a/drivers/usb/musb/Kconfig
+++ b/drivers/usb/musb/Kconfig
@@ -43,7 +43,7 @@ config USB_MUSB_SOC
 	default y if (BF52x && !BF522 && !BF523)
 
 comment "DaVinci 35x and 644x USB support"
-	depends on USB_MUSB_HDRC && ARCH_DAVINCI
+	depends on USB_MUSB_HDRC && ARCH_DAVINCI_DMx
 
 comment "OMAP 243x high speed USB support"
 	depends on USB_MUSB_HDRC && ARCH_OMAP2430
diff --git a/drivers/usb/musb/Makefile b/drivers/usb/musb/Makefile
index a641a76..a1677f9 100644
--- a/drivers/usb/musb/Makefile
+++ b/drivers/usb/musb/Makefile
@@ -6,7 +6,7 @@ musb_hdrc-objs := musb_core.o
 
 obj-$(CONFIG_USB_MUSB_HDRC)	+= musb_hdrc.o
 
-ifeq ($(CONFIG_ARCH_DAVINCI),y)
+ifeq ($(CONFIG_ARCH_DAVINCI_DMx),y)
 	musb_hdrc-objs	+= davinci.o
 endif
 
-- 
1.7.0.rc0.33.g7c3932

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [patch-2.6.34-rc2+ 03/11] MUSB: Blackfin: don't fake blackfin_interrupt() result
       [not found] ` <1269431279-22438-1-git-send-email-felipe.balbi-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
  2010-03-24 11:47   ` [patch-2.6.34-rc2+ 01/11] musb: fix power field to hold all possible values Felipe Balbi
  2010-03-24 11:47   ` [patch-2.6.34-rc2+ 02/11] MUSB: fix DaVinci glue layer dependency Felipe Balbi
@ 2010-03-24 11:47   ` Felipe Balbi
  2010-03-24 11:47   ` [patch-2.6.34-rc2+ 08/11] MUSB: DaVinci: fix musb_platform_init() error cleanup path Felipe Balbi
  2010-03-24 11:47   ` [patch-2.6.34-rc2+ 09/11] MUSB: OMAP: don't call clk_put() Felipe Balbi
  4 siblings, 0 replies; 17+ messages in thread
From: Felipe Balbi @ 2010-03-24 11:47 UTC (permalink / raw)
  To: Greg KH
  Cc: Linux USB Mailing List, Linux OMAP Mailing List, Sergei Shtylyov,
	Sergei Shtylyov, Felipe Balbi

From: Sergei Shtylyov <sshtylyov-hkdhdckH98+B+jHODAdFcQ@public.gmane.org>

Commit a5073b52833e4df8e16c93dc4cbb7e0c558c74a2 (musb_gadget: fix unhandled
endpoint 0 IRQs) misses this change to blackfin.c: stop faking successful
result of blackfin_interrupt() and emitting a debug message on an unhandled
interrupt.

Signed-off-by: Sergei Shtylyov <sshtylyov-Igf4POYTYCDQT0dZR+AlfA@public.gmane.org>
Signed-off-by: Felipe Balbi <felipe.balbi-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
---
 drivers/usb/musb/blackfin.c |    8 +-------
 1 files changed, 1 insertions(+), 7 deletions(-)

diff --git a/drivers/usb/musb/blackfin.c b/drivers/usb/musb/blackfin.c
index 7160959..3774815 100644
--- a/drivers/usb/musb/blackfin.c
+++ b/drivers/usb/musb/blackfin.c
@@ -173,13 +173,7 @@ static irqreturn_t blackfin_interrupt(int irq, void *__hci)
 
 	spin_unlock_irqrestore(&musb->lock, flags);
 
-	/* REVISIT we sometimes get spurious IRQs on g_ep0
-	 * not clear why... fall in BF54x too.
-	 */
-	if (retval != IRQ_HANDLED)
-		DBG(5, "spurious?\n");

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [patch-2.6.34-rc2+ 04/11] musb: save and restore missing bus control register
  2010-03-24 11:47 [patch-2.6.34-rc2+ 00/11] musb patches Felipe Balbi
@ 2010-03-24 11:47 ` Felipe Balbi
  2010-03-24 11:47 ` [patch-2.6.34-rc2+ 05/11] musb: potential use after free Felipe Balbi
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 17+ messages in thread
From: Felipe Balbi @ 2010-03-24 11:47 UTC (permalink / raw)
  To: Greg KH
  Cc: Linux USB Mailing List, Linux OMAP Mailing List, Ajay Kumar Gupta,
	Felipe Balbi

From: Ajay Kumar Gupta <ajay.gupta@ti.com>

Added the missing BUS_CONTROL register in musb
save/restore routines.

Signed-off-by: Ajay Kumar Gupta <ajay.gupta@ti.com>
Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com>
---
 drivers/usb/musb/musb_core.c |    2 ++
 drivers/usb/musb/musb_core.h |    2 +-
 2 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
index 69a1429..7a7f6ec 100644
--- a/drivers/usb/musb/musb_core.c
+++ b/drivers/usb/musb/musb_core.c
@@ -2178,6 +2178,7 @@ void musb_save_context(struct musb *musb)
 	if (is_host_enabled(musb)) {
 		musb_context.frame = musb_readw(musb_base, MUSB_FRAME);
 		musb_context.testmode = musb_readb(musb_base, MUSB_TESTMODE);
+		musb_context.busctl = musb_read_ulpi_buscontrol(musb->mregs);
 	}
 	musb_context.power = musb_readb(musb_base, MUSB_POWER);
 	musb_context.intrtxe = musb_readw(musb_base, MUSB_INTRTXE);
@@ -2249,6 +2250,7 @@ void musb_restore_context(struct musb *musb)
 	if (is_host_enabled(musb)) {
 		musb_writew(musb_base, MUSB_FRAME, musb_context.frame);
 		musb_writeb(musb_base, MUSB_TESTMODE, musb_context.testmode);
+		musb_write_ulpi_buscontrol(musb->mregs, musb_context.busctl);
 	}
 	musb_writeb(musb_base, MUSB_POWER, musb_context.power);
 	musb_writew(musb_base, MUSB_INTRTXE, musb_context.intrtxe);
diff --git a/drivers/usb/musb/musb_core.h b/drivers/usb/musb/musb_core.h
index f57ecd0..d7b277e 100644
--- a/drivers/usb/musb/musb_core.h
+++ b/drivers/usb/musb/musb_core.h
@@ -479,7 +479,7 @@ struct musb_context_registers {
 	u16 frame;
 	u8 index, testmode;
 
-	u8 devctl, misc;
+	u8 devctl, busctl, misc;
 
 	struct musb_csr_regs index_regs[MUSB_C_NUM_EPS];
 };
-- 
1.7.0.rc0.33.g7c3932


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [patch-2.6.34-rc2+ 05/11] musb: potential use after free
  2010-03-24 11:47 [patch-2.6.34-rc2+ 00/11] musb patches Felipe Balbi
  2010-03-24 11:47 ` [patch-2.6.34-rc2+ 04/11] musb: save and restore missing bus control register Felipe Balbi
@ 2010-03-24 11:47 ` Felipe Balbi
  2010-03-24 11:47 ` [patch-2.6.34-rc2+ 06/11] musb_core: don't touch 'musb->clock' in musb_free() Felipe Balbi
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 17+ messages in thread
From: Felipe Balbi @ 2010-03-24 11:47 UTC (permalink / raw)
  To: Greg KH
  Cc: Linux USB Mailing List, Linux OMAP Mailing List, Dan Carpenter,
	Felipe Balbi

From: Dan Carpenter <error27@gmail.com>

We assign "urb->hcpriv = qh;" a few lines down.  I'm pretty sure we
want it "urb->hcpriv" to be NULL not a freed value.

Signed-off-by: Dan Carpenter <error27@gmail.com>
Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com>
---
 drivers/usb/musb/musb_host.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c
index dec896e..877d20b 100644
--- a/drivers/usb/musb/musb_host.c
+++ b/drivers/usb/musb/musb_host.c
@@ -2042,6 +2042,7 @@ static int musb_urb_enqueue(
 		 * odd, rare, error prone, but legal.
 		 */
 		kfree(qh);
+		qh = NULL;
 		ret = 0;
 	} else
 		ret = musb_schedule(musb, qh,
-- 
1.7.0.rc0.33.g7c3932


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [patch-2.6.34-rc2+ 06/11] musb_core: don't touch 'musb->clock' in musb_free()
  2010-03-24 11:47 [patch-2.6.34-rc2+ 00/11] musb patches Felipe Balbi
  2010-03-24 11:47 ` [patch-2.6.34-rc2+ 04/11] musb: save and restore missing bus control register Felipe Balbi
  2010-03-24 11:47 ` [patch-2.6.34-rc2+ 05/11] musb: potential use after free Felipe Balbi
@ 2010-03-24 11:47 ` Felipe Balbi
  2010-03-24 11:47 ` [patch-2.6.34-rc2+ 07/11] musb_core: don't prevent disabling clock on driver unload Felipe Balbi
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 17+ messages in thread
From: Felipe Balbi @ 2010-03-24 11:47 UTC (permalink / raw)
  To: Greg KH
  Cc: Linux USB Mailing List, Linux OMAP Mailing List, Sergei Shtylyov,
	Felipe Balbi

From: Sergei Shtylyov <sshtylyov@ru.mvista.com>

Remove duplicate/unbalanced calls to clk_disable()/clk_put() in musb_free():

- clk_disable() is called by musb_platform_exit() just prior to this call;
- clk_put() is called by the callers of musb_free() prior to calling it...

Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com>
---
 drivers/usb/musb/musb_core.c |    5 -----
 1 files changed, 0 insertions(+), 5 deletions(-)

diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
index 7a7f6ec..d559ed6 100644
--- a/drivers/usb/musb/musb_core.c
+++ b/drivers/usb/musb/musb_core.c
@@ -1854,11 +1854,6 @@ static void musb_free(struct musb *musb)
 	musb_platform_exit(musb);
 	musb_writeb(musb->mregs, MUSB_DEVCTL, 0);
 
-	if (musb->clock) {
-		clk_disable(musb->clock);
-		clk_put(musb->clock);
-	}
-
 #ifdef CONFIG_USB_MUSB_HDRC_HCD
 	usb_put_hcd(musb_to_hcd(musb));
 #else
-- 
1.7.0.rc0.33.g7c3932


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [patch-2.6.34-rc2+ 07/11] musb_core: don't prevent disabling clock on driver unload
  2010-03-24 11:47 [patch-2.6.34-rc2+ 00/11] musb patches Felipe Balbi
                   ` (2 preceding siblings ...)
  2010-03-24 11:47 ` [patch-2.6.34-rc2+ 06/11] musb_core: don't touch 'musb->clock' in musb_free() Felipe Balbi
@ 2010-03-24 11:47 ` Felipe Balbi
       [not found] ` <1269431279-22438-1-git-send-email-felipe.balbi-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 17+ messages in thread
From: Felipe Balbi @ 2010-03-24 11:47 UTC (permalink / raw)
  To: Greg KH
  Cc: Linux USB Mailing List, Linux OMAP Mailing List, Sergei Shtylyov,
	Felipe Balbi

From: Sergei Shtylyov <sshtylyov@ru.mvista.com>

Resetting 'musb->clock' to NULL in musb_shutdown() prevents musb_platform_exit()
from properly disabling the clock when unloading the driver -- don't do it.

Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com>
---
 drivers/usb/musb/musb_core.c |    4 +---
 1 files changed, 1 insertions(+), 3 deletions(-)

diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
index d559ed6..827b813 100644
--- a/drivers/usb/musb/musb_core.c
+++ b/drivers/usb/musb/musb_core.c
@@ -964,10 +964,8 @@ static void musb_shutdown(struct platform_device *pdev)
 	spin_lock_irqsave(&musb->lock, flags);
 	musb_platform_disable(musb);
 	musb_generic_disable(musb);
-	if (musb->clock) {
+	if (musb->clock)
 		clk_put(musb->clock);
-		musb->clock = NULL;
-	}
 	spin_unlock_irqrestore(&musb->lock, flags);
 
 	/* FIXME power down */
-- 
1.7.0.rc0.33.g7c3932


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [patch-2.6.34-rc2+ 08/11] MUSB: DaVinci: fix musb_platform_init() error cleanup path
       [not found] ` <1269431279-22438-1-git-send-email-felipe.balbi-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
                     ` (2 preceding siblings ...)
  2010-03-24 11:47   ` [patch-2.6.34-rc2+ 03/11] MUSB: Blackfin: don't fake blackfin_interrupt() result Felipe Balbi
@ 2010-03-24 11:47   ` Felipe Balbi
  2010-03-24 11:47   ` [patch-2.6.34-rc2+ 09/11] MUSB: OMAP: don't call clk_put() Felipe Balbi
  4 siblings, 0 replies; 17+ messages in thread
From: Felipe Balbi @ 2010-03-24 11:47 UTC (permalink / raw)
  To: Greg KH
  Cc: Linux USB Mailing List, Linux OMAP Mailing List, Sergei Shtylyov,
	Felipe Balbi

From: Sergei Shtylyov <sshtylyov-hkdhdckH98+B+jHODAdFcQ@public.gmane.org>

This function forgets to call clk_disable() iff reading the USB module version
register returns 0.

Signed-off-by: Sergei Shtylyov <sshtylyov-hkdhdckH98+B+jHODAdFcQ@public.gmane.org>
Signed-off-by: Felipe Balbi <felipe.balbi-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
---
 drivers/usb/musb/davinci.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/drivers/usb/musb/davinci.c b/drivers/usb/musb/davinci.c
index d37abf3..8a3c5a2 100644
--- a/drivers/usb/musb/davinci.c
+++ b/drivers/usb/musb/davinci.c
@@ -445,6 +445,8 @@ int __init musb_platform_init(struct musb *musb, void *board_data)
 	return 0;
 
 fail:
+	clk_disable(musb->clock);
+
 	usb_nop_xceiv_unregister();
 	return -ENODEV;
 }
-- 
1.7.0.rc0.33.g7c3932

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [patch-2.6.34-rc2+ 09/11] MUSB: OMAP: don't call clk_put()
       [not found] ` <1269431279-22438-1-git-send-email-felipe.balbi-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
                     ` (3 preceding siblings ...)
  2010-03-24 11:47   ` [patch-2.6.34-rc2+ 08/11] MUSB: DaVinci: fix musb_platform_init() error cleanup path Felipe Balbi
@ 2010-03-24 11:47   ` Felipe Balbi
  4 siblings, 0 replies; 17+ messages in thread
From: Felipe Balbi @ 2010-03-24 11:47 UTC (permalink / raw)
  To: Greg KH
  Cc: Linux USB Mailing List, Linux OMAP Mailing List, Sergei Shtylyov,
	Felipe Balbi

From: Sergei Shtylyov <sshtylyov-hkdhdckH98+B+jHODAdFcQ@public.gmane.org>

Remove duplicate/unbalanced call to clk_put() from musb_platform_exit() --
clk_put() gets called from musb_core.c anyway...

Signed-off-by: Sergei Shtylyov <sshtylyov-hkdhdckH98+B+jHODAdFcQ@public.gmane.org>
Signed-off-by: Felipe Balbi <felipe.balbi-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
---
 drivers/usb/musb/omap2430.c |    3 ---
 1 files changed, 0 insertions(+), 3 deletions(-)

diff --git a/drivers/usb/musb/omap2430.c b/drivers/usb/musb/omap2430.c
index dd64aeb..f8cc636 100644
--- a/drivers/usb/musb/omap2430.c
+++ b/drivers/usb/musb/omap2430.c
@@ -341,8 +341,5 @@ int musb_platform_exit(struct musb *musb)
 
 	musb_platform_suspend(musb);
 
-	clk_put(musb->clock);
-	musb->clock = NULL;

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [patch-2.6.34-rc2+ 10/11] musb_core: don't call musb_platform_exit() twice
  2010-03-24 11:47 [patch-2.6.34-rc2+ 00/11] musb patches Felipe Balbi
                   ` (4 preceding siblings ...)
       [not found] ` <1269431279-22438-1-git-send-email-felipe.balbi-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
@ 2010-03-24 11:47 ` Felipe Balbi
       [not found]   ` <1269431279-22438-11-git-send-email-felipe.balbi-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
  2010-03-24 11:47 ` [patch-2.6.34-rc2+ 11/11] musb_core: fix musb_init_controller() error cleanup path Felipe Balbi
  6 siblings, 1 reply; 17+ messages in thread
From: Felipe Balbi @ 2010-03-24 11:47 UTC (permalink / raw)
  To: Greg KH
  Cc: Linux USB Mailing List, Linux OMAP Mailing List, Sergei Shtylyov,
	Felipe Balbi

From: Sergei Shtylyov <sshtylyov@ru.mvista.com>

musb_platform_exit() is called twice from musb_init_controller() iff controller
initialization fails. Move the call (and the DevCtl register writes surrounding
it) from musb_free() to musb_remove().

Fix misplaced and now incorrect 'goto's in musb_init_controller().

Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com>
---
 drivers/usb/musb/musb_core.c |   17 +++++++----------
 1 files changed, 7 insertions(+), 10 deletions(-)

diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
index 827b813..90ac17b 100644
--- a/drivers/usb/musb/musb_core.c
+++ b/drivers/usb/musb/musb_core.c
@@ -1848,10 +1848,6 @@ static void musb_free(struct musb *musb)
 	put_device(musb->xceiv->dev);
 #endif
 
-	musb_writeb(musb->mregs, MUSB_DEVCTL, 0);
-	musb_platform_exit(musb);
-	musb_writeb(musb->mregs, MUSB_DEVCTL, 0);
-
 #ifdef CONFIG_USB_MUSB_HDRC_HCD
 	usb_put_hcd(musb_to_hcd(musb));
 #else
@@ -2029,8 +2025,6 @@ bad_config:
 		musb->xceiv->state = OTG_STATE_A_IDLE;
 
 		status = usb_add_hcd(musb_to_hcd(musb), -1, 0);
-		if (status)
-			goto fail;
 
 		DBG(1, "%s mode, status %d, devctl %02x %c\n",
 			"HOST", status,
@@ -2045,8 +2039,6 @@ bad_config:
 		musb->xceiv->state = OTG_STATE_B_IDLE;
 
 		status = musb_gadget_setup(musb);
-		if (status)
-			goto fail;
 
 		DBG(1, "%s mode, status %d, dev%02x\n",
 			is_otg_enabled(musb) ? "OTG" : "PERIPHERAL",
@@ -2054,6 +2046,8 @@ bad_config:
 			musb_readb(musb->mregs, MUSB_DEVCTL));
 
 	}
+	if (status < 0)
+		goto fail2;
 
 	status = musb_init_debugfs(musb);
 	if (status < 0)
@@ -2061,9 +2055,9 @@ bad_config:
 
 #ifdef CONFIG_SYSFS
 	status = sysfs_create_group(&musb->controller->kobj, &musb_attr_group);
-#endif
 	if (status)
 		goto fail2;
+#endif
 
 	dev_info(dev, "USB %s mode controller at %p using %s, IRQ %d\n",
 			({char *s;
@@ -2126,7 +2120,6 @@ static int __init musb_probe(struct platform_device *pdev)
 	/* clobbered by use_dma=n */
 	orig_dma_mask = dev->dma_mask;
 #endif
-
 	status = musb_init_controller(dev, irq, base);
 	if (status < 0)
 		iounmap(base);
@@ -2150,6 +2143,10 @@ static int __exit musb_remove(struct platform_device *pdev)
 	if (musb->board_mode == MUSB_HOST)
 		usb_remove_hcd(musb_to_hcd(musb));
 #endif
+	musb_writeb(musb->mregs, MUSB_DEVCTL, 0);
+	musb_platform_exit(musb);
+	musb_writeb(musb->mregs, MUSB_DEVCTL, 0);
+
 	musb_free(musb);
 	iounmap(ctrl_base);
 	device_init_wakeup(&pdev->dev, 0);
-- 
1.7.0.rc0.33.g7c3932


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [patch-2.6.34-rc2+ 11/11] musb_core: fix musb_init_controller() error cleanup path
  2010-03-24 11:47 [patch-2.6.34-rc2+ 00/11] musb patches Felipe Balbi
                   ` (5 preceding siblings ...)
  2010-03-24 11:47 ` [patch-2.6.34-rc2+ 10/11] musb_core: don't call musb_platform_exit() twice Felipe Balbi
@ 2010-03-24 11:47 ` Felipe Balbi
  2010-03-24 12:16   ` Sergei Shtylyov
  6 siblings, 1 reply; 17+ messages in thread
From: Felipe Balbi @ 2010-03-24 11:47 UTC (permalink / raw)
  To: Greg KH
  Cc: Linux USB Mailing List, Linux OMAP Mailing List, Sergei Shtylyov,
	Felipe Balbi

From: Sergei Shtylyov <sshtylyov@ru.mvista.com>

This function forgets to call usb_remove_hcd() or musb_gadget_cleanup() iff
sysfs_create_group() fails.

Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>

[ felipe.balbi@nokia.com : review the entire error path
	not only when we fail hcd or gadget ]

Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com>
---
 drivers/usb/musb/musb_core.c |   50 +++++++++++++++++++++++++++--------------
 1 files changed, 33 insertions(+), 17 deletions(-)

diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
index 90ac17b..13f36bf 100644
--- a/drivers/usb/musb/musb_core.c
+++ b/drivers/usb/musb/musb_core.c
@@ -1875,8 +1875,10 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl)
 	 */
 	if (!plat) {
 		dev_dbg(dev, "no platform_data?\n");
-		return -ENODEV;
+		status = -ENODEV;
+		goto fail0;
 	}
+
 	switch (plat->mode) {
 	case MUSB_HOST:
 #ifdef CONFIG_USB_MUSB_HDRC_HCD
@@ -1898,13 +1900,16 @@ bad_config:
 #endif
 	default:
 		dev_err(dev, "incompatible Kconfig role setting\n");
-		return -EINVAL;
+		status = -EINVAL;
+		goto fail0;
 	}
 
 	/* allocate */
 	musb = allocate_instance(dev, plat->config, ctrl);
-	if (!musb)
-		return -ENOMEM;
+	if (!musb) {
+		status = -ENOMEM;
+		goto fail0;
+	}
 
 	spin_lock_init(&musb->lock);
 	musb->board_mode = plat->mode;
@@ -1922,7 +1927,7 @@ bad_config:
 		if (IS_ERR(musb->clock)) {
 			status = PTR_ERR(musb->clock);
 			musb->clock = NULL;
-			goto fail;
+			goto fail1;
 		}
 	}
 
@@ -1941,12 +1946,12 @@ bad_config:
 	 */
 	musb->isr = generic_interrupt;
 	status = musb_platform_init(musb, plat->board_data);
-
 	if (status < 0)
-		goto fail;
+		goto fail2;
+
 	if (!musb->isr) {
 		status = -ENODEV;
-		goto fail2;
+		goto fail3;
 	}
 
 #ifndef CONFIG_MUSB_PIO_ONLY
@@ -1972,7 +1977,7 @@ bad_config:
 			? MUSB_CONTROLLER_MHDRC
 			: MUSB_CONTROLLER_HDRC, musb);
 	if (status < 0)
-		goto fail2;
+		goto fail3;
 
 #ifdef CONFIG_USB_MUSB_OTG
 	setup_timer(&musb->otg_timer, musb_otg_timer_func, (unsigned long) musb);
@@ -1985,7 +1990,7 @@ bad_config:
 	if (request_irq(nIrq, musb->isr, 0, dev_name(dev), musb)) {
 		dev_err(dev, "request_irq %d failed!\n", nIrq);
 		status = -ENODEV;
-		goto fail2;
+		goto fail3;
 	}
 	musb->nIrq = nIrq;
 /* FIXME this handles wakeup irqs wrong */
@@ -2047,7 +2052,7 @@ bad_config:
 
 	}
 	if (status < 0)
-		goto fail2;
+		goto fail4;
 
 	status = musb_init_debugfs(musb);
 	if (status < 0)
@@ -2056,7 +2061,7 @@ bad_config:
 #ifdef CONFIG_SYSFS
 	status = sysfs_create_group(&musb->controller->kobj, &musb_attr_group);
 	if (status)
-		goto fail2;
+		goto fail4;
 #endif
 
 	dev_info(dev, "USB %s mode controller at %p using %s, IRQ %d\n",
@@ -2073,17 +2078,28 @@ bad_config:
 
 	return 0;
 
-fail2:
+fail4:
+	if (!is_otg_enabled(musb) && is_host_enabled(musb))
+		usb_remove_hcd(musb_to_hcd(musb));
+	else
+		musb_gadget_cleanup(musb);
+	device_init_wakeup(dev, 0);
+
+fail3:
 	musb_platform_exit(musb);
-fail:
-	dev_err(musb->controller,
-		"musb_init_controller failed with status %d\n", status);
 
+fail2:
 	if (musb->clock)
 		clk_put(musb->clock);
-	device_init_wakeup(dev, 0);
+
+fail1:
+	dev_err(musb->controller,
+		"musb_init_controller failed with status %d\n", status);
+
 	musb_free(musb);
 
+fail0:
+
 	return status;
 
 }
-- 
1.7.0.rc0.33.g7c3932


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* Re: [patch-2.6.34-rc2+ 10/11] musb_core: don't call musb_platform_exit() twice
       [not found]   ` <1269431279-22438-11-git-send-email-felipe.balbi-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
@ 2010-03-24 12:10     ` Sergei Shtylyov
  2010-03-24 12:26       ` Sergei Shtylyov
       [not found]       ` <4BAA0122.2060402-hkdhdckH98+B+jHODAdFcQ@public.gmane.org>
  0 siblings, 2 replies; 17+ messages in thread
From: Sergei Shtylyov @ 2010-03-24 12:10 UTC (permalink / raw)
  To: Felipe Balbi; +Cc: Greg KH, Linux USB Mailing List, Linux OMAP Mailing List

Hello.

Felipe Balbi wrote:

> From: Sergei Shtylyov <sshtylyov-hkdhdckH98+B+jHODAdFcQ@public.gmane.org>
>
> musb_platform_exit() is called twice from musb_init_controller() iff controller
> initialization fails. Move the call (and the DevCtl register writes surrounding
> it) from musb_free() to musb_remove().
>
> Fix misplaced and now incorrect 'goto's in musb_init_controller().
>
> Signed-off-by: Sergei Shtylyov <sshtylyov-hkdhdckH98+B+jHODAdFcQ@public.gmane.org>
> Signed-off-by: Felipe Balbi <felipe.balbi-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
> ---
>  drivers/usb/musb/musb_core.c |   17 +++++++----------
>  1 files changed, 7 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
> index 827b813..90ac17b 100644
> --- a/drivers/usb/musb/musb_core.c
> +++ b/drivers/usb/musb/musb_core.c
>   
[...]
> @@ -2054,6 +2046,8 @@ bad_config:
>  			musb_readb(musb->mregs, MUSB_DEVCTL));
>  
>  	}
> +	if (status < 0)
> +		goto fail2;
>  
>  	status = musb_init_debugfs(musb);
>  	if (status < 0)
>   

   Hm, I don't see this call in the current driver -- are you sure 
you've used the right tree?

WBR, Sergei

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [patch-2.6.34-rc2+ 11/11] musb_core: fix musb_init_controller() error cleanup path
  2010-03-24 11:47 ` [patch-2.6.34-rc2+ 11/11] musb_core: fix musb_init_controller() error cleanup path Felipe Balbi
@ 2010-03-24 12:16   ` Sergei Shtylyov
  0 siblings, 0 replies; 17+ messages in thread
From: Sergei Shtylyov @ 2010-03-24 12:16 UTC (permalink / raw)
  To: Felipe Balbi; +Cc: Greg KH, Linux USB Mailing List, Linux OMAP Mailing List

Hello.

Felipe Balbi wrote:

> From: Sergei Shtylyov <sshtylyov@ru.mvista.com>
>
> This function forgets to call usb_remove_hcd() or musb_gadget_cleanup() iff
> sysfs_create_group() fails.
>
> Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
>
> [ felipe.balbi@nokia.com : review the entire error path
> 	not only when we fail hcd or gadget ]
>
> Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com>
> ---
>  drivers/usb/musb/musb_core.c |   50 +++++++++++++++++++++++++++--------------
>  1 files changed, 33 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
> index 90ac17b..13f36bf 100644
> --- a/drivers/usb/musb/musb_core.c
> +++ b/drivers/usb/musb/musb_core.c
[...]


> @@ -2047,7 +2052,7 @@ bad_config:
>  
>  	}
>  	if (status < 0)
> -		goto fail2;
> +		goto fail4;
>   

   No, the label should be 'fail3' here. In this case usb_add_hcd() or 
musb_gadget_setup() have failed, so we shouldn't undo them...

>  	status = musb_init_debugfs(musb);
>  	if (status < 0)
>   

   Is there also a 'goto' that needs to be fixed up?

> @@ -2056,7 +2061,7 @@ bad_config:
>  #ifdef CONFIG_SYSFS
>  	status = sysfs_create_group(&musb->controller->kobj, &musb_attr_group);
>  	if (status)
> -		goto fail2;
> +		goto fail4;
>  #endif
>  
>  	dev_info(dev, "USB %s mode controller at %p using %s, IRQ %d\n",
> @@ -2073,17 +2078,28 @@ bad_config:
>  
>  	return 0;
>  
> -fail2:
> +fail4:
> +	if (!is_otg_enabled(musb) && is_host_enabled(musb))
> +		usb_remove_hcd(musb_to_hcd(musb));
> +	else
> +		musb_gadget_cleanup(musb);
> +	device_init_wakeup(dev, 0);
> +
> +fail3:
>  	musb_platform_exit(musb);
> -fail:
> -	dev_err(musb->controller,
> -		"musb_init_controller failed with status %d\n", status);
>  
> +fail2:
>  	if (musb->clock)
>  		clk_put(musb->clock);
> -	device_init_wakeup(dev, 0);
> +
> +fail1:
> +	dev_err(musb->controller,
> +		"musb_init_controller failed with status %d\n", status);
> +
>  	musb_free(musb);
>  
> +fail0:
> +
>  	return status;
>  
>  }
>   

WBR, Sergei


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [patch-2.6.34-rc2+ 10/11] musb_core: don't call musb_platform_exit() twice
  2010-03-24 12:10     ` Sergei Shtylyov
@ 2010-03-24 12:26       ` Sergei Shtylyov
       [not found]       ` <4BAA0122.2060402-hkdhdckH98+B+jHODAdFcQ@public.gmane.org>
  1 sibling, 0 replies; 17+ messages in thread
From: Sergei Shtylyov @ 2010-03-24 12:26 UTC (permalink / raw)
  To: Sergei Shtylyov
  Cc: Felipe Balbi, Greg KH, Linux USB Mailing List,
	Linux OMAP Mailing List

Hello, I wrote:

>> From: Sergei Shtylyov <sshtylyov@ru.mvista.com>
>>
>> musb_platform_exit() is called twice from musb_init_controller() iff 
>> controller
>> initialization fails. Move the call (and the DevCtl register writes 
>> surrounding
>> it) from musb_free() to musb_remove().
>>
>> Fix misplaced and now incorrect 'goto's in musb_init_controller().
>>
>> Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
>> Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com>
>> ---
>>  drivers/usb/musb/musb_core.c |   17 +++++++----------
>>  1 files changed, 7 insertions(+), 10 deletions(-)
>>
>> diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
>> index 827b813..90ac17b 100644
>> --- a/drivers/usb/musb/musb_core.c
>> +++ b/drivers/usb/musb/musb_core.c
>>   
> [...]
>> @@ -2054,6 +2046,8 @@ bad_config:
>>              musb_readb(musb->mregs, MUSB_DEVCTL));
>>  
>>      }
>> +    if (status < 0)
>> +        goto fail2;
>>  
>>      status = musb_init_debugfs(musb);
>>      if (status < 0)
>>   
>
>   Hm, I don't see this call in the current driver -- are you sure 
> you've used the right tree?

  Right, this is atop of the follwing patch from Greg's 2.6.35-rc1 queue:

http://www.kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/patches/usb/usb-musb-add-debugfs-support.patch

   So, the patch wouldn't apply in the Greg's usb.current series... :-/

WBR, Sergei


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [patch-2.6.34-rc2+ 10/11] musb_core: don't call musb_platform_exit() twice
       [not found]       ` <4BAA0122.2060402-hkdhdckH98+B+jHODAdFcQ@public.gmane.org>
@ 2010-03-25  6:37         ` Felipe Balbi
  0 siblings, 0 replies; 17+ messages in thread
From: Felipe Balbi @ 2010-03-25  6:37 UTC (permalink / raw)
  To: ext Sergei Shtylyov
  Cc: Balbi Felipe (Nokia-D/Helsinki), Greg KH, Linux USB Mailing List,
	Linux OMAP Mailing List

On Wed, Mar 24, 2010 at 01:10:10PM +0100, ext Sergei Shtylyov wrote:
>Hello.
>
>Felipe Balbi wrote:
>
>> From: Sergei Shtylyov <sshtylyov-hkdhdckH98+B+jHODAdFcQ@public.gmane.org>
>>
>> musb_platform_exit() is called twice from musb_init_controller() iff controller
>> initialization fails. Move the call (and the DevCtl register writes surrounding
>> it) from musb_free() to musb_remove().
>>
>> Fix misplaced and now incorrect 'goto's in musb_init_controller().
>>
>> Signed-off-by: Sergei Shtylyov <sshtylyov-hkdhdckH98+B+jHODAdFcQ@public.gmane.org>
>> Signed-off-by: Felipe Balbi <felipe.balbi-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
>> ---
>>  drivers/usb/musb/musb_core.c |   17 +++++++----------
>>  1 files changed, 7 insertions(+), 10 deletions(-)
>>
>> diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
>> index 827b813..90ac17b 100644
>> --- a/drivers/usb/musb/musb_core.c
>> +++ b/drivers/usb/musb/musb_core.c
>>
>[...]
>> @@ -2054,6 +2046,8 @@ bad_config:
>>  			musb_readb(musb->mregs, MUSB_DEVCTL));
>>
>>  	}
>> +	if (status < 0)
>> +		goto fail2;
>>
>>  	status = musb_init_debugfs(musb);
>>  	if (status < 0)
>>
>
>   Hm, I don't see this call in the current driver -- are you sure
>you've used the right tree?

hmm, seems like I have rebased against the wrong Greg's queue, I'll fix 
that soon. Please ignore both series, it was a bug in my script.

apoligies for that.

-- 
balbi
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [patch-2.6.34-rc2+ 11/11] musb_core: fix musb_init_controller() error cleanup path
       [not found] ` <1269515673-27980-1-git-send-email-felipe.balbi-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
@ 2010-03-25 11:14   ` Felipe Balbi
  0 siblings, 0 replies; 17+ messages in thread
From: Felipe Balbi @ 2010-03-25 11:14 UTC (permalink / raw)
  To: Greg KH
  Cc: Linux USB Mailing List, Linux OMAP Mailing List, Sergei Shtylyov,
	Felipe Balbi

From: Sergei Shtylyov <sshtylyov-hkdhdckH98+B+jHODAdFcQ@public.gmane.org>

This function forgets to call usb_remove_hcd() or musb_gadget_cleanup() iff
sysfs_create_group() fails.

Signed-off-by: Sergei Shtylyov <sshtylyov-hkdhdckH98+B+jHODAdFcQ@public.gmane.org>

[ felipe.balbi-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org : review the entire error path
	not only when we fail hcd or gadget ]

Signed-off-by: Felipe Balbi <felipe.balbi-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
---
 drivers/usb/musb/musb_core.c |   51 ++++++++++++++++++++++++++++--------------
 1 files changed, 34 insertions(+), 17 deletions(-)

diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
index 508fd58..705cc4a 100644
--- a/drivers/usb/musb/musb_core.c
+++ b/drivers/usb/musb/musb_core.c
@@ -1878,8 +1878,10 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl)
 	 */
 	if (!plat) {
 		dev_dbg(dev, "no platform_data?\n");
-		return -ENODEV;
+		status = -ENODEV;
+		goto fail0;
 	}
+
 	switch (plat->mode) {
 	case MUSB_HOST:
 #ifdef CONFIG_USB_MUSB_HDRC_HCD
@@ -1901,13 +1903,16 @@ bad_config:
 #endif
 	default:
 		dev_err(dev, "incompatible Kconfig role setting\n");
-		return -EINVAL;
+		status = -EINVAL;
+		goto fail0;
 	}
 
 	/* allocate */
 	musb = allocate_instance(dev, plat->config, ctrl);
-	if (!musb)
-		return -ENOMEM;
+	if (!musb) {
+		status = -ENOMEM;
+		goto fail0;
+	}
 
 	spin_lock_init(&musb->lock);
 	musb->board_mode = plat->mode;
@@ -1925,7 +1930,7 @@ bad_config:
 		if (IS_ERR(musb->clock)) {
 			status = PTR_ERR(musb->clock);
 			musb->clock = NULL;
-			goto fail;
+			goto fail1;
 		}
 	}
 
@@ -1944,12 +1949,12 @@ bad_config:
 	 */
 	musb->isr = generic_interrupt;
 	status = musb_platform_init(musb);
-
 	if (status < 0)
-		goto fail;
+		goto fail2;
+
 	if (!musb->isr) {
 		status = -ENODEV;
-		goto fail2;
+		goto fail3;
 	}
 
 #ifndef CONFIG_MUSB_PIO_ONLY
@@ -1975,7 +1980,7 @@ bad_config:
 			? MUSB_CONTROLLER_MHDRC
 			: MUSB_CONTROLLER_HDRC, musb);
 	if (status < 0)
-		goto fail2;
+		goto fail3;
 
 #ifdef CONFIG_USB_MUSB_OTG
 	setup_timer(&musb->otg_timer, musb_otg_timer_func, (unsigned long) musb);
@@ -1988,7 +1993,7 @@ bad_config:
 	if (request_irq(nIrq, musb->isr, 0, dev_name(dev), musb)) {
 		dev_err(dev, "request_irq %d failed!\n", nIrq);
 		status = -ENODEV;
-		goto fail2;
+		goto fail3;
 	}
 	musb->nIrq = nIrq;
 /* FIXME this handles wakeup irqs wrong */
@@ -2050,12 +2055,12 @@ bad_config:
 
 	}
 	if (status < 0)
-		goto fail2;
+		goto fail3;
 
 #ifdef CONFIG_SYSFS
 	status = sysfs_create_group(&musb->controller->kobj, &musb_attr_group);
 	if (status)
-		goto fail2;
+		goto fail4;
 #endif
 
 	dev_info(dev, "USB %s mode controller at %p using %s, IRQ %d\n",
@@ -2072,17 +2077,29 @@ bad_config:
 
 	return 0;
 
-fail2:
+fail4:
+	if (!is_otg_enabled(musb) && is_host_enabled(musb))
+		usb_remove_hcd(musb_to_hcd(musb));
+	else
+		musb_gadget_cleanup(musb);
+
+fail3:
+	if (musb->irq_wake)
+		device_init_wakeup(dev, 0);
 	musb_platform_exit(musb);
-fail:
-	dev_err(musb->controller,
-		"musb_init_controller failed with status %d\n", status);
 
+fail2:
 	if (musb->clock)
 		clk_put(musb->clock);
-	device_init_wakeup(dev, 0);
+
+fail1:
+	dev_err(musb->controller,
+		"musb_init_controller failed with status %d\n", status);
+
 	musb_free(musb);
 
+fail0:
+
 	return status;
 
 }
-- 
1.7.0.rc0.33.g7c3932

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2010-03-25 11:14 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-03-24 11:47 [patch-2.6.34-rc2+ 00/11] musb patches Felipe Balbi
2010-03-24 11:47 ` [patch-2.6.34-rc2+ 04/11] musb: save and restore missing bus control register Felipe Balbi
2010-03-24 11:47 ` [patch-2.6.34-rc2+ 05/11] musb: potential use after free Felipe Balbi
2010-03-24 11:47 ` [patch-2.6.34-rc2+ 06/11] musb_core: don't touch 'musb->clock' in musb_free() Felipe Balbi
2010-03-24 11:47 ` [patch-2.6.34-rc2+ 07/11] musb_core: don't prevent disabling clock on driver unload Felipe Balbi
     [not found] ` <1269431279-22438-1-git-send-email-felipe.balbi-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
2010-03-24 11:47   ` [patch-2.6.34-rc2+ 01/11] musb: fix power field to hold all possible values Felipe Balbi
2010-03-24 11:47   ` [patch-2.6.34-rc2+ 02/11] MUSB: fix DaVinci glue layer dependency Felipe Balbi
2010-03-24 11:47   ` [patch-2.6.34-rc2+ 03/11] MUSB: Blackfin: don't fake blackfin_interrupt() result Felipe Balbi
2010-03-24 11:47   ` [patch-2.6.34-rc2+ 08/11] MUSB: DaVinci: fix musb_platform_init() error cleanup path Felipe Balbi
2010-03-24 11:47   ` [patch-2.6.34-rc2+ 09/11] MUSB: OMAP: don't call clk_put() Felipe Balbi
2010-03-24 11:47 ` [patch-2.6.34-rc2+ 10/11] musb_core: don't call musb_platform_exit() twice Felipe Balbi
     [not found]   ` <1269431279-22438-11-git-send-email-felipe.balbi-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
2010-03-24 12:10     ` Sergei Shtylyov
2010-03-24 12:26       ` Sergei Shtylyov
     [not found]       ` <4BAA0122.2060402-hkdhdckH98+B+jHODAdFcQ@public.gmane.org>
2010-03-25  6:37         ` Felipe Balbi
2010-03-24 11:47 ` [patch-2.6.34-rc2+ 11/11] musb_core: fix musb_init_controller() error cleanup path Felipe Balbi
2010-03-24 12:16   ` Sergei Shtylyov
  -- strict thread matches above, loose matches on Subject: below --
2010-03-25 11:14 [patch-2.6.34-rc2+ 00/11] musb patches (v2) Felipe Balbi
     [not found] ` <1269515673-27980-1-git-send-email-felipe.balbi-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
2010-03-25 11:14   ` [patch-2.6.34-rc2+ 11/11] musb_core: fix musb_init_controller() error cleanup path Felipe Balbi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox