diff options
-rw-r--r-- | drivers/usb/dwc3/dbm.c | 4 | ||||
-rw-r--r-- | drivers/usb/dwc3/dwc3-msm.c | 21 |
2 files changed, 23 insertions, 2 deletions
diff --git a/drivers/usb/dwc3/dbm.c b/drivers/usb/dwc3/dbm.c index 34a1b6259d1b..d19683319a23 100644 --- a/drivers/usb/dwc3/dbm.c +++ b/drivers/usb/dwc3/dbm.c @@ -192,7 +192,7 @@ static int find_matching_dbm_ep(struct dbm *dbm, u8 usb_ep) if (dbm->ep_num_mapping[i] == usb_ep) return i; - pr_err("%s: No DBM EP matches USB EP %d", __func__, usb_ep); + pr_debug("%s: No DBM EP matches USB EP %d", __func__, usb_ep); return -ENODEV; /* Not found */ } @@ -378,7 +378,7 @@ int dbm_ep_unconfig(struct dbm *dbm, u8 usb_ep) dbm_ep = find_matching_dbm_ep(dbm, usb_ep); if (dbm_ep < 0) { - pr_err("usb ep index %d has no corresponding dbm ep\n", usb_ep); + pr_debug("usb ep index %d has no corespondng dbm ep\n", usb_ep); return -ENODEV; } diff --git a/drivers/usb/dwc3/dwc3-msm.c b/drivers/usb/dwc3/dwc3-msm.c index 9521bdd7317e..7447efebed7a 100644 --- a/drivers/usb/dwc3/dwc3-msm.c +++ b/drivers/usb/dwc3/dwc3-msm.c @@ -1424,6 +1424,27 @@ int msm_ep_unconfig(struct usb_ep *ep) * Do HERE more usb endpoint un-configurations * which are specific to MSM. */ + if (!mdwc->dbm || (dep->endpoint.ep_type == EP_TYPE_GSI)) + return 0; + + if (dep->busy_slot == dep->free_slot && list_empty(&dep->request_list) + && list_empty(&dep->req_queued)) { + dev_dbg(mdwc->dev, + "%s: request is not queued, disable DBM ep for ep %s\n", + __func__, ep->name); + /* Unconfigure dbm ep */ + dbm_ep_unconfig(mdwc->dbm, dep->number); + + /* + * If this is the last endpoint we unconfigured, than reset also + * the event buffers; unless unconfiguring the ep due to lpm, + * in which case the event buffer only gets reset during the + * block reset. + */ + if (dbm_get_num_of_eps_configured(mdwc->dbm) == 0 && + !dbm_reset_ep_after_lpm(mdwc->dbm)) + dbm_event_buffer_config(mdwc->dbm, 0, 0, 0); + } return 0; } |