summaryrefslogtreecommitdiff
path: root/drivers/usb
diff options
context:
space:
mode:
authorDevdutt Patnaik <dpatnaik@codeaurora.org>2016-02-29 13:52:50 -0800
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-25 16:02:38 -0700
commitd5d9af1ba996f590740a68395a7339e2195212d6 (patch)
treeeaa425d7279d5b34dd105887f2af90ce86191488 /drivers/usb
parente39b9e71e00f130c84f7b4b97a7852f5f46cdd17 (diff)
usb: f_gsi: Add support for DPL suspend/resume
Fixes EP configuration for DPL resume sequence. Sets correct interrupter number for DPL composition and also checks for NULL on notify EP in the resume path. CRs-Fixed: 983160 Change-Id: I7e9bf0aa839e63d8cfe801d3b81dd5f48a315575 Signed-off-by: Devdutt Patnaik <dpatnaik@codeaurora.org>
Diffstat (limited to 'drivers/usb')
-rw-r--r--drivers/usb/gadget/function/f_gsi.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/drivers/usb/gadget/function/f_gsi.c b/drivers/usb/gadget/function/f_gsi.c
index 30b71b84ce60..5b9ebf983e39 100644
--- a/drivers/usb/gadget/function/f_gsi.c
+++ b/drivers/usb/gadget/function/f_gsi.c
@@ -1931,14 +1931,20 @@ static void gsi_resume(struct usb_function *f)
remote_wakeup_allowed = f->config->cdev->gadget->remote_wakeup;
if (!remote_wakeup_allowed) {
- gsi->d_port.in_ep->desc = gsi->in_ep_desc_backup;
- gsi->d_port.out_ep->desc = gsi->out_ep_desc_backup;
/* Configure EPs for GSI */
- gsi->d_port.out_ep->ep_intr_num = 1;
- usb_gsi_ep_op(gsi->d_port.out_ep, &gsi->d_port.out_request,
- GSI_EP_OP_CONFIG);
- gsi->d_port.in_ep->ep_intr_num = 2;
+ if (gsi->d_port.out_ep) {
+ gsi->d_port.out_ep->desc = gsi->out_ep_desc_backup;
+ gsi->d_port.out_ep->ep_intr_num = 1;
+ usb_gsi_ep_op(gsi->d_port.out_ep,
+ &gsi->d_port.out_request, GSI_EP_OP_CONFIG);
+ }
+ gsi->d_port.in_ep->desc = gsi->in_ep_desc_backup;
+ if (gsi->prot_id != IPA_USB_DIAG)
+ gsi->d_port.in_ep->ep_intr_num = 2;
+ else
+ gsi->d_port.in_ep->ep_intr_num = 3;
+
usb_gsi_ep_op(gsi->d_port.in_ep, &gsi->d_port.in_request,
GSI_EP_OP_CONFIG);
post_event(&gsi->d_port, EVT_CONNECT_IN_PROGRESS);
@@ -1955,7 +1961,7 @@ static void gsi_resume(struct usb_function *f)
queue_work(gsi->d_port.ipa_usb_wq, &gsi->d_port.usb_ipa_w);
- if (!gsi->c_port.notify->desc)
+ 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);