diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/portable/nordic/nrf5x/hal_nrf5x.c | 30 | ||||
| -rw-r--r-- | src/tusb.c | 8 |
2 files changed, 26 insertions, 12 deletions
diff --git a/src/portable/nordic/nrf5x/hal_nrf5x.c b/src/portable/nordic/nrf5x/hal_nrf5x.c index f616264f0..68e19a42c 100644 --- a/src/portable/nordic/nrf5x/hal_nrf5x.c +++ b/src/portable/nordic/nrf5x/hal_nrf5x.c @@ -134,6 +134,12 @@ static void hfclk_disable(void) *------------------------------------------------------------------*/ bool tusb_hal_init(void) { + // TODO may move to application + + // USB power may already be ready at this time -> no event generated + // We need to execute the handler based on the status + uint32_t usb_reg; + #ifdef SOFTDEVICE_PRESENT if ( is_sd_enabled() ) { @@ -141,22 +147,22 @@ bool tusb_hal_init(void) sd_power_usbpwrrdy_enable(true); sd_power_usbremoved_enable(true); - // USB power may already be ready at this time -> no event generated - // We need to execute the handler based on the status - uint32_t usb_reg; sd_power_usbregstatus_get(&usb_reg); + }else +#endif + { + usb_reg = NRF_POWER->USBREGSTATUS; + } - if (usb_reg & POWER_USBREGSTATUS_VBUSDETECT_Msk ) - { - tusb_hal_nrf_power_event(NRFX_POWER_USB_EVT_DETECTED); - } + if (usb_reg & POWER_USBREGSTATUS_VBUSDETECT_Msk ) + { + tusb_hal_nrf_power_event(NRFX_POWER_USB_EVT_DETECTED); + } - if (usb_reg & POWER_USBREGSTATUS_OUTPUTRDY_Msk ) - { - tusb_hal_nrf_power_event(NRFX_POWER_USB_EVT_READY); - } + if (usb_reg & POWER_USBREGSTATUS_OUTPUTRDY_Msk ) + { + tusb_hal_nrf_power_event(NRFX_POWER_USB_EVT_READY); } -#endif return true; } diff --git a/src/tusb.c b/src/tusb.c index dd3be72e4..fde29c24f 100644 --- a/src/tusb.c +++ b/src/tusb.c @@ -41,8 +41,14 @@ #include "tusb.h"
#include "device/usbd_pvt.h"
+static bool _initialized = false;
+
+
tusb_error_t tusb_init(void)
{
+ // skip if already initialized
+ if (_initialized) return TUSB_ERROR_NONE;
+
VERIFY( tusb_hal_init(), TUSB_ERROR_FAILED ) ; // hardware init
#if MODE_HOST_SUPPORTED
@@ -53,6 +59,8 @@ tusb_error_t tusb_init(void) TU_ASSERT_ERR ( usbd_init() ); // device stack init
#endif
+ _initialized = true;
+
return TUSB_ERROR_NONE;
}
|
