Message ID | 20230123073508.2350402-2-linus.walleij@linaro.org (mailing list archive) |
---|---|
State | Accepted |
Commit | e55f67391fa986f7357edba0ca59e668d99c3a5f |
Headers | show |
Series | usb: fotg210: Improvments | expand |
Hello! On 1/23/23 10:35 AM, Linus Walleij wrote: > From: Fabian Vogt <fabian@ritter-vogt.de> > > This is used when responding to GET_STATUS requests. Without this, it > crashes on completion. > > Fixes: b84a8dee23fd ("usb: gadget: add Faraday fotg210_udc driver") > Signed-off-by: Fabian Vogt <fabian@ritter-vogt.de> > Signed-off-by: Linus Walleij <linus.walleij@linaro.org> > --- > drivers/usb/fotg210/fotg210-udc.c | 16 ++++++++++++++++ > 1 file changed, 16 insertions(+) > > diff --git a/drivers/usb/fotg210/fotg210-udc.c b/drivers/usb/fotg210/fotg210-udc.c > index 754429553f61..029b31c3107b 100644 > --- a/drivers/usb/fotg210/fotg210-udc.c > +++ b/drivers/usb/fotg210/fotg210-udc.c > @@ -709,6 +709,20 @@ static int fotg210_is_epnstall(struct fotg210_ep *ep) > return value & INOUTEPMPSR_STL_EP ? 1 : 0; > } > > +/* For EP0 requests triggered by this driver (currently GET_STATUS response) */ > +static void fotg210_ep0_complete(struct usb_ep *_ep, struct usb_request *req) > +{ > + struct fotg210_ep *ep; > + struct fotg210_udc *fotg210; > + > + ep = container_of(_ep, struct fotg210_ep, ep); > + fotg210 = ep->fotg210; > + > + if (req->status || req->actual != req->length) { > + dev_warn(&fotg210->gadget.dev, "EP0 request failed: %d\n", req->status); > + } Why {} here? > +} > + > static void fotg210_get_status(struct fotg210_udc *fotg210, > struct usb_ctrlrequest *ctrl) > { [...] MBR, Sergey
diff --git a/drivers/usb/fotg210/fotg210-udc.c b/drivers/usb/fotg210/fotg210-udc.c index 754429553f61..029b31c3107b 100644 --- a/drivers/usb/fotg210/fotg210-udc.c +++ b/drivers/usb/fotg210/fotg210-udc.c @@ -709,6 +709,20 @@ static int fotg210_is_epnstall(struct fotg210_ep *ep) return value & INOUTEPMPSR_STL_EP ? 1 : 0; } +/* For EP0 requests triggered by this driver (currently GET_STATUS response) */ +static void fotg210_ep0_complete(struct usb_ep *_ep, struct usb_request *req) +{ + struct fotg210_ep *ep; + struct fotg210_udc *fotg210; + + ep = container_of(_ep, struct fotg210_ep, ep); + fotg210 = ep->fotg210; + + if (req->status || req->actual != req->length) { + dev_warn(&fotg210->gadget.dev, "EP0 request failed: %d\n", req->status); + } +} + static void fotg210_get_status(struct fotg210_udc *fotg210, struct usb_ctrlrequest *ctrl) { @@ -1251,6 +1265,8 @@ int fotg210_udc_probe(struct platform_device *pdev, struct fotg210 *fotg) if (fotg210->ep0_req == NULL) goto err_map; + fotg210->ep0_req->complete = fotg210_ep0_complete; + fotg210_init(fotg210); fotg210_disable_unplug(fotg210);