diff options
Diffstat (limited to 'firmware/usb.c')
-rw-r--r-- | firmware/usb.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/firmware/usb.c b/firmware/usb.c index 3867bfb496..90991e25fd 100644 --- a/firmware/usb.c +++ b/firmware/usb.c | |||
@@ -172,6 +172,10 @@ static void usb_thread(void) | |||
172 | queue_wait(&usb_queue, &ev); | 172 | queue_wait(&usb_queue, &ev); |
173 | switch(ev.id) | 173 | switch(ev.id) |
174 | { | 174 | { |
175 | #ifdef USB_DRIVER_CLOSE | ||
176 | case USB_QUIT: | ||
177 | return; | ||
178 | #endif | ||
175 | #ifdef HAVE_USBSTACK | 179 | #ifdef HAVE_USBSTACK |
176 | case USB_TRANSFER_COMPLETION: | 180 | case USB_TRANSFER_COMPLETION: |
177 | usb_core_handle_transfer_completion((struct usb_transfer_completion_event_data*)ev.data); | 181 | usb_core_handle_transfer_completion((struct usb_transfer_completion_event_data*)ev.data); |
@@ -531,13 +535,22 @@ void usb_start_monitoring(void) | |||
531 | usb_monitor_enabled = true; | 535 | usb_monitor_enabled = true; |
532 | } | 536 | } |
533 | 537 | ||
534 | #ifdef TOSHIBA_GIGABEAT_S | 538 | #ifdef USB_DRIVER_CLOSE |
535 | void usb_stop_monitoring(void) | 539 | void usb_close(void) |
536 | { | 540 | { |
541 | struct thread_entry *thread = usb_thread_entry; | ||
542 | usb_thread_entry = NULL; | ||
543 | |||
544 | if (thread == NULL) | ||
545 | return; | ||
546 | |||
537 | tick_remove_task(usb_tick); | 547 | tick_remove_task(usb_tick); |
538 | usb_monitor_enabled = false; | 548 | usb_monitor_enabled = false; |
549 | |||
550 | queue_post(&usb_queue, USB_QUIT, 0); | ||
551 | thread_wait(thread); | ||
539 | } | 552 | } |
540 | #endif | 553 | #endif /* USB_DRIVER_CLOSE */ |
541 | 554 | ||
542 | bool usb_inserted(void) | 555 | bool usb_inserted(void) |
543 | { | 556 | { |