From 18364b8461542a49e303f4eb30cd1c5e0f457022 Mon Sep 17 00:00:00 2001 From: Bar Weiner <bweiner@codeaurora.org> Date: Fri, 14 Mar 2014 12:38:39 +0200 Subject: [PATCH] usb: bam: add support for new ipa connect paramater Adding support for the IPA keep awake (power save override) feature. Per the IPA driver team's request - this parameter is set to false for RMNet and to true for MBIM, ECM and RNDIS. Change-Id: I66f4ef965fcfc0700b91f97eb18b287d7b64a369 Signed-off-by: Dov Levenglick <dovl@codeaurora.org> Signed-off-by: Bar Weiner <bweiner@codeaurora.org> --- drivers/platform/msm/usb_bam.c | 2 ++ drivers/usb/gadget/u_bam.c | 1 + drivers/usb/gadget/u_bam_data.c | 3 +++ include/linux/usb_bam.h | 1 + 4 files changed, 7 insertions(+) diff --git a/drivers/platform/msm/usb_bam.c b/drivers/platform/msm/usb_bam.c index a44fca5beac2..3b931e4a3b3e 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 b4f4363e5fc0..0d22fae07df2 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 a0d8b245ae6d..0a6ed70f53c0 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 20e50e0f878e..195f00aa72c2 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; -- GitLab