summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/driver/usbh_device_driver.h1
-rw-r--r--src/usbh_core.c2
-rw-r--r--src/usbh_driver_hub.c7
3 files changed, 3 insertions, 7 deletions
diff --git a/include/driver/usbh_device_driver.h b/include/driver/usbh_device_driver.h
index 7e013a0..03bbd3a 100644
--- a/include/driver/usbh_device_driver.h
+++ b/include/driver/usbh_device_driver.h
@@ -259,6 +259,7 @@ void usbh_write(usbh_device_t *dev, const usbh_packet_t *packet);
/* Helper functions used by device drivers */
void device_control(usbh_device_t *dev, usbh_packet_callback_t callback, const struct usb_setup_data *setup_data, void *data);
+void device_remove(usbh_device_t *dev);
END_DECLS
diff --git a/src/usbh_core.c b/src/usbh_core.c
index e673a59..fd1dca5 100644
--- a/src/usbh_core.c
+++ b/src/usbh_core.c
@@ -52,7 +52,7 @@ static bool enumeration(void)
return usbh_data.enumeration_run;
}
-static void device_remove(usbh_device_t *dev)
+void device_remove(usbh_device_t *dev)
{
if (dev->drv && dev->drvdata) {
dev->drv->remove(dev->drvdata);
diff --git a/src/usbh_driver_hub.c b/src/usbh_driver_hub.c
index 87f8578..7dc99ea 100644
--- a/src/usbh_driver_hub.c
+++ b/src/usbh_driver_hub.c
@@ -449,13 +449,8 @@ static void event(usbh_device_t *dev, usbh_packet_callback_data_t cb_data)
}
} else {
LOG_PRINTF("\t\t\t\tDISCONNECT EVENT\n");
- if (hub->device[port]->drv && hub->device[port]->drvdata) {
- hub->device[port]->drv->remove(hub->device[port]->drvdata);
- }
- hub->device[port]->address = -1;
+ device_remove(hub->device[port]);
- hub->device[port]->drv = 0;
- hub->device[port]->drvdata = 0;
hub->device[port] = 0;
hub->current_port = CURRENT_PORT_NONE;
hub->state = EVENT_STATE_POLL_REQ;