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