msm: audio: qdsp6v2: Send session ID in RTAC APR packet
This keeps track of the Session ID's used for voice and
sends them in the APR packet for SET & GET PARAMS
Signed-off-by: Ben Romberger <bromberg@codeaurora.org>
CRs-fixed: 308117
diff --git a/arch/arm/mach-msm/qdsp6v2/rtac.c b/arch/arm/mach-msm/qdsp6v2/rtac.c
index 4d0cc43..948c66e 100644
--- a/arch/arm/mach-msm/qdsp6v2/rtac.c
+++ b/arch/arm/mach-msm/qdsp6v2/rtac.c
@@ -36,7 +36,7 @@
bool rtac_make_asm_callback(u32 session_id, uint32_t *payload,
u32 payload_size) {return false; }
void rtac_add_voice(u32 cvs_handle, u32 cvp_handle, u32 rx_afe_port,
- u32 tx_afe_port) {}
+ u32 tx_afe_port, u32 session_id) {}
void rtac_remove_voice(u32 cvs_handle) {}
void rtac_set_voice_handle(u32 mode, void *handle) {}
bool rtac_make_voice_callback(u32 mode, uint32_t *payload,
@@ -113,7 +113,7 @@
static u32 rtac_voice_payload_size;
static u32 rtac_voice_user_buf_size;
static u8 *rtac_voice_buffer;
-
+static u32 voice_session_id[RTAC_MAX_ACTIVE_VOICE_COMBOS];
struct mutex rtac_adm_mutex;
@@ -263,7 +263,8 @@
/* Voice Info */
static void set_rtac_voice_data(int idx, u32 cvs_handle, u32 cvp_handle,
- u32 rx_afe_port, u32 tx_afe_port)
+ u32 rx_afe_port, u32 tx_afe_port,
+ u32 session_id)
{
rtac_voice_data.voice[idx].tx_topology_id = get_voice_tx_topology();
rtac_voice_data.voice[idx].rx_topology_id = get_voice_rx_topology();
@@ -272,10 +273,12 @@
rtac_voice_data.voice[idx].cvs_handle = cvs_handle;
rtac_voice_data.voice[idx].cvp_handle = cvp_handle;
+ /* Store session ID for voice RTAC */
+ voice_session_id[idx] = session_id;
}
void rtac_add_voice(u32 cvs_handle, u32 cvp_handle, u32 rx_afe_port,
- u32 tx_afe_port)
+ u32 tx_afe_port, u32 session_id)
{
u32 i = 0;
pr_debug("%s\n", __func__);
@@ -293,7 +296,8 @@
if (rtac_voice_data.voice[i].cvs_handle ==
cvs_handle) {
set_rtac_voice_data(i, cvs_handle, cvp_handle,
- rx_afe_port, tx_afe_port);
+ rx_afe_port, tx_afe_port,
+ session_id);
goto done;
}
}
@@ -302,7 +306,8 @@
/* Add device */
rtac_voice_data.num_of_voice_combos++;
set_rtac_voice_data(i, cvs_handle, cvp_handle,
- rx_afe_port, tx_afe_port);
+ rx_afe_port, tx_afe_port,
+ session_id);
done:
mutex_unlock(&rtac_voice_mutex);
return;
@@ -314,6 +319,7 @@
memcpy(&rtac_voice_data.voice[idx],
&rtac_voice_data.voice[idx + 1],
sizeof(rtac_voice_data.voice[idx]));
+ voice_session_id[idx] = voice_session_id[idx + 1];
}
}
@@ -332,6 +338,8 @@
rtac_voice_data.num_of_voice_combos], 0,
sizeof(rtac_voice_data.voice
[rtac_voice_data.num_of_voice_combos]));
+ voice_session_id[rtac_voice_data.num_of_voice_combos]
+ = 0;
break;
}
}
@@ -339,6 +347,19 @@
return;
}
+static int get_voice_index(u32 cvs_handle)
+{
+ u32 i;
+
+ for (i = 0; i < rtac_voice_data.num_of_voice_combos; i++) {
+ if (rtac_voice_data.voice[i].cvs_handle == cvs_handle)
+ return i;
+ }
+
+ pr_err("%s: No voice index for CVS handle %d found returning 0\n",
+ __func__, cvs_handle);
+ return 0;
+}
/* ADM APR */
@@ -799,7 +820,8 @@
payload_size);
voice_params.src_svc = 0;
voice_params.src_domain = APR_DOMAIN_APPS;
- voice_params.src_port = 0;
+ voice_params.src_port = voice_session_id[
+ get_voice_index(dest_port)];
voice_params.dest_svc = 0;
voice_params.dest_domain = APR_DOMAIN_MODEM;
voice_params.dest_port = dest_port;