On Tue, 13 Jun 2017, Felipe Balbi wrote: > > Hi Alan, > > Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> writes: > > Felipe: > > > > A UDC driver will invoke the gadget driver's ->disconnect callback > > whenever the D+ pullup is turned off. During gadget driver unbinding, > > this happens automatically when usb_gadget_remove_driver() calls > > usb_gadget_disconnect(). > > usb_gadget_disconnect() only calls UDC's ->pullup(), not gadget driver's > ->disconnect() > > int usb_gadget_disconnect(struct usb_gadget *gadget) > { > int ret = 0; > > if (!gadget->ops->pullup) { > ret = -EOPNOTSUPP; > goto out; > } > > if (gadget->deactivated) { > /* > * If gadget is deactivated we only save new state. > * Gadget will stay disconnected after activation. > */ > gadget->connected = false; > goto out; > } > > ret = gadget->ops->pullup(gadget, 0); > if (!ret) > gadget->connected = 0; > > out: > trace_usb_gadget_disconnect(gadget, ret); > > return ret; > } > EXPORT_SYMBOL_GPL(usb_gadget_disconnect); Yes, but as I mentioned above, the pullup routine calls the gadget driver's disconnect method. > > But immediately thereafter, usb_gadget_remove_driver() calls the gadget > > driver's ->disconnect callback directly! Do we have any reason for > > doing this? I don't see point to it. Should that call be removed? > > Unless I'm missing something, that call is necessary :-) Have you faced > any issues with it? Are there any UDCs calling gadget driver's > ->disconnect() from ->pullup() ? I haven't faced any issues because gadget drivers don't seem to mind ->disconnect getting called twice in a row. :-) (And note that the API doesn't have a corresponding ->connect callback... Although to tell the truth, it's not clear what a gadget driver needs to do in either callback. Can we simply remove ->disconnect altogether?) Both dummy-hcd and net2280 call ->disconnect from ->pullup. I haven't checked other UDC drivers, but it seems like something they should all do. Except perhaps in the case where the UDC driver doesn't have a pullup method. 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