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

Commit 0a1c2531 authored by Varun Balaraj's avatar Varun Balaraj
Browse files

ASoC: msm: qdsp6v2: updating downmix/pan_scale control type to bytes



Change the downmix/pan_scale control data type from integer to bytes
to make it compatible across different archs.

Change-Id: I9282673dc1e124185d7c545206bba31966b803dc
Signed-off-by: default avatarVarun Balaraj <varunb@codeaurora.org>
parent 7200f000
Loading
Loading
Loading
Loading
+84 −60
Original line number Diff line number Diff line
@@ -1607,10 +1607,8 @@ done:
static int msm_pcm_playback_pan_scale_ctl_info(struct snd_kcontrol *kcontrol,
					struct snd_ctl_elem_info *uinfo)
{
	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
	uinfo->count = 128;
	uinfo->value.integer.min = 0;
	uinfo->value.integer.max = 0xFFFFFFFF;
	uinfo->type = SNDRV_CTL_ELEM_TYPE_BYTES;
	uinfo->count = sizeof(struct asm_stream_pan_ctrl_params);
	return 0;
}

@@ -1626,7 +1624,8 @@ static int msm_pcm_playback_pan_scale_ctl_put(struct snd_kcontrol *kcontrol,
	struct snd_pcm_substream *substream;
	struct msm_audio *prtd;
	struct asm_stream_pan_ctrl_params pan_param;

	char *usr_value = NULL;
	uint32_t *gain_ptr = NULL;
	if (!usr_info) {
		pr_err("%s: usr_info is null\n", __func__);
		ret = -EINVAL;
@@ -1662,46 +1661,61 @@ static int msm_pcm_playback_pan_scale_ctl_put(struct snd_kcontrol *kcontrol,
		ret = -EINVAL;
		goto done;
	}
	pan_param.num_output_channels =
			ucontrol->value.integer.value[len++];
	usr_value = (char *) ucontrol->value.bytes.data;
	if (!usr_value) {
		pr_err("%s ucontrol data is null\n", __func__);
		ret = -EINVAL;
		goto done;
	}
	memcpy(&pan_param.num_output_channels, &usr_value[len],
				sizeof(pan_param.num_output_channels));
	len += sizeof(pan_param.num_output_channels);
	if (pan_param.num_output_channels >
		PCM_FORMAT_MAX_NUM_CHANNEL) {
		ret = -EINVAL;
		goto done;
	}
	pan_param.num_input_channels =
			ucontrol->value.integer.value[len++];
	memcpy(&pan_param.num_input_channels, &usr_value[len],
				sizeof(pan_param.num_input_channels));
	len += sizeof(pan_param.num_input_channels);
	if (pan_param.num_input_channels >
		PCM_FORMAT_MAX_NUM_CHANNEL) {
		ret = -EINVAL;
		goto done;
	}

	if (ucontrol->value.integer.value[len++]) {
		for (i = 0; i < pan_param.num_output_channels; i++) {
			pan_param.output_channel_map[i] =
				ucontrol->value.integer.value[len++];
	if (usr_value[len++]) {
		memcpy(pan_param.output_channel_map, &usr_value[len],
			(pan_param.num_output_channels *
			sizeof(pan_param.output_channel_map[0])));
		len += (pan_param.num_output_channels *
			sizeof(pan_param.output_channel_map[0]));
	}
	if (usr_value[len++]) {
		memcpy(pan_param.input_channel_map, &usr_value[len],
			(pan_param.num_input_channels *
			sizeof(pan_param.input_channel_map[0])));
		len += (pan_param.num_input_channels *
			sizeof(pan_param.input_channel_map[0]));
	}
	if (ucontrol->value.integer.value[len++]) {
		for (i = 0; i < pan_param.num_input_channels; i++) {
			pan_param.input_channel_map[i] =
				ucontrol->value.integer.value[len++];
		}
	}
	if (ucontrol->value.integer.value[len++]) {
	if (usr_value[len++]) {
		gain_ptr = (uint32_t *) &usr_value[len];
		for (i = 0; i < pan_param.num_output_channels *
			pan_param.num_input_channels; i++) {
			pan_param.gain[i] =
				!(ucontrol->value.integer.value[len++] > 0) ?
				!(gain_ptr[i] > 0) ?
				0 : 2 << 13;
			len += sizeof(pan_param.gain[i]);
		}
		len += (pan_param.num_input_channels *
		pan_param.num_output_channels * sizeof(pan_param.gain[0]));
	}

	ret = q6asm_set_mfc_panning_params(prtd->audio_client,
					   &pan_param);
	len -= pan_param.num_output_channels *
	       pan_param.num_input_channels;
		pan_param.num_input_channels * sizeof(pan_param.gain[0]);
	if (gain_ptr) {
		for (i = 0; i < pan_param.num_output_channels *
			pan_param.num_input_channels; i++) {
			/*
@@ -1709,7 +1723,9 @@ static int msm_pcm_playback_pan_scale_ctl_put(struct snd_kcontrol *kcontrol,
			 * For volume gain is in Q28.
			 */
			pan_param.gain[i] =
				ucontrol->value.integer.value[len++] << 14;
				(gain_ptr[i]) << 14;
			len += sizeof(pan_param.gain[i]);
		}
	}
	ret = q6asm_set_vol_ctrl_gain_pair(prtd->audio_client,
					   &pan_param);
@@ -1794,10 +1810,8 @@ static int msm_pcm_playback_dnmix_ctl_get(struct snd_kcontrol *kcontrol,
static int msm_pcm_playback_dnmix_ctl_info(struct snd_kcontrol *kcontrol,
					struct snd_ctl_elem_info *uinfo)
{
	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
	uinfo->count = 128;
	uinfo->value.integer.min = 0;
	uinfo->value.integer.max = 0xFFFFFFFF;
	uinfo->type = SNDRV_CTL_ELEM_TYPE_BYTES;
	uinfo->count = sizeof(struct asm_stream_pan_ctrl_params);
	return 0;
}

@@ -1806,7 +1820,6 @@ static int msm_pcm_playback_dnmix_ctl_put(struct snd_kcontrol *kcontrol,
{
	int ret = 0;
	int len = 0;
	int i = 0;

	struct snd_soc_component *usr_info = snd_kcontrol_chip(kcontrol);
	struct snd_soc_platform *platform;
@@ -1814,8 +1827,8 @@ static int msm_pcm_playback_dnmix_ctl_put(struct snd_kcontrol *kcontrol,
	struct snd_pcm_substream *substream;
	struct msm_audio *prtd;
	struct asm_stream_pan_ctrl_params dnmix_param;

	int be_id = ucontrol->value.integer.value[len++];
	char *usr_value;
	int be_id = 0;
	int stream_id = 0;

	if (!usr_info) {
@@ -1851,40 +1864,51 @@ static int msm_pcm_playback_dnmix_ctl_put(struct snd_kcontrol *kcontrol,
		ret = -EINVAL;
		goto done;
	}
	usr_value = (char *) ucontrol->value.bytes.data;
	if (!usr_value) {
		pr_err("%s usrvalue is null\n", __func__);
		goto done;
	}
	memcpy(&be_id, usr_value, sizeof(be_id));
	len += sizeof(be_id);
	stream_id = prtd->audio_client->session;
	dnmix_param.num_output_channels =
				ucontrol->value.integer.value[len++];
	memcpy(&dnmix_param.num_output_channels, &usr_value[len],
				sizeof(dnmix_param.num_output_channels));
	len += sizeof(dnmix_param.num_output_channels);
	if (dnmix_param.num_output_channels >
		PCM_FORMAT_MAX_NUM_CHANNEL) {
		ret = -EINVAL;
		goto done;
	}
	dnmix_param.num_input_channels =
				ucontrol->value.integer.value[len++];
	memcpy(&dnmix_param.num_input_channels, &usr_value[len],
				sizeof(dnmix_param.num_input_channels));
	len += sizeof(dnmix_param.num_input_channels);
	if (dnmix_param.num_input_channels >
		PCM_FORMAT_MAX_NUM_CHANNEL) {
		ret = -EINVAL;
		goto done;
	}

	if (ucontrol->value.integer.value[len++]) {
		for (i = 0; i < dnmix_param.num_output_channels; i++) {
			dnmix_param.output_channel_map[i] =
				ucontrol->value.integer.value[len++];
		}
	}
	if (ucontrol->value.integer.value[len++]) {
		for (i = 0; i < dnmix_param.num_input_channels; i++) {
			dnmix_param.input_channel_map[i] =
				ucontrol->value.integer.value[len++];
		}
	}
	if (ucontrol->value.integer.value[len++]) {
		for (i = 0; i < dnmix_param.num_output_channels *
				dnmix_param.num_input_channels; i++) {
			dnmix_param.gain[i] =
					ucontrol->value.integer.value[len++];
		}
	if (usr_value[len++]) {
		memcpy(dnmix_param.output_channel_map, &usr_value[len],
			(dnmix_param.num_output_channels *
			sizeof(dnmix_param.output_channel_map[0])));
		len += (dnmix_param.num_output_channels *
				sizeof(dnmix_param.output_channel_map[0]));
	}
	if (usr_value[len++]) {
		memcpy(dnmix_param.input_channel_map, &usr_value[len],
			(dnmix_param.num_input_channels *
			sizeof(dnmix_param.input_channel_map[0])));
		len += (dnmix_param.num_input_channels *
				sizeof(dnmix_param.input_channel_map[0]));
	}
	if (usr_value[len++]) {
		memcpy(dnmix_param.gain, (uint32_t *) &usr_value[len],
			(dnmix_param.num_input_channels *
			dnmix_param.num_output_channels *
			sizeof(dnmix_param.gain[0])));
		len += (dnmix_param.num_input_channels *
		dnmix_param.num_output_channels * sizeof(dnmix_param.gain[0]));
	}
	msm_routing_set_downmix_control_data(be_id,
					     stream_id,