RE: [RFC PATCH 0/7] usb: gadget: add reset API at usb_gadget_driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 29 Aug 2014, Peter Chen wrote:

> > On Thu, 28 Aug 2014, Alan Stern wrote:
> > 
> > > Okay, so we need to add a "vbus_is_on" flag to the usb_gadget
> > > structure.  The gadget driver will set this flag in its connect
> > > callback and clear the flag in its disconnect callback.  If the UDC
> > > driver doesn't have a Vbus handler, it will invoke the connect
> > > callback just once during startup, and it will invoke the disconnect
> > > callback just once during removal.
> > 
> > After more thought, if the vbus_is_on flag is going to be controlled by
> > the gadget driver rather than the UDC driver, then it really belongs in
> > the gadget driver's private data structure and not in struct usb_gadget.
> > Also, a better name for the flag would be "is_connected".
> > 
> 
> Yes, we should have some places to change "is_connected",  that is one of
> thing we are discussing. 
> 
> > > The gadget driver should include an adjust_pullup() routine.  It
> > > should get called whenever a function is activated or deactivated, and
> > > also by the connect and disconnect callbacks.  The logic is simple:
> > >
> > > 	If (any functions are deactivated)
> > > 		turn off the pullup
> > > 	else if (gadget->vbus_is_on)
> > > 		turn on the pullup
> > > 	else
> > > 		turn off the pullup
> > 
> > This logic can be compressed a little:
> > 
> > 	if (!is_connected || any functions are deactivated)
> > 		turn off the pullup
> > 	else
> > 		turn on the pullup
> > 
> 
> Thanks, Alan.
> 
> I have a similar implementation at below, 
> 
> http://www.spinics.net/lists/linux-usb/msg111976.html

Yes, that seems to be moving in the right direction.  You still need to 
change the other gadget drivers, and the API should be changed from 
composite_connect(gadget, flag) to composite_connect(gadget) and 
composite_disconnect(gadget).


On Thu, 28 Aug 2014, Felipe Balbi wrote:

> you shouldn't call usb_gadget_disconnect() from ->disconnect(). It's the
> other way around. You get a disconnect IRQ, then you call gadget
> driver's ->disconnect(), but gadget driver doesn't need to ask UDC to
> remove pullup at that time.

It's true that the gadget driver shouldn't have to ask for this, but
doing so doesn't hurt.

On the other hand, the gadget driver definitely _does_ have to tell the 
UDC driver to enable the pullup when a connect occurs.  Otherwise the 
UDC driver won't know if the gadget's userspace components are ready.

Alan Stern

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux