All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] musb: omap2430: do not assume balanced enable()/disable()
@ 2016-08-03 15:38 Andreas Kemnade
  2016-08-03 17:07   ` H. Nikolaus Schaller
  2016-09-09 19:27 ` [v2] " Laurent Pinchart
  0 siblings, 2 replies; 36+ messages in thread
From: Andreas Kemnade @ 2016-08-03 15:38 UTC (permalink / raw)
  To: Bin Liu, Greg Kroah-Hartman, linux-usb, linux-omap, linux-kernel,
	Tony Lindgren, letux-kernel
  Cc: Andreas Kemnade

The code assumes that omap2430_musb_enable() and
omap2430_musb_disable() are called in a balanced way.
That fact is broken by the fact that musb_init_controller() calls
musb_platform_disable() to switch from unknown state to off state
on initialisation.

That means that phy_power_off() is called first so that
phy->power_count gets -1 and the phy is not enabled on phy_power_on().
So when usb gadget is started the phy is not powered on.
Depending on the phy used that caused various problems.
Besides of causing usb problems, that can also have side effects.

In the case of using the phy_twl4030, that prevents also charging
the battery via usb (using twl4030_charger) and so makes further
kernel debugging hard.
The problem was seen with 4.7 on an openphoenux gta04. It has a DM3730
SoC and a TPS65950 companion.  phy->power never became 1
and so the usb did get powered on.

The patch prevents phy_power_off() from being called when
it is already off.

Signed-off-by: Andreas Kemnade <andreas@kemnade.info>
---
changes in v2:
improved commit message

 drivers/usb/musb/omap2430.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/usb/musb/omap2430.c b/drivers/usb/musb/omap2430.c
index 0b4cec9..c1a2b7b 100644
--- a/drivers/usb/musb/omap2430.c
+++ b/drivers/usb/musb/omap2430.c
@@ -413,9 +413,10 @@ static void omap2430_musb_disable(struct musb *musb)
 	struct device *dev = musb->controller;
 	struct omap2430_glue *glue = dev_get_drvdata(dev->parent);
 
-	if (!WARN_ON(!musb->phy))
-		phy_power_off(musb->phy);
-
+	if (glue->enabled) {
+		if (!WARN_ON(!musb->phy))
+			phy_power_off(musb->phy);
+	}
 	if (glue->status != MUSB_UNKNOWN)
 		omap_control_usb_set_mode(glue->control_otghs,
 			USB_MODE_DISCONNECT);
-- 
2.1.4

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

end of thread, other threads:[~2016-09-12 14:36 UTC | newest]

Thread overview: 36+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-08-03 15:38 [PATCH v2] musb: omap2430: do not assume balanced enable()/disable() Andreas Kemnade
2016-08-03 17:07 ` [Letux-kernel] " H. Nikolaus Schaller
2016-08-03 17:07   ` H. Nikolaus Schaller
2016-08-04 14:29   ` Tony Lindgren
2016-08-04 14:29     ` Tony Lindgren
2016-08-04 14:49     ` H. Nikolaus Schaller
2016-08-04 14:49       ` H. Nikolaus Schaller
2016-08-04 15:01       ` Tony Lindgren
2016-08-04 15:01         ` Tony Lindgren
2016-08-04 20:59       ` Andreas Kemnade
2016-08-04 20:59         ` Andreas Kemnade
2016-08-04 16:31     ` Andreas Kemnade
2016-08-04 16:31       ` Andreas Kemnade
2016-08-04 16:44       ` Andreas Kemnade
2016-08-05 13:55         ` Tony Lindgren
2016-08-05 15:20           ` Andreas Kemnade
2016-08-06  6:21             ` Tony Lindgren
2016-08-09  5:35               ` Andreas Kemnade
2016-08-11 18:25                 ` Tony Lindgren
2016-09-09 19:27 ` [v2] " Laurent Pinchart
2016-09-09 20:08   ` Tony Lindgren
2016-09-09 20:08     ` Tony Lindgren
2016-09-09 20:21     ` Laurent Pinchart
2016-09-09 20:40       ` Andreas Kemnade
2016-09-09 20:55         ` Tony Lindgren
2016-09-09 20:55           ` Tony Lindgren
2016-09-09 20:51       ` Tony Lindgren
2016-09-09 21:22         ` Andreas Kemnade
2016-09-09 21:33           ` Tony Lindgren
2016-09-09 23:40             ` Tony Lindgren
2016-09-10 11:27               ` Andreas Kemnade
2016-09-10 13:07                 ` Tony Lindgren
2016-09-10 13:07                   ` Tony Lindgren
2016-09-11  9:06                   ` Laurent Pinchart
2016-09-11  9:06                     ` Laurent Pinchart
2016-09-12 14:35                     ` Tony Lindgren

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.