dsp: add support to get Direction of Arrival target scores
Add support to get DOA tracking monitor data.
This is required to support SVA LED display feature with
FFECNS/FFNS enabled.
Change-Id: I7e39c2f3998fcc3f9ed0767c0090f862e1ba7539
Signed-off-by: Chaithanya Krishna Bacharaju <chaithan@codeaurora.org>
diff --git a/dsp/q6adm.c b/dsp/q6adm.c
index 4534c4c..c205601 100644
--- a/dsp/q6adm.c
+++ b/dsp/q6adm.c
@@ -4986,6 +4986,81 @@
}
EXPORT_SYMBOL(adm_get_source_tracking);
+/**
+ * adm_get_doa_tracking_mon -
+ * Retrieve doa tracking monitor info
+ *
+ * @port_id: Port ID number
+ * @copp_idx: copp index assigned
+ * @doa_tracking_data: pointer for doa data to be updated with
+ *
+ * Returns 0 on success or error on failure
+ */
+int adm_get_doa_tracking_mon(int port_id, int copp_idx,
+ struct doa_tracking_mon_param *doa_tracking_data)
+{
+ int ret = 0, i;
+ char *params_value;
+ uint32_t max_param_size = 0;
+ struct adm_param_doa_tracking_mon_t *doa_tracking_params = NULL;
+ struct param_hdr_v3 param_hdr;
+
+ pr_debug("%s: Enter, port_id %d, copp_idx %d\n",
+ __func__, port_id, copp_idx);
+
+ if (doa_tracking_data == NULL) {
+ pr_err("%s: Received NULL pointer for doa tracking data\n",
+ __func__);
+ return -EINVAL;
+ }
+
+ max_param_size = sizeof(struct adm_param_doa_tracking_mon_t) +
+ sizeof(union param_hdrs);
+ params_value = kzalloc(max_param_size, GFP_KERNEL);
+ if (!params_value)
+ return -ENOMEM;
+
+ memset(¶m_hdr, 0, sizeof(param_hdr));
+ param_hdr.module_id = AUDPROC_MODULE_ID_FFECNS;
+ param_hdr.instance_id = INSTANCE_ID_0;
+ param_hdr.param_id = AUDPROC_PARAM_ID_FFV_DOA_TRACKING_MONITOR;
+ param_hdr.param_size = max_param_size;
+ ret = adm_get_pp_params(port_id, copp_idx,
+ ADM_CLIENT_ID_DEFAULT, NULL, ¶m_hdr,
+ params_value);
+ if (ret) {
+ pr_err("%s: get parameters failed ret:%d\n", __func__, ret);
+ goto done;
+ }
+
+ doa_tracking_params =
+ (struct adm_param_doa_tracking_mon_t *)params_value;
+ for (i = 0; i < MAX_DOA_TRACKING_ANGLES; i++) {
+ doa_tracking_data->target_angle_L16[i] =
+ doa_tracking_params->target_angle_L16[i];
+ pr_debug("%s: target angle[%d] = %d\n",
+ __func__, i, doa_tracking_data->target_angle_L16[i]);
+ }
+
+ for (i = 0; i < MAX_DOA_TRACKING_ANGLES; i++) {
+ doa_tracking_data->interf_angle_L16[i] =
+ doa_tracking_params->interf_angle_L16[i];
+ pr_debug("%s: interference angle[%d] = %d\n",
+ __func__, i, doa_tracking_data->interf_angle_L16[i]);
+ }
+
+ for (i = 0; i < MAX_POLAR_ACTIVITY_INDICATORS; i++) {
+ doa_tracking_data->polar_activity[i] =
+ doa_tracking_params->polar_activity[i];
+ }
+
+done:
+ pr_debug("%s: Exit, ret = %d\n", __func__, ret);
+ kfree(params_value);
+ return ret;
+}
+EXPORT_SYMBOL(adm_get_doa_tracking_mon);
+
int __init adm_init(void)
{
int i = 0, j;