Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 779b11e4 authored by Chaithanya Krishna Bacharaju's avatar Chaithanya Krishna Bacharaju Committed by Gerrit - the friendly Code Review server
Browse files

asoc: 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: I819cdd2971195653a955b22597d35b0fe521ec51
Signed-off-by: default avatarChaithanya Krishna Bacharaju <chaithan@codeaurora.org>
parent 8c6a1841
Loading
Loading
Loading
Loading
+66 −2
Original line number Diff line number Diff line
@@ -17494,7 +17494,11 @@ static int msm_audio_get_copp_idx_from_port_id(int port_id, int session_type,
	}
	for_each_set_bit(i, &msm_bedais[be_idx].fe_sessions[0],
			 MSM_FRONTEND_DAI_MM_SIZE) {
			 MSM_FRONTEND_DAI_MAX) {
		if (!(is_mm_lsm_fe_id(i) &&
				route_check_fe_id_adm_support(i)))
			continue;
		for (idx = 0; idx < MAX_COPPS_PER_PORT; idx++) {
			copp = session_copp_map[i]
				[session_type][be_idx];
@@ -17506,7 +17510,7 @@ static int msm_audio_get_copp_idx_from_port_id(int port_id, int session_type,
		else
			break;
	}
	if (i >= MSM_FRONTEND_DAI_MM_SIZE) {
	if (i >= MSM_FRONTEND_DAI_MAX) {
		pr_debug("%s: Invalid FE, exiting\n", __func__);
		ret = -EINVAL;
@@ -17692,6 +17696,59 @@ static int msm_audio_source_tracking_get(struct snd_kcontrol *kcontrol,
	return ret;
}
static int msm_doa_tracking_mon_info(struct snd_kcontrol *kcontrol,
				    struct snd_ctl_elem_info *uinfo)
{
	uinfo->type = SNDRV_CTL_ELEM_TYPE_BYTES;
	uinfo->count = sizeof(struct doa_tracking_mon_param);
	return 0;
}
static int msm_doa_tracking_mon_get(struct snd_kcontrol *kcontrol,
					struct snd_ctl_elem_value *ucontrol)
{
	int ret = 0;
	struct doa_tracking_mon_param doa_tracking_data;
	int port_id, copp_idx;
	memset(&doa_tracking_data, 0, sizeof(struct doa_tracking_mon_param));
	ret = msm_audio_sound_focus_derive_port_id(kcontrol,
				"Doa Tracking Monitor Listen ", &port_id);
	if (ret) {
		pr_err("%s: Error in deriving port id, err=%d\n",
			  __func__, ret);
		ret = -EINVAL;
		goto done;
	}
	/*
	 * If copp id exists for given port id, query adm to get doa data.
	 * Else query afe for doa tracking params.
	 * This is to support in cases where LSM directly connects to
	 * AFE for FFNS.
	 */
	ret = msm_audio_get_copp_idx_from_port_id(port_id, SESSION_TYPE_TX,
					    &copp_idx);
	if (!ret)
		ret = adm_get_doa_tracking_mon(port_id, copp_idx,
					&doa_tracking_data);
	else
		ret = afe_get_doa_tracking_mon(port_id, &doa_tracking_data);
	if (ret) {
		pr_err("%s: Error getting Doa Tracking Params, err=%d\n",
			  __func__, ret);
		ret = -EINVAL;
		goto done;
	}
	memcpy(ucontrol->value.bytes.data, (void *)&doa_tracking_data,
		sizeof(struct doa_tracking_mon_param));
done:
	return ret;
}
static const struct snd_kcontrol_new msm_source_tracking_controls[] = {
	{
		.access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
@@ -17873,6 +17930,13 @@ static const struct snd_kcontrol_new msm_source_tracking_controls[] = {
		.info	= msm_source_tracking_info,
		.get	= msm_audio_source_tracking_get,
	},
	{
		.access = SNDRV_CTL_ELEM_ACCESS_READ,
		.iface	= SNDRV_CTL_ELEM_IFACE_MIXER,
		.name	= "Doa Tracking Monitor Listen VA_CDC_DMA_TX_0",
		.info	= msm_doa_tracking_mon_info,
		.get	= msm_doa_tracking_mon_get,
	},
};
static int spkr_prot_put_vi_lch_port(struct snd_kcontrol *kcontrol,