Support USB suspend/resume defined in USB 2.0 spec.

This commit is contained in:
NIIBE Yutaka
2017-11-14 11:17:49 +09:00
parent e398fc9689
commit 168af852a5
7 changed files with 62 additions and 36 deletions

View File

@@ -340,7 +340,7 @@ void usb_lld_init (struct usb_dev *dev, uint8_t feature)
/* Clear Interrupt Status Register, and enable interrupt for USB */
st103_set_istr (0);
st103_set_cntr (CNTR_CTRM | CNTR_OVRM | CNTR_ERRM
| CNTR_RESETM);
| CNTR_WKUPM | CNTR_SUSPM | CNTR_RESETM);
}
void usb_lld_prepare_shutdown (void)
@@ -368,6 +368,18 @@ usb_lld_event_handler (struct usb_dev *dev)
st103_set_istr (CLR_RESET);
return USB_MAKE_EV (USB_EVENT_DEVICE_RESET);
}
else if ((istr_value & ISTR_WKUP))
{
st103_set_istr (CLR_WKUP);
*CNTR &= ~CNTR_FSUSP;
return USB_MAKE_EV (USB_EVENT_DEVICE_WAKEUP);
}
else if ((istr_value & ISTR_SUSP))
{
st103_set_istr (CLR_SUSP);
*CNTR |= (CNTR_FSUSP | CNTR_LPMODE);
return USB_MAKE_EV (USB_EVENT_DEVICE_SUSPEND);
}
else
{
if ((istr_value & ISTR_OVR))