Felipe Balbi <balbi@...> writes: < big snip > > +static int __dwc3_gadget_ep_enable(struct dwc3_ep *dep, > + const struct usb_endpoint_descriptor *desc) > +{ > + struct dwc3 *dwc = dep->dwc; > + u32 reg; > + int ret = -ENOMEM; > + > + if (!(dep->flags & DWC3_EP_ENABLED)) { > + ret = dwc3_gadget_start_config(dwc, dep); > + if (ret) > + goto err0; > + } > + > + ret = dwc3_gadget_set_ep_config(dwc, dep, desc); > + if (ret) > + return ret; Hi Felipe, If I'm reading this right, you call dwc3_gadget_start_config() for every endpoint that gets enabled. Is that correct? If so, this is wrong. The DEPSTARTCFG should only be done once before configuring _all_ of the non-EP0 endpoints. This will probably not matter when using the virtual platform, since I don't think they implement the model to this level of detail, but in the real hardware it will cause problems. See section 9.1.5 "Initialization on SetConfiguration or SetInterface Request" in the databook for the correct way to do this. -- Paul -- 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