Hi, On Thu, Jul 18, 2013 at 09:50:37AM -0400, Alan Stern wrote: > On Thu, 18 Jul 2013, Felipe Balbi wrote: > > > > > yes. Only the UDC driver knows when the controller is moving among those > > > > states. > > > > > > Not quite. Only the gadget driver knows when the transition between > > > ADDRESS and CONFIGURED occurs. This should be added to composite.c. > > > > that's not entirely true :-) See how we handle that in dwc3: > > > > | static int dwc3_ep0_set_config(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl) > > | { > > | enum usb_device_state state = dwc->gadget.state; > > | u32 cfg; > > | int ret; > > | u32 reg; > > | > > | dwc->start_config_issued = false; > > | cfg = le16_to_cpu(ctrl->wValue); > > | > > | switch (state) { > > | case USB_STATE_DEFAULT: > > | return -EINVAL; > > | break; > > | > > | case USB_STATE_ADDRESS: > > | ret = dwc3_ep0_delegate_req(dwc, ctrl); > > | /* if the cfg matches and the cfg is non zero */ > > | if (cfg && (!ret || (ret == USB_GADGET_DELAYED_STATUS))) { > > | usb_gadget_set_state(&dwc->gadget, > > | USB_STATE_CONFIGURED); > > In theory, this should not occur until the gadget driver has finished > the transition to the CONFIGURED state, which doesn't occur until later > in the case of USB_GADGET_DELAYED_STATUS. > > > | > > | /* > > | * Enable transition to U1/U2 state when > > | * nothing is pending from application. > > | */ > > | reg = dwc3_readl(dwc->regs, DWC3_DCTL); > > | reg |= (DWC3_DCTL_ACCEPTU1ENA | DWC3_DCTL_ACCEPTU2ENA); > > | dwc3_writel(dwc->regs, DWC3_DCTL, reg); > > | > > | dwc->resize_fifos = true; > > | dev_dbg(dwc->dev, "resize fifos flag SET\n"); > > | } > > | break; > > | > > | case USB_STATE_CONFIGURED: > > | ret = dwc3_ep0_delegate_req(dwc, ctrl); > > | if (!cfg) > > | usb_gadget_set_state(&dwc->gadget, > > | USB_STATE_ADDRESS); > > No check on the value of ret? What if the request was rejected? > > > | break; > > | default: > > | ret = -EINVAL; > > | } > > | return ret; > > | } > > This illustrates the folly of exposing your code to public review. :-) it's always good to have extra eyes looking at the code, I'll patch those up, but since it has always been like that and nobody complained, I won't tag it for stable. -- balbi
Attachment:
signature.asc
Description: Digital signature