diff --git a/drivers/platform/msm/usb_bam.c b/drivers/platform/msm/usb_bam.c
index a44fca5beac225f8e863fee784cf81dfed18aef9..3b931e4a3b3e6ee8a20c9e0edb5c23cfee787c7f 100644
--- a/drivers/platform/msm/usb_bam.c
+++ b/drivers/platform/msm/usb_bam.c
@@ -527,6 +527,7 @@ static int connect_pipe_sys2bam_ipa(u8 idx,
 	sys_in_params.priv = ipa_params->priv;
 	sys_in_params.notify = ipa_params->notify;
 	sys_in_params.skip_ep_cfg = ipa_params->skip_ep_cfg;
+	sys_in_params.keep_ipa_awake = ipa_params->keep_ipa_awake;
 	memcpy(&sys_in_params.ipa_ep_cfg, &ipa_params->ipa_ep_cfg,
 		   sizeof(struct ipa_ep_cfg));
 
@@ -591,6 +592,7 @@ static int connect_pipe_bam2bam_ipa(u8 idx,
 	ipa_in_params.notify = ipa_params->notify;
 	ipa_in_params.priv = ipa_params->priv;
 	ipa_in_params.skip_ep_cfg = ipa_params->skip_ep_cfg;
+	ipa_in_params.keep_ipa_awake = ipa_params->keep_ipa_awake;
 
 	/* If BAM is using dedicated SPS pipe memory, get it */
 
diff --git a/drivers/usb/gadget/u_bam.c b/drivers/usb/gadget/u_bam.c
index b4f4363e5fc04f736d22e37e598d23f0f79eeb61..0d22fae07df2ea5dc183b14ca7f3f46bbdfcbf66 100644
--- a/drivers/usb/gadget/u_bam.c
+++ b/drivers/usb/gadget/u_bam.c
@@ -1092,6 +1092,7 @@ static void gbam2bam_connect_work(struct work_struct *w)
 		}
 		d->ipa_params.ipa_ep_cfg.mode.mode = IPA_BASIC;
 		d->ipa_params.skip_ep_cfg = teth_bridge_params.skip_ep_cfg;
+		d->ipa_params.keep_ipa_awake = false;
 		d->ipa_params.dir = USB_TO_PEER_PERIPHERAL;
 		ret = usb_bam_connect_ipa(&d->ipa_params);
 		if (ret) {
diff --git a/drivers/usb/gadget/u_bam_data.c b/drivers/usb/gadget/u_bam_data.c
index a0d8b245ae6da205526fb8554bb4d764b5177021..0a6ed70f53c02cc0873994d28a94718a5570e6e7 100644
--- a/drivers/usb/gadget/u_bam_data.c
+++ b/drivers/usb/gadget/u_bam_data.c
@@ -631,12 +631,14 @@ static void bam2bam_data_connect_work(struct work_struct *w)
 			d->ipa_params.ipa_ep_cfg.mode.mode = IPA_BASIC;
 			d->ipa_params.skip_ep_cfg =
 				teth_bridge_params.skip_ep_cfg;
+			d->ipa_params.keep_ipa_awake = true;
 		}
 		d->ipa_params.dir = USB_TO_PEER_PERIPHERAL;
 		if (d->func_type == USB_FUNC_ECM) {
 			d->ipa_params.notify = ecm_qc_get_ipa_rx_cb();
 			d->ipa_params.priv = ecm_qc_get_ipa_priv();
 			d->ipa_params.skip_ep_cfg = ecm_qc_get_skip_ep_config();
+			d->ipa_params.keep_ipa_awake = true;
 		}
 
 		if (d->func_type == USB_FUNC_RNDIS) {
@@ -644,6 +646,7 @@ static void bam2bam_data_connect_work(struct work_struct *w)
 			d->ipa_params.priv = rndis_qc_get_ipa_priv();
 			d->ipa_params.skip_ep_cfg =
 				rndis_qc_get_skip_ep_config();
+			d->ipa_params.keep_ipa_awake = true;
 		}
 
 		/* Support for UL using system-to-IPA */
diff --git a/include/linux/usb_bam.h b/include/linux/usb_bam.h
index 20e50e0f878e8e4e926f47cfe2c5ecd5b9d7b040..195f00aa72c2d6793f01231ea8255fa8bb814cc5 100644
--- a/include/linux/usb_bam.h
+++ b/include/linux/usb_bam.h
@@ -66,6 +66,7 @@ struct usb_bam_connect_ipa_params {
 	u8 dst_idx;
 	u32 *src_pipe;
 	u32 *dst_pipe;
+	bool keep_ipa_awake;
 	enum usb_bam_pipe_dir dir;
 	/* Parameters for Port Mapper */
 	u32 ipa_cons_ep_idx;