diff --git a/firmware/export/config/sansaclipplus.h b/firmware/export/config/sansaclipplus.h
index 8a0a040..0d53774 100644
--- a/firmware/export/config/sansaclipplus.h
+++ b/firmware/export/config/sansaclipplus.h
@@ -179,8 +179,8 @@
/* enable these for the experimental usb stack */
#define HAVE_USBSTACK
-#define USB_HANDLED_BY_OF
-//#define USE_ROCKBOX_USB
+//#define USB_HANDLED_BY_OF
+#define USE_ROCKBOX_USB
#define USB_VENDOR_ID 0x0781
#define USB_PRODUCT_ID 0x74d1
diff --git a/firmware/target/arm/as3525/usb-drv-as3525v2.c b/firmware/target/arm/as3525/usb-drv-as3525v2.c
index 63f6e83..8e090fa 100644
--- a/firmware/target/arm/as3525/usb-drv-as3525v2.c
+++ b/firmware/target/arm/as3525/usb-drv-as3525v2.c
@@ -31,7 +31,7 @@
#include "panic.h"
#include "mmu-arm.h"
#include "system.h"
-//#define LOGF_ENABLE
+#define LOGF_ENABLE
#include "logf.h"
#include "usb-drv-as3525v2.h"
#include "usb_core.h"
@@ -90,6 +90,8 @@ static struct usb_endpoint endpoints[USB_NUM_ENDPOINTS][2];
static struct usb_ctrlrequest _ep0_setup_pkt __attribute__((aligned(32)));
static struct usb_ctrlrequest *ep0_setup_pkt = AS3525_UNCACHED_ADDR(&_ep0_setup_pkt);
+static int g_usbreset_count = 0;
+
/* state of EP0 */
static enum ep0state ep0_state;
@@ -449,6 +451,8 @@ void usb_drv_init(void)
wakeup_init(&endpoints[ep][DIR_OUT].complete);
/* Enable global interrupts */
enable_global_interrupts();
+
+ g_usbreset_count = 0;
}
void usb_drv_exit(void)
@@ -587,6 +591,19 @@ void INT_USB(void)
{
logf("usb-drv: bus reset");
+ g_usbreset_count++;
+
+ if(g_usbreset_count == 2)
+ {
+ logf("usb-drv: hard reset");
+ logf("--------");
+ logf("--------");
+ DCTL |= DCTL_sftdiscon;
+ usb_delay();
+ usb_drv_exit();
+ usb_drv_init(); /* reset g_usbreset_count here */
+ }
+
/* Clear the Remote Wakeup Signalling */
DCTL &= ~DCTL_rmtwkupsig;
diff --git a/firmware/usbstack/usb_storage.c b/firmware/usbstack/usb_storage.c
index fa723c0..b8cb035 100644
--- a/firmware/usbstack/usb_storage.c
+++ b/firmware/usbstack/usb_storage.c
@@ -23,7 +23,7 @@
#include "usb_core.h"
#include "usb_drv.h"
#include "usb_class_driver.h"
-/*#define LOGF_ENABLE*/
+#define LOGF_ENABLE
#include "logf.h"
#include "storage.h"
#include "disk.h"