From mboxrd@z Thu Jan 1 00:00:00 1970 From: hdegoede@redhat.com (Hans de Goede) Date: Mon, 22 Aug 2016 17:55:50 +0200 Subject: [PATCH v2 7/7] musb: sunxi: Add support for platform_set_mode In-Reply-To: <20160822153842.GI1853@uda0271908> References: <1471288892-21702-1-git-send-email-hdegoede@redhat.com> <1471288892-21702-8-git-send-email-hdegoede@redhat.com> <20160819213049.GC1853@uda0271908> <2a55a1bf-7ebf-3ab4-b231-85eba20103f1@redhat.com> <20160822141158.GF1853@uda0271908> <9699b62e-421a-ae8e-c25e-ef48beb84ce0@redhat.com> <20160822152421.GH1853@uda0271908> <20160822153842.GI1853@uda0271908> Message-ID: <2e1d2bb6-c3c4-17ab-79a6-8f9efa45a831@redhat.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Hi, On 22-08-16 17:38, Bin Liu wrote: > On Mon, Aug 22, 2016 at 05:32:57PM +0200, Hans de Goede wrote: >>>>>>> When switching from host to peripheral mode, if an usb device is still >>>>>>> plugged and enumerated, how do you handle the device disconnect? >>>>>> >>>>>> The phy code will report vbus low for long enough for the musb to end >>>>>> the current session. It already does this for boards which do not >>>>>> have working vbus detection. >>>>> >>>>> But you didn't disconnect DP/DM, right? then musb detects vbus is gone >>>>> without receiving disconnect event, this is vbus error case, not a normal >>>>> teardown. >>>> >>>> Correct, there is no way to disconnect DP/DM and reporting Vbus low for >>>> a while does the trick. >>> >>> Without physically disconnecting DP/DM, we still have a way to properly >>> teardown the enumerated devices. Please check musb_softconnect_write() >>> in musb_debugfs.c. >> >> That is manipulating the session bit in the devctl reg, that does not >> work to switch from device to host role or from host to device role, >> at least not on allwinner's musb implementation. I've already tried that >> before writing the code to report VBus low. > > I would think you have to call musb_root_disconnect() first to notify > the core to teardown the enumerated devices. I tried that it does not help. It only affects the software state, the hardware will still stay in host-mode if it does not see vbus low for long enough). Note this is on devices which lack vbus detection (again this is simply physically not available on the PCB, just like some PCB's miss the id-pin). Normally this never is an issue, because when a host cable gets unplugged from a AB connector we see the id pin go high, disable the boards driving of Vbus and then the phy's Vbus detect will report low to the musb controller. Anyways this is a solved problem, the reporting of Vbus low has been working fine for both boards which lack vbus-detection as well as for role-changing from sysfs. Regards, Hans