diff --git a/drivers/usb/udc/udc_dwc2.c b/drivers/usb/udc/udc_dwc2.c index 7a8d9fcccf5..b0d03cd9429 100644 --- a/drivers/usb/udc/udc_dwc2.c +++ b/drivers/usb/udc/udc_dwc2.c @@ -639,9 +639,18 @@ static void dwc2_handle_xfer_next(const struct device *dev, if (USB_EP_DIR_IS_OUT(cfg->addr)) { dwc2_prep_rx(dev, buf, cfg); } else { - if (dwc2_tx_fifo_write(dev, cfg, buf)) { - LOG_ERR("Failed to start write to TX FIFO, ep 0x%02x", - cfg->addr); + int err = dwc2_tx_fifo_write(dev, cfg, buf); + + if (err) { + LOG_ERR("Failed to start write to TX FIFO, ep 0x%02x (err: %d)", + cfg->addr, err); + + buf = udc_buf_get(dev, cfg->addr); + if (udc_submit_ep_event(dev, buf, -ECONNREFUSED)) { + LOG_ERR("Failed to submit endpoint event"); + }; + + return; } }