host/dwc2: resume OUT transfer when PING ACKed
Signed-off-by: HiFiPhile <admin@hifiphile.com>
This commit is contained in:
@@ -590,7 +590,7 @@ static bool channel_xfer_start(dwc2_regs_t* dwc2, uint8_t ch_id) {
|
|||||||
hcintmsk |= HCINT_BABBLE_ERR | HCINT_DATATOGGLE_ERR | HCINT_ACK;
|
hcintmsk |= HCINT_BABBLE_ERR | HCINT_DATATOGGLE_ERR | HCINT_ACK;
|
||||||
} else {
|
} else {
|
||||||
hcintmsk |= HCINT_NYET;
|
hcintmsk |= HCINT_NYET;
|
||||||
if (edpt->hcsplt_bm.split_en) {
|
if (edpt->hcsplt_bm.split_en || hctsiz & HCTSIZ_DOPING) {
|
||||||
hcintmsk |= HCINT_ACK;
|
hcintmsk |= HCINT_ACK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -973,11 +973,18 @@ static bool handle_channel_out_slave(dwc2_regs_t* dwc2, uint8_t ch_id, uint32_t
|
|||||||
} else if (hcint & HCINT_ACK) {
|
} else if (hcint & HCINT_ACK) {
|
||||||
xfer->err_count = 0;
|
xfer->err_count = 0;
|
||||||
channel->hcintmsk &= ~HCINT_ACK;
|
channel->hcintmsk &= ~HCINT_ACK;
|
||||||
if (channel->hcsplt_bm.split_en && !channel->hcsplt_bm.split_compl) {
|
if (channel->hcsplt_bm.split_en) {
|
||||||
|
if(!channel->hcsplt_bm.split_compl) {
|
||||||
// start split is ACK --> do complete split
|
// start split is ACK --> do complete split
|
||||||
channel->hcsplt_bm.split_compl = 1;
|
channel->hcsplt_bm.split_compl = 1;
|
||||||
channel->hcchar |= HCCHAR_CHENA;
|
channel->hcchar |= HCCHAR_CHENA;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
// Device is ready, resume transfer
|
||||||
|
edpt->do_ping = 0;
|
||||||
|
xfer->err_count = 0;
|
||||||
|
TU_ASSERT(channel_xfer_start(dwc2, ch_id));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_done) {
|
if (is_done) {
|
||||||
|
Reference in New Issue
Block a user