dwc2/host: enable disconnect interrupt + handle it
Signed-off-by: Maxime Vincent <maxime@veemax.be>
This commit is contained in:
@@ -381,7 +381,7 @@ bool hcd_init(uint8_t rhport, const tusb_rhport_init_t* rh_init) {
|
|||||||
dwc2->hprt = HPRT_POWER; // turn on VBUS
|
dwc2->hprt = HPRT_POWER; // turn on VBUS
|
||||||
|
|
||||||
// Enable required interrupts
|
// Enable required interrupts
|
||||||
dwc2->gintmsk |= GINTSTS_OTGINT | GINTSTS_CONIDSTSCHNG | GINTSTS_HPRTINT | GINTSTS_HCINT;
|
dwc2->gintmsk |= GINTSTS_OTGINT | GINTSTS_CONIDSTSCHNG | GINTSTS_HPRTINT | GINTSTS_HCINT | GINTSTS_DISCINT;
|
||||||
|
|
||||||
// NPTX can hold at least 2 packet, change interrupt level to half-empty
|
// NPTX can hold at least 2 packet, change interrupt level to half-empty
|
||||||
uint32_t gahbcfg = dwc2->gahbcfg & ~GAHBCFG_TX_FIFO_EPMTY_LVL;
|
uint32_t gahbcfg = dwc2->gahbcfg & ~GAHBCFG_TX_FIFO_EPMTY_LVL;
|
||||||
@@ -1330,6 +1330,14 @@ void hcd_int_handler(uint8_t rhport, bool in_isr) {
|
|||||||
handle_channel_irq(rhport, in_isr);
|
handle_channel_irq(rhport, in_isr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (gintsts & GINTSTS_DISCINT) {
|
||||||
|
// Device disconnected
|
||||||
|
dwc2->gintsts = GINTSTS_DISCINT;
|
||||||
|
if (!(dwc2->hprt & HPRT_CONN_STATUS)) {
|
||||||
|
hcd_event_device_remove(rhport, in_isr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#if CFG_TUH_DWC2_SLAVE_ENABLE
|
#if CFG_TUH_DWC2_SLAVE_ENABLE
|
||||||
// RxFIFO non-empty interrupt handling
|
// RxFIFO non-empty interrupt handling
|
||||||
if (gintsts & GINTSTS_RXFLVL) {
|
if (gintsts & GINTSTS_RXFLVL) {
|
||||||
|
Reference in New Issue
Block a user