On Fri, Aug 29, 2014 at 11:14:23AM -0400, Alan Stern wrote:
> On Fri, 29 Aug 2014, Peter Chen wrote:
> 
> > Felipe & Alan, thanks for your comments for these patches, I think I may 
> > need
> > to list these issues again to make things clearer.
> > 
> > The purpose of these patchsets are to fix two issues:
> > - Some udcs failures at USB-IF certification Back-Voltage test, it needs
> > the dp is not pulled up when the vbus is not there, usb 2.0 spec 7.2.1
> > and 7.1.5 require it.
> > - Some function drivers (f_uvc, f_obex, and android functions later) do
> > not want to pull up dp at the udc_start, they want it on demand, like app
> > has run.
> > 
> > So, we can't pull up dp unconditionally at udc-core, I proposal the strategy
> > for pulling up dp after below two conditions are satisfied [1]:
> > - If the udc is ready to pull up dp
> > - all functions at gadget driver want to pullup dp, it will pull up dp.
> > 
> > The first condition depends on UDCs, Some UDCs(UDC-A) doesn't need to
> > clear software pull up(run/stop) bit after vbus has disconnected,
> > the possible reason may these kinds of UDC have hardware logic to disable
> > pullup at dp when the vbus is not there, then it can pass back-voltage test,
> > so for these kinds of UDCs, they are always ready to pull up dp.
> > But for other UDCs(UDC-B, like chipidea), it needs to clear pullup bit after
> > vbus has disconnected to pass back-voltage test, for these kinds of UDCs, 
> > they
> > are only ready to pull up dp when the vbus is there.
> > The second condition are the same for all UDCs, the function/gadget driver
> > determine it.
> > 
> > The patchset[1] has implemented above idea, UDC-A is always ready to pull up
> > dp, it will set ready (connect) bit at the end of udc_start, and UDC-B will
> > be ready when the vbus is there.[2], and the dp control strategy is decided 
> > by
> > two conditions[3].
> > 
> > Alan concerns why the .connect API has **connect** argument, the reason
> > is we need to call it at vbus handler to disable pullup bit when the vbus
> > is not there. It is indeed strange we have **connect** argument at .connect,
> > but current .disconnect API does not call usb_gadget_disconnect, so we have
> > no way to pull down dp when the vbus is not there, that is the story
> > we have this patchset and discussion.
> > 
> > What's the next step for me?
> 
> First, change the API so that the disconnect API _does_ call 
> usb_gadget_disconnect.
> 
> Then change the gadget drivers so that they tell the UDC driver when to 
> turn the pullup on or off.  This should happen whenever a function is 
> activated or deactivated or whenever a connect or disconnect occurs.
> 
> (In theory the gadget driver does not need to tell the UDC driver to 
> turn off the pullup when a disconnect occurs; the UDC driver will turn 
> it off anyway.  But the gadget driver still needs to know that there 
> was a disconnect.  Otherwise it might tell the UDC driver to turn on 
> the pullup at a time when the device isn't connected.)
> 

It is better gadget driver tells the UDC driver (with vbus handler) to
turn off the pullup when a disconnect occurs, in that case, we can remove
all pull up/down dp code from UDC drivers.

-- 
Best Regards,
Peter Chen
--
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