usb: filter out synchronization type for isochronous endpoints

Fix so that different isochronous synchronization modes can be used.
It filters out the synchronization mode before sending the endpoint
type to drivers.

Signed-off-by: Johan Carlsson <johan.carlsson@teenage.engineering>
This commit is contained in:
Johan Carlsson 2020-03-24 15:05:26 +01:00 committed by Carles Cufí
commit 552508506f
3 changed files with 9 additions and 13 deletions

View file

@ -22,11 +22,15 @@
/** /**
* USB endpoint direction and number. * USB endpoint direction and number.
*/ */
#define USB_EP_DIR_MASK 0x80 #define USB_EP_DIR_MASK 0x80
#define USB_EP_DIR_IN 0x80 #define USB_EP_DIR_IN 0x80
#define USB_EP_DIR_OUT 0x00 #define USB_EP_DIR_OUT 0x00
/**
* USB endpoint Transfer Type mask.
*/
#define USB_EP_TRANSFER_TYPE_MASK 0x3
/** /**
* @brief USB Device Controller API * @brief USB Device Controller API
* @defgroup _usb_device_controller_api USB Device Controller API * @defgroup _usb_device_controller_api USB Device Controller API

View file

@ -241,7 +241,8 @@ static int usb_validate_ep_cfg_data(struct usb_ep_descriptor * const ep_descr,
for (u8_t idx = 1; idx < 16; idx++) { for (u8_t idx = 1; idx < 16; idx++) {
struct usb_dc_ep_cfg_data ep_cfg; struct usb_dc_ep_cfg_data ep_cfg;
ep_cfg.ep_type = ep_descr->bmAttributes; ep_cfg.ep_type = (ep_descr->bmAttributes &
USB_EP_TRANSFER_TYPE_MASK);
ep_cfg.ep_mps = ep_descr->wMaxPacketSize; ep_cfg.ep_mps = ep_descr->wMaxPacketSize;
ep_cfg.ep_addr = ep_descr->bEndpointAddress; ep_cfg.ep_addr = ep_descr->bEndpointAddress;
if (ep_cfg.ep_addr & USB_EP_DIR_IN) { if (ep_cfg.ep_addr & USB_EP_DIR_IN) {

View file

@ -471,12 +471,7 @@ static bool set_endpoint(const struct usb_ep_descriptor *ep_desc)
ep_cfg.ep_addr = ep_desc->bEndpointAddress; ep_cfg.ep_addr = ep_desc->bEndpointAddress;
ep_cfg.ep_mps = sys_le16_to_cpu(ep_desc->wMaxPacketSize); ep_cfg.ep_mps = sys_le16_to_cpu(ep_desc->wMaxPacketSize);
ep_cfg.ep_type = ep_desc->bmAttributes & USB_EP_TRANSFER_TYPE_MASK;
if (ep_desc->bmAttributes > USB_DC_EP_INTERRUPT) {
return false;
}
ep_cfg.ep_type = ep_desc->bmAttributes;
LOG_DBG("Set endpoint 0x%x type %u MPS %u", LOG_DBG("Set endpoint 0x%x type %u MPS %u",
ep_cfg.ep_addr, ep_cfg.ep_type, ep_cfg.ep_mps); ep_cfg.ep_addr, ep_cfg.ep_type, ep_cfg.ep_mps);
@ -518,11 +513,7 @@ static bool reset_endpoint(const struct usb_ep_descriptor *ep_desc)
int ret; int ret;
ep_cfg.ep_addr = ep_desc->bEndpointAddress; ep_cfg.ep_addr = ep_desc->bEndpointAddress;
ep_cfg.ep_type = ep_desc->bmAttributes; ep_cfg.ep_type = ep_desc->bmAttributes & USB_EP_TRANSFER_TYPE_MASK;
if (ep_desc->bmAttributes > USB_DC_EP_INTERRUPT) {
return false;
}
LOG_DBG("Reset endpoint 0x%02x type %u", LOG_DBG("Reset endpoint 0x%02x type %u",
ep_cfg.ep_addr, ep_cfg.ep_type); ep_cfg.ep_addr, ep_cfg.ep_type);