From 10ebd8556b7990499c896a550e3d416b444211e6 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Fri, 10 May 2024 02:23:07 +0000
Subject: [PATCH] add led
---
kernel/drivers/usb/gadget/udc/core.c | 39 +++++++++++++++++++++++++++------------
1 files changed, 27 insertions(+), 12 deletions(-)
diff --git a/kernel/drivers/usb/gadget/udc/core.c b/kernel/drivers/usb/gadget/udc/core.c
index ef0332a..74bc551 100644
--- a/kernel/drivers/usb/gadget/udc/core.c
+++ b/kernel/drivers/usb/gadget/udc/core.c
@@ -730,11 +730,11 @@
}
ret = gadget->ops->pullup(gadget, 0);
- if (!ret) {
+ if (!ret)
gadget->connected = 0;
- if (gadget->udc->driver)
- gadget->udc->driver->disconnect(gadget);
- }
+
+ if (gadget->udc->driver)
+ gadget->udc->driver->disconnect(gadget);
out:
trace_usb_gadget_disconnect(gadget, ret);
@@ -1047,12 +1047,16 @@
/* ------------------------------------------------------------------------- */
-static void usb_udc_connect_control(struct usb_udc *udc)
+static int usb_udc_connect_control(struct usb_udc *udc)
{
+ int ret;
+
if (udc->vbus)
- usb_gadget_connect(udc->gadget);
+ ret = usb_gadget_connect(udc->gadget);
else
- usb_gadget_disconnect(udc->gadget);
+ ret = usb_gadget_disconnect(udc->gadget);
+
+ return ret;
}
/**
@@ -1507,15 +1511,26 @@
if (ret)
goto err1;
ret = usb_gadget_udc_start(udc);
- if (ret) {
- driver->unbind(udc->gadget);
- goto err1;
- }
+ if (ret)
+ goto err_start;
+
usb_gadget_enable_async_callbacks(udc);
- usb_udc_connect_control(udc);
+ ret = usb_udc_connect_control(udc);
+ if (ret)
+ goto err_connect_control;
kobject_uevent(&udc->dev.kobj, KOBJ_CHANGE);
return 0;
+
+err_connect_control:
+ usb_gadget_disable_async_callbacks(udc);
+ if (udc->gadget->irq)
+ synchronize_irq(udc->gadget->irq);
+ usb_gadget_udc_stop(udc);
+
+err_start:
+ driver->unbind(udc->gadget);
+
err1:
if (ret != -EISNAM)
dev_err(&udc->dev, "failed to start %s: %d\n",
--
Gitblit v1.6.2