Transfers forced stop on suspend for OTGv1, experimental.

git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@13148 27425a3e-05d8-49a3-a47f-9c15f0e5edd8
This commit is contained in:
Giovanni Di Sirio 2019-10-27 11:13:58 +00:00
parent b3d2a32e11
commit 9d34ecb190
1 changed files with 12 additions and 5 deletions

View File

@ -156,12 +156,16 @@ static void otg_disable_ep(USBDriver *usbp) {
unsigned i;
for (i = 0; i <= usbp->otgparams->num_endpoints; i++) {
otgp->ie[i].DIEPCTL = 0;
otgp->ie[i].DIEPTSIZ = 0;
otgp->ie[i].DIEPINT = 0xFFFFFFFF;
otgp->oe[i].DOEPCTL = 0;
otgp->oe[i].DOEPTSIZ = 0;
if ((otgp->ie[i].DIEPCTL & DIEPCTL_EPENA) != 0U) {
otgp->ie[i].DIEPCTL |= DIEPCTL_EPDIS;
}
if ((otgp->oe[i].DOEPCTL & DIEPCTL_EPENA) != 0U) {
otgp->oe[i].DOEPCTL |= DIEPCTL_EPDIS;
}
otgp->ie[i].DIEPINT = 0xFFFFFFFF;
otgp->oe[i].DOEPINT = 0xFFFFFFFF;
}
otgp->DAINTMSK = DAINTMSK_OEPM(0) | DAINTMSK_IEPM(0);
@ -559,6 +563,9 @@ static void usb_lld_serve_interrupt(USBDriver *usbp) {
/* Suspend handling.*/
if (sts & GINTSTS_USBSUSP) {
/* Stopping all ongoing transfers.*/
otg_disable_ep(usbp);
/* Default suspend action.*/
_usb_suspend(usbp);
}