summaryrefslogtreecommitdiff
path: root/firmware/usb.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/usb.c')
-rw-r--r--firmware/usb.c19
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
535void usb_stop_monitoring(void) 539void 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
542bool usb_inserted(void) 555bool usb_inserted(void)
543{ 556{