diff mbox series

[1/3] fotg210-udc: Add missing completion handler

Message ID 20230123073508.2350402-2-linus.walleij@linaro.org (mailing list archive)
State Accepted
Commit e55f67391fa986f7357edba0ca59e668d99c3a5f
Headers show
Series usb: fotg210: Improvments | expand

Commit Message

Linus Walleij Jan. 23, 2023, 7:35 a.m. UTC
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(+)

Comments

Sergey Shtylyov Jan. 23, 2023, 9:28 a.m. UTC | #1
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 mbox series

Patch

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);