From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 2C585C44512 for ; Thu, 16 Jul 2026 16:21:33 +0000 (UTC) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id ADEB484EE3; Thu, 16 Jul 2026 18:09:47 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="XHtrtchg"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 7402E80433; Thu, 16 Jul 2026 15:44:58 +0200 (CEST) Received: from mail-ej1-x62f.google.com (mail-ej1-x62f.google.com [IPv6:2a00:1450:4864:20::62f]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 41B6484CA3 for ; Thu, 16 Jul 2026 15:44:56 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=anders.roxell@linaro.org Received: by mail-ej1-x62f.google.com with SMTP id a640c23a62f3a-c160d8760e0so76005866b.0 for ; Thu, 16 Jul 2026 06:44:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1784209496; x=1784814296; darn=lists.denx.de; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=XZ4V9a+Sn9ijW68xnOsApO8mZH3w21jaey6fX0Q8SF8=; b=XHtrtchgC/eOSBbg8IZc5Yzmb8SZOZKZfaneJGQJJF+lijLpyw/fz8xrbwXXK5ug+W Af18XgblEy5JCtgHgyOmLlL1YDZoKoAhK1F8nVmJc+niJcrfdRpd4JQ6MSA2zSpUGImn Oq6fttk2MFVs1YVQfc06eQ1Jh5aeXnfzOne1wKw7y/U0qJ+JVQkuw1iJleebtiFQ4Rxh 7lbBaczbZpZIW6P1wIjqYm28UEoPwBG9EdDE+ti3vqIVE+g++Bl/ENipSB2tLa1tHWi4 RNGV/qdHGKUVsZJJDgUW20A2PhdGJBulH6SeVSpQ8leWVWtVD/TiIhvPW8xgTjwXsyTE NN0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784209496; x=1784814296; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=XZ4V9a+Sn9ijW68xnOsApO8mZH3w21jaey6fX0Q8SF8=; b=XmZj3CmK/3iFaU4Y2uIS03vHGVIDD09PxaUSDcwFxD1doVbmPrl5jGBaNX8j8lBKiI w58J9clp0U0/i4qmLK1m8Fn28lm9fQmRgI0DP1xxbhzclqpz1atDeSRBNENbWs6+/lcB H4juSf8h8TaTM5AZDGtutxUBOg8aFkqoWBy44JAHmT8JyrbcDiAGmWyGUU7X3Z/SSPrF mJ+viCM5sPT2xRE2vWTJGp2z1C5LV6NVybZlLhd0sNIeY0k4enaW/KL+5RBjDvCUBjtp JFWVYSgaFvpv/jFwn+2GOTA5pUxf2S5mk+eYAx/G91qajSdabpaZxRonJyahVV/JwoC7 FUKw== X-Gm-Message-State: AOJu0Yy6P9WzomV9arKu1/kVeBSkLOab2CHmt71DJYp2IdPyzFNiUqG/ x9O0BciJDba0BDEU4mZjtMRXMz92X7JA5nW+DW+1FtaDVy7DP7bJ6tIRWCm1tzdTTF+NzgFA3jZ xI5rr X-Gm-Gg: AfdE7cmbPvGEBeZAY3h/gC/I6YiigOtqPaUdSmD97GoMN/tsLkxoVuWm8odFvQ/c0zj bEBtWKfQmFhNvCylV2rr+L/AsG8bn8nhx3hC9ONVs4ry1VXo5nyEsdbdEhjMNEedzWWTxXIc1y4 sZjFvJIIgxUgP0gW06Lug9cixfkZ2ZGhtXNnMTyqKV4DQqt9Xg2gUpLxAOo6pkvCIZ6whQ5CacM ofdK6HpFlnh2+7TuKyrl2kyKKmgLXqVvlZk2XGpAoSP9NFqt8VXdrhfnL4GZtAD/2LxkgkobUwU ++GHkjRZlYNBIS6ZyfIzJfXTxX1VRQkgoXDmKxO+QNbAPLvcE6UvxrHDvdRPOFgvSwqPth2Lqte YgeETiFTtfBcTA4mYqiAy3k1cm5ZDFl5ysFFwtarve3W/jGDLarm1IYHh76TsCr8DzBuVdFma4P y+M+Bfd3sxVcySRuU+RG91DPE7kLcoZcXJoRuQUw== X-Received: by 2002:a17:906:f587:b0:bed:5a4f:9fdb with SMTP id a640c23a62f3a-c161ea8ece8mr652757966b.7.1784209495576; Thu, 16 Jul 2026 06:44:55 -0700 (PDT) Received: from localhost (c-85-229-7-191.bbcust.telenor.se. [85.229.7.191]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-c1687318238sm214025966b.41.2026.07.16.06.44.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 Jul 2026 06:44:55 -0700 (PDT) From: Anders Roxell To: u-boot@lists.denx.de, marex@denx.de Cc: mkorpershoek@kernel.org, ilias.apalodimas@linaro.org, trini@konsulko.com, michal.simek@amd.com, alchark@flipper.net, jerome.forissier@arm.com, Anders Roxell , Jerome Forissier , Jens Wiklander , Lukasz Majewski , Eddie Cai , Simon Glass , Quentin Schulz , Kever Yang Subject: [PATCH v5 72/75] usb: gadget: fix up the function drivers after the resync Date: Thu, 16 Jul 2026 15:42:42 +0200 Message-ID: <20260716134305.614278-73-anders.roxell@linaro.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260716134305.614278-1-anders.roxell@linaro.org> References: <20260716134305.614278-1-anders.roxell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Mailman-Approved-At: Thu, 16 Jul 2026 18:09:05 +0200 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean Adapt the gadget function drivers (acm, fastboot, mass_storage, rockusb, sdp, thor, ether and composite) to the new gadget API. Co-developed-by: Jerome Forissier Signed-off-by: Jerome Forissier Co-developed-by: Jens Wiklander Signed-off-by: Jens Wiklander Signed-off-by: Anders Roxell --- drivers/usb/gadget/composite.c | 2 +- drivers/usb/gadget/ether.c | 21 ++++++++++++++------- drivers/usb/gadget/f_acm.c | 20 +++++++++++--------- drivers/usb/gadget/f_fastboot.c | 10 +++++----- drivers/usb/gadget/f_mass_storage.c | 5 ++++- drivers/usb/gadget/f_rockusb.c | 11 ++++++----- drivers/usb/gadget/f_sdp.c | 12 ++++++++---- drivers/usb/gadget/f_thor.c | 19 +++++++++---------- 8 files changed, 58 insertions(+), 42 deletions(-) diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c index 04b85419931e..060788419553 100644 --- a/drivers/usb/gadget/composite.c +++ b/drivers/usb/gadget/composite.c @@ -833,7 +833,7 @@ static int bos_desc(struct usb_composite_dev *cdev) /* Get Controller configuration */ if (cdev->gadget->ops->get_config_params) { - cdev->gadget->ops->get_config_params( + cdev->gadget->ops->get_config_params(cdev->gadget, &dcd_config_params); } else { dcd_config_params.bU1devExitLat = diff --git a/drivers/usb/gadget/ether.c b/drivers/usb/gadget/ether.c index 7973927e8a7f..13a20441419d 100644 --- a/drivers/usb/gadget/ether.c +++ b/drivers/usb/gadget/ether.c @@ -925,8 +925,9 @@ set_ether_config(struct eth_dev *dev, gfp_t gfp_flags) dev->status = ep_desc(gadget, &hs_status_desc, &fs_status_desc); dev->status_ep->driver_data = dev; + dev->status_ep->desc = dev->status; - result = usb_ep_enable(dev->status_ep, dev->status); + result = usb_ep_enable(dev->status_ep); if (result != 0) { debug("enable %s --> %d\n", dev->status_ep->name, result); @@ -951,14 +952,16 @@ set_ether_config(struct eth_dev *dev, gfp_t gfp_flags) * from REMOTE_NDIS_HALT_MSG, reset from REMOTE_NDIS_RESET_MSG. */ if (!cdc_active(dev)) { - result = usb_ep_enable(dev->in_ep, dev->in); + dev->in_ep->desc = dev->in; + result = usb_ep_enable(dev->in_ep); if (result != 0) { debug("enable %s --> %d\n", dev->in_ep->name, result); goto done; } - result = usb_ep_enable(dev->out_ep, dev->out); + dev->out_ep->desc = dev->out; + result = usb_ep_enable(dev->out_ep); if (result != 0) { debug("enable %s --> %d\n", dev->out_ep->name, result); @@ -1156,7 +1159,8 @@ static void issue_start_status(struct eth_dev *dev) * FIXME iff req->context != null just dequeue it */ usb_ep_disable(dev->status_ep); - usb_ep_enable(dev->status_ep, dev->status); + dev->status_ep->desc = dev->status; + usb_ep_enable(dev->status_ep); /* * 3.8.1 says to issue first NETWORK_CONNECTION, then @@ -1314,7 +1318,8 @@ eth_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl) break; if (dev->status) { usb_ep_disable(dev->status_ep); - usb_ep_enable(dev->status_ep, dev->status); + dev->status_ep->desc = dev->status; + usb_ep_enable(dev->status_ep); } value = 0; @@ -1333,8 +1338,10 @@ eth_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl) if (wValue == 1) { if (!cdc_active(dev)) break; - usb_ep_enable(dev->in_ep, dev->in); - usb_ep_enable(dev->out_ep, dev->out); + dev->in_ep->desc = dev->in; + usb_ep_enable(dev->in_ep); + dev->out_ep->desc = dev->out; + usb_ep_enable(dev->out_ep); dev->cdc_filter = DEFAULT_FILTER; if (dev->status) issue_start_status(dev); diff --git a/drivers/usb/gadget/f_acm.c b/drivers/usb/gadget/f_acm.c index b6c11d97a62d..5f5400bab7ec 100644 --- a/drivers/usb/gadget/f_acm.c +++ b/drivers/usb/gadget/f_acm.c @@ -325,20 +325,20 @@ static struct usb_request *acm_start_ep(struct usb_ep *ep, void *complete_cb, static int acm_start_data(struct f_acm *f_acm, struct usb_gadget *gadget) { - const struct usb_endpoint_descriptor *d; int ret; /* EP IN */ - d = ep_desc(gadget, &acm_hs_in_desc, &acm_fs_in_desc); - ret = usb_ep_enable(f_acm->ep_in, d); + f_acm->ep_in->desc = ep_desc(gadget, &acm_hs_in_desc, &acm_fs_in_desc); + ret = usb_ep_enable(f_acm->ep_in); if (ret) return ret; f_acm->req_in = acm_start_ep(f_acm->ep_in, acm_tx_complete, f_acm); /* EP OUT */ - d = ep_desc(gadget, &acm_hs_out_desc, &acm_fs_out_desc); - ret = usb_ep_enable(f_acm->ep_out, d); + f_acm->ep_out->desc = ep_desc(gadget, &acm_hs_out_desc, + &acm_fs_out_desc); + ret = usb_ep_enable(f_acm->ep_out); if (ret) return ret; @@ -354,12 +354,11 @@ static int acm_start_data(struct f_acm *f_acm, struct usb_gadget *gadget) static int acm_start_ctrl(struct f_acm *f_acm, struct usb_gadget *gadget) { - const struct usb_endpoint_descriptor *d; - usb_ep_disable(f_acm->ep_notify); - d = ep_desc(gadget, &acm_hs_notify_desc, &acm_fs_notify_desc); - usb_ep_enable(f_acm->ep_notify, d); + f_acm->ep_notify->desc = ep_desc(gadget, &acm_hs_notify_desc, + &acm_fs_notify_desc); + usb_ep_enable(f_acm->ep_notify); acm_start_ep(f_acm->ep_notify, acm_notify_complete, f_acm); @@ -454,6 +453,9 @@ static void acm_disable(struct usb_function *f) usb_ep_disable(f_acm->ep_out); usb_ep_disable(f_acm->ep_in); usb_ep_disable(f_acm->ep_notify); + f_acm->ep_out->desc = NULL; + f_acm->ep_in->desc = NULL; + f_acm->ep_notify->desc = NULL; if (f_acm->req_out) { free(f_acm->req_out->buf); diff --git a/drivers/usb/gadget/f_fastboot.c b/drivers/usb/gadget/f_fastboot.c index 8df0e3f331d1..e1eed5fa4cb4 100644 --- a/drivers/usb/gadget/f_fastboot.c +++ b/drivers/usb/gadget/f_fastboot.c @@ -320,13 +320,13 @@ static int fastboot_set_alt(struct usb_function *f, struct usb_composite_dev *cdev = f->config->cdev; struct usb_gadget *gadget = cdev->gadget; struct f_fastboot *f_fb = func_to_fastboot(f); - const struct usb_endpoint_descriptor *d; debug("%s: func: %s intf: %d alt: %d\n", __func__, f->name, interface, alt); - d = fb_ep_desc(gadget, &fs_ep_out, &hs_ep_out, &ss_ep_out); - ret = usb_ep_enable(f_fb->out_ep, d); + f_fb->out_ep->desc = fb_ep_desc(gadget, &fs_ep_out, &hs_ep_out, + &ss_ep_out); + ret = usb_ep_enable(f_fb->out_ep); if (ret) { puts("failed to enable out ep\n"); return ret; @@ -340,8 +340,8 @@ static int fastboot_set_alt(struct usb_function *f, } f_fb->out_req->complete = rx_handler_command; - d = fb_ep_desc(gadget, &fs_ep_in, &hs_ep_in, &ss_ep_in); - ret = usb_ep_enable(f_fb->in_ep, d); + f_fb->in_ep->desc = fb_ep_desc(gadget, &fs_ep_in, &hs_ep_in, &ss_ep_in); + ret = usb_ep_enable(f_fb->in_ep); if (ret) { puts("failed to enable in ep\n"); goto err; diff --git a/drivers/usb/gadget/f_mass_storage.c b/drivers/usb/gadget/f_mass_storage.c index 87ed25e8bb3a..0eb4af993717 100644 --- a/drivers/usb/gadget/f_mass_storage.c +++ b/drivers/usb/gadget/f_mass_storage.c @@ -2158,7 +2158,8 @@ static int enable_endpoint(struct fsg_common *common, struct usb_ep *ep, int rc; ep->driver_data = common; - rc = usb_ep_enable(ep, d); + ep->desc = d; + rc = usb_ep_enable(ep); if (rc) ERROR(common, "can't enable %s, result %d\n", ep->name, rc); return rc; @@ -2205,10 +2206,12 @@ reset: /* Disable the endpoints */ if (fsg->bulk_in_enabled) { usb_ep_disable(fsg->bulk_in); + fsg->bulk_in->desc = NULL; fsg->bulk_in_enabled = 0; } if (fsg->bulk_out_enabled) { usb_ep_disable(fsg->bulk_out); + fsg->bulk_out->desc = NULL; fsg->bulk_out_enabled = 0; } diff --git a/drivers/usb/gadget/f_rockusb.c b/drivers/usb/gadget/f_rockusb.c index d679cdae97c8..37957b202f8c 100644 --- a/drivers/usb/gadget/f_rockusb.c +++ b/drivers/usb/gadget/f_rockusb.c @@ -202,6 +202,8 @@ static void rockusb_disable(struct usb_function *f) usb_ep_disable(f_rkusb->out_ep); usb_ep_disable(f_rkusb->in_ep); + f_rkusb->out_ep->desc = NULL; + f_rkusb->in_ep->desc = NULL; if (f_rkusb->out_req) { free(f_rkusb->out_req->buf); @@ -246,13 +248,12 @@ static int rockusb_set_alt(struct usb_function *f, unsigned int interface, struct usb_composite_dev *cdev = f->config->cdev; struct usb_gadget *gadget = cdev->gadget; struct f_rockusb *f_rkusb = func_to_rockusb(f); - const struct usb_endpoint_descriptor *d; debug("%s: func: %s intf: %d alt: %d\n", __func__, f->name, interface, alt); - d = rkusb_ep_desc(gadget, &fs_ep_out, &hs_ep_out); - ret = usb_ep_enable(f_rkusb->out_ep, d); + f_rkusb->out_ep->desc = rkusb_ep_desc(gadget, &fs_ep_out, &hs_ep_out); + ret = usb_ep_enable(f_rkusb->out_ep); if (ret) { printf("failed to enable out ep\n"); return ret; @@ -266,8 +267,8 @@ static int rockusb_set_alt(struct usb_function *f, unsigned int interface, } f_rkusb->out_req->complete = rx_handler_command; - d = rkusb_ep_desc(gadget, &fs_ep_in, &hs_ep_in); - ret = usb_ep_enable(f_rkusb->in_ep, d); + f_rkusb->in_ep->desc = rkusb_ep_desc(gadget, &fs_ep_in, &hs_ep_in); + ret = usb_ep_enable(f_rkusb->in_ep); if (ret) { printf("failed to enable in ep\n"); goto err; diff --git a/drivers/usb/gadget/f_sdp.c b/drivers/usb/gadget/f_sdp.c index cd2c282247ac..0bb386053258 100644 --- a/drivers/usb/gadget/f_sdp.c +++ b/drivers/usb/gadget/f_sdp.c @@ -625,12 +625,14 @@ static int sdp_set_alt(struct usb_function *f, unsigned intf, unsigned alt) debug("%s: intf: %d alt: %d\n", __func__, intf, alt); if (gadget_is_dualspeed(gadget) && gadget->speed == USB_SPEED_HIGH) { - result = usb_ep_enable(sdp->in_ep, &in_hs_desc); - result |= usb_ep_enable(sdp->out_ep, &out_hs_desc); + sdp->in_ep->desc = &in_hs_desc; + sdp->out_ep->desc = &out_hs_desc; } else { - result = usb_ep_enable(sdp->in_ep, &in_desc); - result |= usb_ep_enable(sdp->out_ep, &out_desc); + sdp->in_ep->desc = &in_hs_desc; + sdp->out_ep->desc = &out_hs_desc; } + result = usb_ep_enable(sdp->in_ep); + result |= usb_ep_enable(sdp->out_ep); if (result) return result; @@ -662,6 +664,8 @@ static void sdp_disable(struct usb_function *f) usb_ep_disable(sdp->in_ep); usb_ep_disable(sdp->out_ep); + sdp->in_ep->desc = NULL; + sdp->out_ep->desc = NULL; if (sdp->in_req) { free(sdp->in_req->buf); diff --git a/drivers/usb/gadget/f_thor.c b/drivers/usb/gadget/f_thor.c index 540b9f882378..210537d51e92 100644 --- a/drivers/usb/gadget/f_thor.c +++ b/drivers/usb/gadget/f_thor.c @@ -909,16 +909,15 @@ static int thor_eps_setup(struct usb_function *f) struct usb_composite_dev *cdev = f->config->cdev; struct usb_gadget *gadget = cdev->gadget; struct thor_dev *dev = thor_func->dev; - struct usb_endpoint_descriptor *d; struct usb_request *req; struct usb_ep *ep; int result; ep = dev->in_ep; - d = ep_desc(gadget, &hs_in_desc, &fs_in_desc); - debug("(d)bEndpointAddress: 0x%x\n", d->bEndpointAddress); + ep->desc = ep_desc(gadget, &hs_in_desc, &fs_in_desc); + debug("(d)bEndpointAddress: 0x%x\n", ep->desc->bEndpointAddress); - result = usb_ep_enable(ep, d); + result = usb_ep_enable(ep); if (result) goto err; @@ -933,10 +932,10 @@ static int thor_eps_setup(struct usb_function *f) req->complete = thor_rx_tx_complete; dev->in_req = req; ep = dev->out_ep; - d = ep_desc(gadget, &hs_out_desc, &fs_out_desc); - debug("(d)bEndpointAddress: 0x%x\n", d->bEndpointAddress); + ep->desc = ep_desc(gadget, &hs_out_desc, &fs_out_desc); + debug("(d)bEndpointAddress: 0x%x\n", ep->desc->bEndpointAddress); - result = usb_ep_enable(ep, d); + result = usb_ep_enable(ep); if (result) goto err_free_in_req; @@ -951,10 +950,10 @@ static int thor_eps_setup(struct usb_function *f) dev->out_req = req; /* ACM control EP */ ep = dev->int_ep; - d = ep_desc(gadget, &hs_int_desc, &fs_int_desc); - debug("(d)bEndpointAddress: 0x%x\n", d->bEndpointAddress); + ep->desc = ep_desc(gadget, &hs_int_desc, &fs_int_desc); + debug("(d)bEndpointAddress: 0x%x\n", ep->desc->bEndpointAddress); - result = usb_ep_enable(ep, d); + result = usb_ep_enable(ep); if (result) goto err; -- 2.53.0