Merge pull request #3796 from geurtv/master

rp2xxx: added rp2usb_deinit() to fix 'No spinlocks are available'
This commit is contained in:
Zixun LI
2026-07-29 20:14:44 +02:00
committed by GitHub
4 changed files with 12 additions and 0 deletions

View File

@ -387,6 +387,9 @@ bool dcd_deinit(uint8_t rhport) {
reset_block(RESETS_RESET_USBCTRL_BITS);
unreset_block_wait(RESETS_RESET_USBCTRL_BITS);
// Release allocated resources
rp2usb_deinit();
return true;
}

View File

@ -427,6 +427,10 @@ bool hcd_deinit(uint8_t rhport) {
irq_remove_handler(USBCTRL_IRQ, hcd_rp2040_irq);
reset_block(RESETS_RESET_USBCTRL_BITS);
unreset_block_wait(RESETS_RESET_USBCTRL_BITS);
// Release allocated resources
rp2usb_deinit();
return true;
}

View File

@ -85,6 +85,10 @@ void rp2usb_init(void) {
critical_section_init(&rp2usb_lock);
}
void rp2usb_deinit(void) {
critical_section_deinit(&rp2usb_lock);
}
void __tusb_irq_path_func(rp2usb_reset_transfer)(hw_endpoint_t *ep) {
ep->state = EPSTATE_IDLE;
ep->remaining_len = 0;

View File

@ -147,6 +147,7 @@ extern volatile uint32_t e15_last_sof;
#endif
void rp2usb_init(void);
void rp2usb_deinit(void);
// if usb hardware is in host mode
TU_ATTR_ALWAYS_INLINE static inline bool rp2usb_is_host_mode(void) {