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

Commit ab06f341 authored by Shiv Maliyappanahalli's avatar Shiv Maliyappanahalli
Browse files

ASoC: msm: qdsp6v2: start voip configuration after prepare()



During consecutive voip calls, the cached configuration info
is used for the second and following calls. This is because
voip call is configured right after open() where all the
configuration parameters are not available yet. Fix by
starting the voip configuration only after prepare() call.

Change-Id: I358440b01b58c6322f0bc8c3f20f6d9e44eff783
Signed-off-by: default avatarShiv Maliyappanahalli <smaliyap@codeaurora.org>
parent 031e28bb
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -152,8 +152,8 @@ struct voip_drv_info {
	uint8_t capture_start;
	uint8_t playback_start;

	uint8_t playback_instance;
	uint8_t capture_instance;
	uint8_t playback_prepare;
	uint8_t capture_prepare;

	unsigned int play_samp_rate;
	unsigned int cap_samp_rate;
@@ -690,6 +690,7 @@ static int msm_pcm_playback_prepare(struct snd_pcm_substream *substream)
	prtd->pcm_count = snd_pcm_lib_period_bytes(substream);
	prtd->pcm_playback_irq_pos = 0;
	prtd->pcm_playback_buf_pos = 0;
	prtd->playback_prepare = 1;

	return 0;
}
@@ -705,6 +706,7 @@ static int msm_pcm_capture_prepare(struct snd_pcm_substream *substream)
	prtd->pcm_capture_count = snd_pcm_lib_period_bytes(substream);
	prtd->pcm_capture_irq_pos = 0;
	prtd->pcm_capture_buf_pos = 0;
	prtd->capture_prepare = 1;
	return ret;
}

@@ -764,10 +766,8 @@ static int msm_pcm_open(struct snd_pcm_substream *substream)

	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
		prtd->playback_substream = substream;
		prtd->playback_instance++;
	} else {
		prtd->capture_substream = substream;
		prtd->capture_instance++;
	}
	runtime->private_data = prtd;
err:
@@ -954,11 +954,11 @@ static int msm_pcm_close(struct snd_pcm_substream *substream)
	mutex_lock(&prtd->lock);

	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
		prtd->playback_instance--;
		prtd->playback_prepare = 0;
	else if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
		prtd->capture_instance--;
		prtd->capture_prepare = 0;

	if (!prtd->playback_instance && !prtd->capture_instance) {
	if (!prtd->playback_prepare && !prtd->capture_prepare) {
		if (prtd->state == VOIP_STARTED) {
			prtd->voip_reset = false;
			prtd->state = VOIP_STOPPED;
@@ -1181,7 +1181,7 @@ static int msm_pcm_prepare(struct snd_pcm_substream *substream)
	else if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
		ret = msm_pcm_capture_prepare(substream);

	if (prtd->playback_instance && prtd->capture_instance
	if (prtd->playback_prepare && prtd->capture_prepare
	    && (prtd->state != VOIP_STARTED)) {
		ret = voip_config_vocoder(substream);
		if (ret < 0) {