[PATCH 07/19] usb: gadget: bdc: the resume callback is optional

From: Greg Kroah-Hartman

Date: Tue Oct 27 2026 - 11:06:59 EST


From: Josef Bacik <josef@xxxxxxxxxxxxxx>

handle_link_state_change() tests gadget_driver->suspend before it calls
it and sets DEVICE_SUSPENDED, but calls gadget_driver->resume untested
when the link comes back. gadgetfs has a suspend callback and no resume
callback: with it the first bus resume ends in a call of NULL.

Fixes: efed421a94e6 ("usb: gadget: Add UDC driver for Broadcom USB3.0 device controller IP BDC")
Cc: stable <stable@xxxxxxxxxx>
Cc: Justin Chen <justin.chen@xxxxxxxxxxxx>
Cc: Al Cooper <alcooperx@xxxxxxxxx>
Cc: Broadcom internal kernel review list <bcm-kernel-feedback-list@xxxxxxxxxxxx>
Cc: Neill Kapron <nkapron@xxxxxxxxxx>
Signed-off-by: Josef Bacik <josef@xxxxxxxxxxxxxx>
Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
---
drivers/usb/gadget/udc/bdc/bdc_udc.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/gadget/udc/bdc/bdc_udc.c b/drivers/usb/gadget/udc/bdc/bdc_udc.c
index 7a12219edac6..88a8f6550e02 100644
--- a/drivers/usb/gadget/udc/bdc/bdc_udc.c
+++ b/drivers/usb/gadget/udc/bdc/bdc_udc.c
@@ -218,7 +218,8 @@ static void handle_link_state_change(struct bdc *bdc, u32 uspc)
case BDC_LINK_STATE_RESUME:
dev_dbg(bdc->dev, "Resumed from Suspend\n");
if (bdc->devstatus & DEVICE_SUSPENDED) {
- bdc->gadget_driver->resume(&bdc->gadget);
+ if (bdc->gadget_driver->resume)
+ bdc->gadget_driver->resume(&bdc->gadget);
bdc->devstatus &= ~DEVICE_SUSPENDED;
}
break;

--
2.56.0