Merge "usb: gsi: Queue control notification on gsi_resume"
This commit is contained in:
commit
7773787201
1 changed files with 25 additions and 12 deletions
|
@ -1359,6 +1359,12 @@ static int gsi_ctrl_send_notification(struct f_gsi *gsi,
|
|||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (atomic_inc_return(&gsi->c_port.notify_count) != 1) {
|
||||
log_event_dbg("delay ep_queue: notify req is busy %d",
|
||||
atomic_read(&gsi->c_port.notify_count));
|
||||
return 0;
|
||||
}
|
||||
|
||||
event = req->buf;
|
||||
|
||||
switch (state) {
|
||||
|
@ -1414,12 +1420,6 @@ static int gsi_ctrl_send_notification(struct f_gsi *gsi,
|
|||
|
||||
log_event_dbg("send Notify type %02x", event->bNotificationType);
|
||||
|
||||
if (atomic_inc_return(&gsi->c_port.notify_count) != 1) {
|
||||
log_event_dbg("delay ep_queue: notify req is busy %d",
|
||||
atomic_read(&gsi->c_port.notify_count));
|
||||
return 0;
|
||||
}
|
||||
|
||||
return queue_notification_request(gsi);
|
||||
}
|
||||
|
||||
|
@ -1469,7 +1469,8 @@ static void gsi_rndis_response_available(void *_rndis)
|
|||
{
|
||||
struct f_gsi *gsi = _rndis;
|
||||
|
||||
gsi_ctrl_send_notification(gsi, GSI_CTRL_NOTIFY_RESPONSE_AVAILABLE);
|
||||
gsi_ctrl_send_notification(gsi,
|
||||
GSI_CTRL_NOTIFY_RESPONSE_AVAILABLE);
|
||||
}
|
||||
|
||||
static void gsi_rndis_command_complete(struct usb_ep *ep,
|
||||
|
@ -2056,6 +2057,8 @@ static void gsi_suspend(struct usb_function *f)
|
|||
queue_work(gsi->d_port.ipa_usb_wq, &gsi->d_port.usb_ipa_w);
|
||||
}
|
||||
|
||||
log_event_dbg("%s: notify_count = %d\n",
|
||||
__func__, atomic_read(&gsi->c_port.notify_count));
|
||||
log_event_dbg("gsi suspended");
|
||||
}
|
||||
|
||||
|
@ -2080,6 +2083,21 @@ static void gsi_resume(struct usb_function *f)
|
|||
else
|
||||
remote_wakeup_allowed = f->config->cdev->gadget->remote_wakeup;
|
||||
|
||||
if (gsi->c_port.notify && !gsi->c_port.notify->desc)
|
||||
config_ep_by_speed(cdev->gadget, f, gsi->c_port.notify);
|
||||
|
||||
log_event_dbg("%s: notify_count = %d\n",
|
||||
__func__, atomic_read(&gsi->c_port.notify_count));
|
||||
|
||||
/* Send notification to host for RMNET, RNDIS and MBIM Interface */
|
||||
if ((gsi->prot_id == IPA_USB_MBIM ||
|
||||
gsi->prot_id == IPA_USB_RNDIS ||
|
||||
gsi->prot_id == IPA_USB_RMNET) &&
|
||||
(atomic_read(&gsi->c_port.notify_count) >= 1)) {
|
||||
log_event_dbg("%s: force_queue\n", __func__);
|
||||
queue_notification_request(gsi);
|
||||
}
|
||||
|
||||
if (!remote_wakeup_allowed) {
|
||||
|
||||
/* Configure EPs for GSI */
|
||||
|
@ -2110,11 +2128,6 @@ static void gsi_resume(struct usb_function *f)
|
|||
post_event(&gsi->d_port, EVT_RESUMED);
|
||||
|
||||
queue_work(gsi->d_port.ipa_usb_wq, &gsi->d_port.usb_ipa_w);
|
||||
|
||||
if (gsi->c_port.notify && !gsi->c_port.notify->desc)
|
||||
config_ep_by_speed(cdev->gadget, f, gsi->c_port.notify);
|
||||
|
||||
atomic_set(&gsi->c_port.notify_count, 0);
|
||||
log_event_dbg("%s: completed", __func__);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue