summaryrefslogtreecommitdiff
path: root/drivers/usb
diff options
context:
space:
mode:
authorVijayavardhan Vennapusa <vvreddy@codeaurora.org>2017-02-18 17:57:08 +0530
committerVijayavardhan Vennapusa <vvreddy@codeaurora.org>2017-02-23 11:48:35 +0530
commit02702e795b3f56fcd6efb58623169fe9ec639c5c (patch)
treeead5b89b198143fec36a9357dd368a2c993108c1 /drivers/usb
parent3a7e752617514960c5cecdf84e12b13dc63c04c7 (diff)
USB: u_data_ipa: Fix pm_runtime_get/put() mismatch
If IPA driver is disabled or IPA driver can fail when tether_bridge_init() is called as part of connect_work. In this case, as part of connect_work, results in not decrementing pm_usage counter, which causes USB not entering low power mode. Fix the issue by decrementing pm_usage counter in error cases. Change-Id: I7fdb7a28e3e2da6d4c0b01e69e3551f81d000aa4 Signed-off-by: Vijayavardhan Vennapusa <vvreddy@codeaurora.org>
Diffstat (limited to 'drivers/usb')
-rw-r--r--drivers/usb/gadget/function/u_data_ipa.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/usb/gadget/function/u_data_ipa.c b/drivers/usb/gadget/function/u_data_ipa.c
index 83a98f1196f8..baf5eae578a4 100644
--- a/drivers/usb/gadget/function/u_data_ipa.c
+++ b/drivers/usb/gadget/function/u_data_ipa.c
@@ -413,6 +413,7 @@ static void ipa_data_connect_work(struct work_struct *w)
if (!gadget) {
spin_unlock_irqrestore(&port->port_lock, flags);
+ usb_gadget_autopm_put_async(port->gadget);
pr_err("%s: gport is NULL.\n", __func__);
return;
}
@@ -676,6 +677,8 @@ disconnect_usb_bam_ipa_out:
usb_bam_disconnect_ipa(port->usb_bam_type, &port->ipa_params);
is_ipa_disconnected = true;
}
+ if (port->func_type == USB_IPA_FUNC_RMNET)
+ teth_bridge_disconnect(port->ipa_params.src_client);
unconfig_msm_ep_in:
spin_lock_irqsave(&port->port_lock, flags);
/* check if USB cable is disconnected or not */
@@ -698,6 +701,7 @@ out:
spin_lock_irqsave(&port->port_lock, flags);
port->is_connected = false;
spin_unlock_irqrestore(&port->port_lock, flags);
+ usb_gadget_autopm_put_async(port->gadget);
}
/**