Message ID | 20170315140801.97230-1-moreno.bartalucci@tecnorama.it (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wed, Mar 15, 2017 at 09:08:01AM -0500, Moreno Bartalucci wrote: > With usb-musb port in host mode, when the device > is disconnected, either logically (because of a mode switch) or > physically (by pulling the cable), the USB port should keep > suppling VBUS, with no interruption, to prevent power loss on > USB powered devices. The usb device has been disconnected, why it still cares about VBUS power? Can you please give more details of the issue you try to solve? This logic has been there since the driver was added 5 years ago, so I really have to understand the issue before accept the change. Regards, -Bin. > > Signed-off-by: Moreno Bartalucci <moreno.bartalucci@tecnorama.it> > --- > drivers/usb/musb/musb_dsps.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c > index 7c047c4..5d9986b 100644 > --- a/drivers/usb/musb/musb_dsps.c > +++ b/drivers/usb/musb/musb_dsps.c > @@ -245,7 +245,7 @@ static int dsps_check_status(struct musb *musb, void *unused) > dsps_mod_timer_optional(glue); > break; > case OTG_STATE_A_WAIT_BCON: > - musb_writeb(musb->mregs, MUSB_DEVCTL, 0); > + musb_writeb(musb->mregs, MUSB_DEVCTL, MUSB_DEVCTL_SESSION); > skip_session = 1; > /* fall */ > > -- > 2.10.1 (Apple Git-78) > -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 2017-03-25 01:58, Bin Liu wrote: > On Wed, Mar 15, 2017 at 09:08:01AM -0500, Moreno Bartalucci wrote: >> With usb-musb port in host mode, when the device >> is disconnected, either logically (because of a mode switch) or >> physically (by pulling the cable), the USB port should keep >> suppling VBUS, with no interruption, to prevent power loss on >> USB powered devices. > > The usb device has been disconnected, why it still cares about VBUS > power? Morphing devices (3G dongles, wifi dongles, some printers) boots up in install mode, usually only as a virtual cd-rom containing Windows drivers and software. They get switched into functional mode by usb_modeswitch sending them a ctrl msg which makes the device disappear from the USB bus for a very short time after which it re-appears with a different interface composition and mostly also a different USB Id. Cutting the VBUS supply while these devices are in progress of switching will inhibit switching, the device will reboot when VBUS is again asserted and will come up in initial mode as if no switch ctrl msg had ever been sent to it. The problem has been seen both on host only as well as dual-role port configs. Dual-role may be a bit more complicated to solve because of the role switching VBUS detection circuit but I can not see any reason why a host only configured port should cut the VBUS supply, it could be always on right? /Lars -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
> Il giorno 25 mar 2017, alle ore 08:21, Lars Melin <larsm17@gmail.com> ha scritto: > >> >> The usb device has been disconnected, why it still cares about VBUS >> power? > > Morphing devices (3G dongles, wifi dongles, some printers) boots up in install mode, usually only as a virtual cd-rom containing Windows drivers and software. > [...] > why a host only configured port should cut the VBUS supply, it could be always on right? > Yes, that’s exactly the problem I tried to solve with this patch. I have to add that the problem was not there with kernels up to 4.8.17, I started to see it with 4.9 and up. By git-bisecting kernel sources, it appears this behaviour has been introduced by this commit: 2f3fd2c5bde1f94513c3dc311ae64494085ec371 I also agree that, in my opinion, a host only port should never remove the VBUS supply, as it happens on all the PCs (linux+windows+mac) that I tested until now. I saw this problem on a beaglebone black. Of course I’m available to do all the tests that you might suggest me to help you better understand the issue. Moreno Bartalucci -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Mon, Mar 27, 2017 at 02:53:27PM +0200, Moreno Bartalucci wrote: > > Il giorno 25 mar 2017, alle ore 08:21, Lars Melin <larsm17@gmail.com> ha scritto: > > > >> > >> The usb device has been disconnected, why it still cares about VBUS > >> power? > > > > Morphing devices (3G dongles, wifi dongles, some printers) boots up in install mode, usually only as a virtual cd-rom containing Windows drivers and software. > > [...] > > why a host only configured port should cut the VBUS supply, it could be always on right? > > > > Yes, that’s exactly the problem I tried to solve with this patch. Yeah, the problem is clear to me now. > I have to add that the problem was not there with kernels up to > 4.8.17, I started to see it with 4.9 and up. > > By git-bisecting kernel sources, it appears this behaviour has been > introduced by this commit: > > 2f3fd2c5bde1f94513c3dc311ae64494085ec371 It seems this patch changes how OTG_STATE_A_WAIT_VRISE and OTG_STATE_A_WAIT_BCON are used. > > I also agree that, in my opinion, a host only port should never remove > the VBUS supply, as it happens on all the PCs (linux+windows+mac) that > I tested until now. True. It is just that the musb driver handles both dual-role and host-only mode. > > I saw this problem on a beaglebone black. Of course I’m available to > do all the tests that you might suggest me to help you better > understand the issue. Thanks for the offer. Please let me look at the problem first, I have a modem to test. It is not clear why the original driver clears VBUS in this place, so I have to ensure your patch is the correct change. Regards, -Bin. -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c index 7c047c4..5d9986b 100644 --- a/drivers/usb/musb/musb_dsps.c +++ b/drivers/usb/musb/musb_dsps.c @@ -245,7 +245,7 @@ static int dsps_check_status(struct musb *musb, void *unused) dsps_mod_timer_optional(glue); break; case OTG_STATE_A_WAIT_BCON: - musb_writeb(musb->mregs, MUSB_DEVCTL, 0); + musb_writeb(musb->mregs, MUSB_DEVCTL, MUSB_DEVCTL_SESSION); skip_session = 1; /* fall */
With usb-musb port in host mode, when the device is disconnected, either logically (because of a mode switch) or physically (by pulling the cable), the USB port should keep suppling VBUS, with no interruption, to prevent power loss on USB powered devices. Signed-off-by: Moreno Bartalucci <moreno.bartalucci@tecnorama.it> --- drivers/usb/musb/musb_dsps.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)