diff --git a/drivers/usb/device/usb_dc_kinetis.c b/drivers/usb/device/usb_dc_kinetis.c index 8de603cb621..d11ca2a8fe0 100644 --- a/drivers/usb/device/usb_dc_kinetis.c +++ b/drivers/usb/device/usb_dc_kinetis.c @@ -341,7 +341,7 @@ int usb_dc_ep_configure(const struct usb_dc_ep_cfg_data * const cfg) if (ep_idx && (dev_data.ep_ctrl[ep_idx].status.in_enabled || dev_data.ep_ctrl[ep_idx].status.out_enabled)) { LOG_WRN("endpoint already configured"); - return -EBUSY; + return -EALREADY; } LOG_DBG("ep %x, mps %d, type %d", cfg->ep_addr, cfg->ep_mps, @@ -531,7 +531,7 @@ int usb_dc_ep_enable(const u8_t ep) if (ep_idx && (dev_data.ep_ctrl[ep_idx].status.in_enabled || dev_data.ep_ctrl[ep_idx].status.out_enabled)) { LOG_WRN("endpoint 0x%x already enabled", ep); - return -EBUSY; + return -EALREADY; } if (EP_ADDR2DIR(ep) == USB_EP_DIR_OUT) { diff --git a/drivers/usb/device/usb_dc_mcux_ehci.c b/drivers/usb/device/usb_dc_mcux_ehci.c index 5ce4e7044ab..c9abb7babcf 100644 --- a/drivers/usb/device/usb_dc_mcux_ehci.c +++ b/drivers/usb/device/usb_dc_mcux_ehci.c @@ -232,7 +232,7 @@ int usb_dc_ep_enable(const u8_t ep) } if (s_Device.eps[ep_abs_idx].ep_occupied) { LOG_WRN("endpoint 0x%x already enabled", ep); - return -EBUSY; + return -EALREADY; } if ((EP_ADDR2IDX(ep) != USB_CONTROL_ENDPOINT) && (EP_ADDR2DIR(ep) == USB_EP_DIR_OUT)) { diff --git a/drivers/usb/device/usb_dc_sam0.c b/drivers/usb/device/usb_dc_sam0.c index e5b10285bdb..25e7c0f7393 100644 --- a/drivers/usb/device/usb_dc_sam0.c +++ b/drivers/usb/device/usb_dc_sam0.c @@ -494,7 +494,7 @@ int usb_dc_ep_enable(const u8_t ep) if (ep_num >= USB_NUM_ENDPOINTS) { LOG_ERR("endpoint index/address out of range"); - return -1; + return -EINVAL; } if (for_in) { @@ -519,7 +519,7 @@ int usb_dc_ep_disable(u8_t ep) if (ep_num >= USB_NUM_ENDPOINTS) { LOG_ERR("endpoint index/address out of range"); - return -1; + return -EINVAL; } endpoint->EPINTENCLR.reg = USB_DEVICE_EPINTENCLR_TRCPT0 diff --git a/subsys/usb/usb_device.c b/subsys/usb/usb_device.c index 8a56e767f69..6a7314f0105 100644 --- a/subsys/usb/usb_device.c +++ b/subsys/usb/usb_device.c @@ -467,6 +467,7 @@ static bool usb_get_descriptor(u16_t type_index, u16_t lang_id, static bool set_endpoint(const struct usb_ep_descriptor *ep_desc) { struct usb_dc_ep_cfg_data ep_cfg; + int ret; ep_cfg.ep_addr = ep_desc->bEndpointAddress; ep_cfg.ep_mps = sys_le16_to_cpu(ep_desc->wMaxPacketSize); @@ -480,12 +481,20 @@ static bool set_endpoint(const struct usb_ep_descriptor *ep_desc) LOG_DBG("Set endpoint 0x%x type %u MPS %u", ep_cfg.ep_addr, ep_cfg.ep_type, ep_cfg.ep_mps); - if (usb_dc_ep_configure(&ep_cfg) < 0) { - LOG_WRN("Failed to configure endpoint 0x%02x", ep_cfg.ep_addr); + ret = usb_dc_ep_configure(&ep_cfg); + if (ret == -EALREADY) { + LOG_WRN("Endpoint 0x%02x already configured", ep_cfg.ep_addr); + } else if (ret) { + LOG_ERR("Failed to configure endpoint 0x%02x", ep_cfg.ep_addr); + return false; } - if (usb_dc_ep_enable(ep_cfg.ep_addr) < 0) { - LOG_WRN("Failed to enable endpoint 0x%02x", ep_cfg.ep_addr); + ret = usb_dc_ep_enable(ep_cfg.ep_addr); + if (ret == -EALREADY) { + LOG_WRN("Endpoint 0x%02x already enabled", ep_cfg.ep_addr); + } else if (ret) { + LOG_ERR("Failed to enable endpoint 0x%02x", ep_cfg.ep_addr); + return false; } usb_dev.configured = true; @@ -506,6 +515,7 @@ static bool set_endpoint(const struct usb_ep_descriptor *ep_desc) static bool reset_endpoint(const struct usb_ep_descriptor *ep_desc) { struct usb_dc_ep_cfg_data ep_cfg; + int ret; ep_cfg.ep_addr = ep_desc->bEndpointAddress; ep_cfg.ep_type = ep_desc->bmAttributes; @@ -519,7 +529,10 @@ static bool reset_endpoint(const struct usb_ep_descriptor *ep_desc) usb_cancel_transfer(ep_cfg.ep_addr); - if (usb_dc_ep_disable(ep_cfg.ep_addr) < 0) { + ret = usb_dc_ep_disable(ep_cfg.ep_addr); + if (ret == -EALREADY) { + LOG_WRN("Endpoint 0x%02x already disabled", ep_cfg.ep_addr); + } else if (ret) { LOG_ERR("Failed to disable endpoint 0x%02x", ep_cfg.ep_addr); return false; }