mirror of
https://github.com/torvalds/linux.git
synced 2024-12-28 22:02:28 +00:00
ASoC: amd: closing specific instance.
The steps to reproduce: Record from the internal mic : (arecord -D hw:1,2 -f dat /dev/null -V stereos) Record from the headphone mic: (arecord -D hw:1,0 -f dat /dev/null -V stereos) Kill the recording from internal mic. We can see the recording from the headphone mic is broken. This patch rectifies the issue reported. Signed-off-by: Ravulapati Vishnu vardhan rao <Vishnuvardhanrao.Ravulapati@amd.com> Link: https://lore.kernel.org/r/20200618072653.27103-1-Vishnuvardhanrao.Ravulapati@amd.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
dcb231e86a
commit
9f7041b71a
@ -342,11 +342,34 @@ static int acp3x_dma_close(struct snd_soc_component *component,
|
||||
{
|
||||
struct snd_soc_pcm_runtime *prtd;
|
||||
struct i2s_dev_data *adata;
|
||||
struct i2s_stream_instance *ins;
|
||||
|
||||
prtd = substream->private_data;
|
||||
component = snd_soc_rtdcom_lookup(prtd, DRV_NAME);
|
||||
adata = dev_get_drvdata(component->dev);
|
||||
ins = substream->runtime->private_data;
|
||||
if (!ins)
|
||||
return -EINVAL;
|
||||
|
||||
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
|
||||
switch (ins->i2s_instance) {
|
||||
case I2S_BT_INSTANCE:
|
||||
adata->play_stream = NULL;
|
||||
break;
|
||||
case I2S_SP_INSTANCE:
|
||||
default:
|
||||
adata->i2ssp_play_stream = NULL;
|
||||
}
|
||||
} else {
|
||||
switch (ins->i2s_instance) {
|
||||
case I2S_BT_INSTANCE:
|
||||
adata->capture_stream = NULL;
|
||||
break;
|
||||
case I2S_SP_INSTANCE:
|
||||
default:
|
||||
adata->i2ssp_capture_stream = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/* Disable ACP irq, when the current stream is being closed and
|
||||
* another stream is also not active.
|
||||
@ -354,13 +377,6 @@ static int acp3x_dma_close(struct snd_soc_component *component,
|
||||
if (!adata->play_stream && !adata->capture_stream &&
|
||||
!adata->i2ssp_play_stream && !adata->i2ssp_capture_stream)
|
||||
rv_writel(0, adata->acp3x_base + mmACP_EXTERNAL_INTR_ENB);
|
||||
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
|
||||
adata->play_stream = NULL;
|
||||
adata->i2ssp_play_stream = NULL;
|
||||
} else {
|
||||
adata->capture_stream = NULL;
|
||||
adata->i2ssp_capture_stream = NULL;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user