summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sound/soc/tegra/tegra_pcm_rpc.c11
-rw-r--r--sound/soc/tegra/tegra_transport.c16
-rw-r--r--sound/soc/tegra/tegra_transport.h5
3 files changed, 26 insertions, 6 deletions
diff --git a/sound/soc/tegra/tegra_pcm_rpc.c b/sound/soc/tegra/tegra_pcm_rpc.c
index fd1c8cb55ee3..f6cd0861a698 100644
--- a/sound/soc/tegra/tegra_pcm_rpc.c
+++ b/sound/soc/tegra/tegra_pcm_rpc.c
@@ -540,10 +540,11 @@ static int tegra_pcm_open(struct snd_pcm_substream *substream)
sema_init(&prtd->buf_done_sem, 0);
sema_init(&prtd->stop_done_sem, 0);
- if (pcm->device == I2S2)
- hSource = ptscx->mi2s2;
-
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK){
+ hSource = ptscx->i2s1_play_mix;
+ if (pcm->device == I2S2)
+ hSource = ptscx->i2s2_play_mix;
+
prtd->mixer_buffer = ptscx->mixer_buffer[0];
prtd->stdoutpath = (StandardPath*)kzalloc(sizeof(StandardPath),
GFP_KERNEL);
@@ -594,6 +595,10 @@ static int tegra_pcm_open(struct snd_pcm_substream *substream)
goto fail;
}
} else {
+ hSource = ptscx->i2s1_rec_split;
+ if (pcm->device == I2S2)
+ hSource = ptscx->i2s2_rec_split;
+
prtd->mixer_buffer = ptscx->mixer_buffer[1];
prtd->stdinpath = (StandardPath*)kzalloc(sizeof(StandardPath),
GFP_KERNEL);
diff --git a/sound/soc/tegra/tegra_transport.c b/sound/soc/tegra/tegra_transport.c
index cdf2de2cc3f1..038309ac27ef 100644
--- a/sound/soc/tegra/tegra_transport.c
+++ b/sound/soc/tegra/tegra_transport.c
@@ -550,9 +550,21 @@ int tegra_audiofx_init(struct tegra_audio_data* tegra_snd_cx)
NvAudioFxI2s1Id);
tegra_snd_cx->mi2s1_device_available = NvAudioFxIoDevice_Default;
- tegra_snd_cx->mi2s2 = tegra_snd_cx->xrt_fxn.MixerCreateObject(
+ tegra_snd_cx->i2s1_play_mix = tegra_snd_cx->xrt_fxn.MixerCreateObject(
tegra_snd_cx->mixer_handle,
- NvAudioFxI2s2Id);
+ NvAudioFxI2s1PlaybackMixId);
+
+ tegra_snd_cx->i2s2_play_mix = tegra_snd_cx->xrt_fxn.MixerCreateObject(
+ tegra_snd_cx->mixer_handle,
+ NvAudioFxI2s2PlaybackMixId);
+
+ tegra_snd_cx->i2s1_rec_split = tegra_snd_cx->xrt_fxn.MixerCreateObject(
+ tegra_snd_cx->mixer_handle,
+ NvAudioFxI2s1RecordSplitId);
+
+ tegra_snd_cx->i2s2_rec_split = tegra_snd_cx->xrt_fxn.MixerCreateObject(
+ tegra_snd_cx->mixer_handle,
+ NvAudioFxI2s2RecordSplitId);
memset(&message, 0, sizeof(NvAudioFxMessage));
message.Event = NvAudioFxEventControlChange;
diff --git a/sound/soc/tegra/tegra_transport.h b/sound/soc/tegra/tegra_transport.h
index 49eee47b1373..7863efbee64d 100644
--- a/sound/soc/tegra/tegra_transport.h
+++ b/sound/soc/tegra/tegra_transport.h
@@ -415,7 +415,10 @@ struct tegra_audio_data {
NvRmMemHandle mem_handle[2];
NvAudioFxObjectHandle mvolume;
NvAudioFxObjectHandle mi2s1;
- NvAudioFxObjectHandle mi2s2;
+ NvAudioFxObjectHandle i2s1_play_mix;
+ NvAudioFxObjectHandle i2s2_play_mix;
+ NvAudioFxObjectHandle i2s1_rec_split;
+ NvAudioFxObjectHandle i2s2_rec_split;
NvAudioFxObjectHandle mroute;
NvAudioFxIoDevice mi2s1_device_available;
NvAudioFxIoDevice mspdif_device_available;