author | Song Zhao <song.zhao@amlogic.com> | 2019-06-04 05:08:59 (GMT) |
---|---|---|
committer | Song Zhao <song.zhao@amlogic.com> | 2019-06-04 05:08:59 (GMT) |
commit | 1dad21a0f46698bf233d9a614e774d65c52beb88 (patch) | |
tree | 6014b3a481b9ba130a374cc3234d46d55c2a8736 | |
parent | da7b08b7fa769449943552f5fcb7fd196b851ede (diff) | |
download | common-1dad21a0f46698bf233d9a614e774d65c52beb88.zip common-1dad21a0f46698bf233d9a614e774d65c52beb88.tar.gz common-1dad21a0f46698bf233d9a614e774d65c52beb88.tar.bz2 |
i2s_dai: fix kernel lock issue
OTT-4426
Should not call CLK API in trigger(), sleep is not allowed
Change-Id: Ie73ad557369164d93706a28c8f04217c3987314f
-rw-r--r-- | sound/soc/amlogic/meson/i2s_dai.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/sound/soc/amlogic/meson/i2s_dai.c b/sound/soc/amlogic/meson/i2s_dai.c index ad106b6..56180ec 100644 --- a/sound/soc/amlogic/meson/i2s_dai.c +++ b/sound/soc/amlogic/meson/i2s_dai.c @@ -281,9 +281,15 @@ static int aml_dai_i2s_prepare(struct snd_pcm_substream *substream, s->device_type = AML_AUDIO_I2SIN; } } else { + struct aml_i2s *i2s = snd_soc_dai_get_drvdata(dai); + int mclk_rate; + s->device_type = AML_AUDIO_I2SOUT; audio_out_i2s_enable(0); aml_hw_i2s_init(runtime); + + mclk_rate = DEFAULT_SAMPLERATE * DEFAULT_MCLK_RATIO_SR; + aml_i2s_set_amclk(i2s, mclk_rate); /* i2s/958 share the same audio hw buffer when PCM mode */ if (IEC958_mode_codec == 0) { aml_hw_iec958_init(substream, 1); @@ -302,18 +308,12 @@ static int aml_dai_i2s_prepare(struct snd_pcm_substream *substream, static int aml_dai_i2s_trigger(struct snd_pcm_substream *substream, int cmd, struct snd_soc_dai *dai) { - struct aml_i2s *i2s = snd_soc_dai_get_drvdata(dai); - switch (cmd) { case SNDRV_PCM_TRIGGER_START: case SNDRV_PCM_TRIGGER_RESUME: case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { - int mclk_rate; - pr_debug("I2S playback enable\n"); - mclk_rate = i2s->old_samplerate * DEFAULT_MCLK_RATIO_SR; - aml_i2s_set_amclk(i2s, mclk_rate); audio_out_i2s_enable(1); if (IEC958_mode_codec == 0) { pr_debug("IEC958 playback enable\n"); |