From 08d496b5f5b9523faafb0405e23f9cc6d8e14b5c Mon Sep 17 00:00:00 2001 From: Joel Holdsworth Date: Wed, 4 Jun 2025 15:49:02 -0700 Subject: [PATCH] usb: device_next: Disassociate USB contexts from classes The usbd_class_remove_all removes all registered classes from a configuration. However, it previously left the uds_ctx back-pointer to the usdb_context set, meaning that if the class is re-registered with the usbd_register_class function, this fails with the error message "Class registered to other context at different speed" due to uds_ctx being set to another context. This patch corrects the issue by clearing udc_ctx after usbd_class_shutdown has been called. Signed-off-by: Joel Holdsworth --- subsys/usb/device_next/usbd_class.c | 1 + 1 file changed, 1 insertion(+) diff --git a/subsys/usb/device_next/usbd_class.c b/subsys/usb/device_next/usbd_class.c index 48f3d6d7268..ae5f74b5c5d 100644 --- a/subsys/usb/device_next/usbd_class.c +++ b/subsys/usb/device_next/usbd_class.c @@ -282,6 +282,7 @@ int usbd_class_remove_all(struct usbd_context *const uds_ctx, c_nd = CONTAINER_OF(node, struct usbd_class_node, node); atomic_clear_bit(&c_nd->state, USBD_CCTX_REGISTERED); usbd_class_shutdown(c_nd->c_data); + c_nd->c_data->uds_ctx = NULL; LOG_DBG("Remove class node %p from configuration %u", c_nd, cfg); }