static int msm72k_queue(struct usb_ep *_ep, struct usb_request *req, gfp_t gfp_flags) { struct msm_endpoint *ep = to_msm_endpoint(_ep); struct usb_info *ui = ep->ui; int ret; if (ep == &ui->ep0in) { struct msm_request *r = to_msm_request(req); if (!req->length) goto ep_queue_done; r->gadget_complete = req->complete; /* ep0_queue_ack_complete queue a receive for ACK before ** calling req->complete */ req->complete = ep0_queue_ack_complete; if (ui->ep0_dir == USB_DIR_OUT) ep = &ui->ep0out; goto ep_queue_done; } if (ui->usb_state == USB_STATE_SUSPENDED) { ret = msm72k_wakeup(&ui->gadget); if (ret) return ret; } ep_queue_done: return usb_ept_queue_xfer(ep, req); }
static ssize_t usb_remote_wakeup(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct usb_info *ui = the_usb_info; msm72k_wakeup(&ui->gadget); return count; }