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

Commit 0661cfb2 authored by Satish Babu Patakokila's avatar Satish Babu Patakokila
Browse files

ASoc: msm: qdsp6v2: Add TX app type support in compress driver



Add TX app type support in compress driver to support different
post processing modules per COPP in the TX path

CRs-fixed: 1072067
Change-Id: I8e84577b5aff5e932632c4612a88808615d764ae
Signed-off-by: default avatarSatish Babu Patakokila <sbpata@codeaurora.org>
parent 160813b8
Loading
Loading
Loading
Loading
+97 −13
Original line number Original line Diff line number Diff line
@@ -3179,7 +3179,7 @@ static int msm_compr_dec_params_get(struct snd_kcontrol *kcontrol,
	return 0;
	return 0;
}
}


static int msm_compr_app_type_cfg_put(struct snd_kcontrol *kcontrol,
static int msm_compr_playback_app_type_cfg_put(struct snd_kcontrol *kcontrol,
				      struct snd_ctl_elem_value *ucontrol)
				      struct snd_ctl_elem_value *ucontrol)
{
{
	u64 fe_id = kcontrol->private_value;
	u64 fe_id = kcontrol->private_value;
@@ -3206,7 +3206,7 @@ static int msm_compr_app_type_cfg_put(struct snd_kcontrol *kcontrol,
	return 0;
	return 0;
}
}


static int msm_compr_app_type_cfg_get(struct snd_kcontrol *kcontrol,
static int msm_compr_playback_app_type_cfg_get(struct snd_kcontrol *kcontrol,
				      struct snd_ctl_elem_value *ucontrol)
				      struct snd_ctl_elem_value *ucontrol)
{
{
	u64 fe_id = kcontrol->private_value;
	u64 fe_id = kcontrol->private_value;
@@ -3241,6 +3241,68 @@ done:
	return ret;
	return ret;
}
}


static int msm_compr_capture_app_type_cfg_put(struct snd_kcontrol *kcontrol,
					struct snd_ctl_elem_value *ucontrol)
{
	u64 fe_id = kcontrol->private_value;
	int app_type;
	int acdb_dev_id;
	int sample_rate = 48000;

	pr_debug("%s: fe_id- %llu\n", __func__, fe_id);
	if (fe_id >= MSM_FRONTEND_DAI_MAX) {
		pr_err("%s Received out of bounds fe_id %llu\n",
			__func__, fe_id);
		return -EINVAL;
	}

	app_type = ucontrol->value.integer.value[0];
	acdb_dev_id = ucontrol->value.integer.value[1];
	if (ucontrol->value.integer.value[2] != 0)
		sample_rate = ucontrol->value.integer.value[2];
	pr_debug("%s: app_type- %d acdb_dev_id- %d sample_rate- %d session_type- %d\n",
		__func__, app_type, acdb_dev_id, sample_rate, SESSION_TYPE_TX);
	msm_pcm_routing_reg_stream_app_type_cfg(fe_id, app_type,
		acdb_dev_id, sample_rate, SESSION_TYPE_TX);

	return 0;
}

static int msm_compr_capture_app_type_cfg_get(struct snd_kcontrol *kcontrol,
					struct snd_ctl_elem_value *ucontrol)
{
	u64 fe_id = kcontrol->private_value;
	int ret = 0;
	int app_type;
	int acdb_dev_id;
	int sample_rate;

	pr_debug("%s: fe_id- %llu\n", __func__, fe_id);
	if (fe_id >= MSM_FRONTEND_DAI_MAX) {
		pr_err("%s Received out of bounds fe_id %llu\n",
			__func__, fe_id);
		ret = -EINVAL;
		goto done;
	}

	ret = msm_pcm_routing_get_stream_app_type_cfg(fe_id, SESSION_TYPE_TX,
		&app_type, &acdb_dev_id, &sample_rate);
	if (ret < 0) {
		pr_err("%s: msm_pcm_routing_get_stream_app_type_cfg failed returned %d\n",
			__func__, ret);
		goto done;
	}

	ucontrol->value.integer.value[0] = app_type;
	ucontrol->value.integer.value[1] = acdb_dev_id;
	ucontrol->value.integer.value[2] = sample_rate;
	pr_debug("%s: fedai_id %llu, session_type %d, app_type %d, acdb_dev_id %d, sample_rate %d\n",
		__func__, fe_id, SESSION_TYPE_TX,
		app_type, acdb_dev_id, sample_rate);
done:
	return ret;
}

static int msm_compr_channel_map_put(struct snd_kcontrol *kcontrol,
static int msm_compr_channel_map_put(struct snd_kcontrol *kcontrol,
				     struct snd_ctl_elem_value *ucontrol)
				     struct snd_ctl_elem_value *ucontrol)
{
{
@@ -3628,7 +3690,8 @@ static int msm_compr_add_dec_runtime_params_control(


static int msm_compr_add_app_type_cfg_control(struct snd_soc_pcm_runtime *rtd)
static int msm_compr_add_app_type_cfg_control(struct snd_soc_pcm_runtime *rtd)
{
{
	const char *mixer_ctl_name	= "Audio Stream";
	const char *playback_mixer_ctl_name	= "Audio Stream";
	const char *capture_mixer_ctl_name	= "Audio Stream Capture";
	const char *deviceNo		= "NN";
	const char *deviceNo		= "NN";
	const char *suffix		= "App Type Cfg";
	const char *suffix		= "App Type Cfg";
	char *mixer_str = NULL;
	char *mixer_str = NULL;
@@ -3639,8 +3702,8 @@ static int msm_compr_add_app_type_cfg_control(struct snd_soc_pcm_runtime *rtd)
		.name = "?",
		.name = "?",
		.access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
		.access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
		.info = msm_compr_app_type_cfg_info,
		.info = msm_compr_app_type_cfg_info,
		.put = msm_compr_app_type_cfg_put,
		.put = msm_compr_playback_app_type_cfg_put,
		.get = msm_compr_app_type_cfg_get,
		.get = msm_compr_playback_app_type_cfg_get,
		.private_value = 0,
		.private_value = 0,
		}
		}
	};
	};
@@ -3653,9 +3716,13 @@ static int msm_compr_add_app_type_cfg_control(struct snd_soc_pcm_runtime *rtd)
	pr_debug("%s: added new compr FE ctl with name %s, id %d, cpu dai %s, device no %d\n",
	pr_debug("%s: added new compr FE ctl with name %s, id %d, cpu dai %s, device no %d\n",
		__func__, rtd->dai_link->name, rtd->dai_link->be_id,
		__func__, rtd->dai_link->name, rtd->dai_link->be_id,
			rtd->dai_link->cpu_dai_name, rtd->pcm->device);
			rtd->dai_link->cpu_dai_name, rtd->pcm->device);
	if (rtd->compr->direction == SND_COMPRESS_PLAYBACK)
		ctl_len = strlen(playback_mixer_ctl_name) + 1 + strlen(deviceNo)
			 + 1 + strlen(suffix) + 1;
	else
		ctl_len = strlen(capture_mixer_ctl_name) + 1 + strlen(deviceNo)
			+ 1 + strlen(suffix) + 1;


	ctl_len = strlen(mixer_ctl_name) + 1 + strlen(deviceNo) + 1 +
		  strlen(suffix) + 1;
	mixer_str = kzalloc(ctl_len, GFP_KERNEL);
	mixer_str = kzalloc(ctl_len, GFP_KERNEL);


	if (!mixer_str) {
	if (!mixer_str) {
@@ -3663,10 +3730,27 @@ static int msm_compr_add_app_type_cfg_control(struct snd_soc_pcm_runtime *rtd)
		return 0;
		return 0;
	}
	}


	snprintf(mixer_str, ctl_len, "%s %d %s", mixer_ctl_name,
	if (rtd->compr->direction == SND_COMPRESS_PLAYBACK)
		 rtd->pcm->device, suffix);
		snprintf(mixer_str, ctl_len, "%s %d %s",
			 playback_mixer_ctl_name, rtd->pcm->device, suffix);
	else
		snprintf(mixer_str, ctl_len, "%s %d %s",
			 capture_mixer_ctl_name, rtd->pcm->device, suffix);

	fe_app_type_cfg_control[0].name = mixer_str;
	fe_app_type_cfg_control[0].name = mixer_str;
	fe_app_type_cfg_control[0].private_value = rtd->dai_link->be_id;
	fe_app_type_cfg_control[0].private_value = rtd->dai_link->be_id;

	if (rtd->compr->direction == SND_COMPRESS_PLAYBACK) {
		fe_app_type_cfg_control[0].put =
					 msm_compr_playback_app_type_cfg_put;
		fe_app_type_cfg_control[0].get =
					 msm_compr_playback_app_type_cfg_get;
	} else {
		fe_app_type_cfg_control[0].put =
					 msm_compr_capture_app_type_cfg_put;
		fe_app_type_cfg_control[0].get =
					 msm_compr_capture_app_type_cfg_get;
	}
	pr_debug("Registering new mixer ctl %s", mixer_str);
	pr_debug("Registering new mixer ctl %s", mixer_str);
	snd_soc_add_platform_controls(rtd->platform,
	snd_soc_add_platform_controls(rtd->platform,
				fe_app_type_cfg_control,
				fe_app_type_cfg_control,