Hi,

On 22-08-16 17:38, Bin Liu wrote:
On Mon, Aug 22, 2016 at 05:32:57PM +0200, Hans de Goede wrote:

<snip>

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
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to