Otherwise we may end up with shutting down I2S if shutdown() was called for capture substream, but playback is still running.
Signed-off-by: Vasily Khoruzhick anarsoul@gmail.com --- sound/soc/sunxi/sun4i-i2s.c | 6 ++++++ 1 file changed, 6 insertions(+)
diff --git a/sound/soc/sunxi/sun4i-i2s.c b/sound/soc/sunxi/sun4i-i2s.c index a9ea329dc046..787b67c4f845 100644 --- a/sound/soc/sunxi/sun4i-i2s.c +++ b/sound/soc/sunxi/sun4i-i2s.c @@ -649,6 +649,9 @@ static int sun4i_i2s_startup(struct snd_pcm_substream *substream, { struct sun4i_i2s *i2s = snd_soc_dai_get_drvdata(dai);
+ if (dai->active) + return 0; + /* Enable the whole hardware block */ regmap_update_bits(i2s->regmap, SUN4I_I2S_CTRL_REG, SUN4I_I2S_CTRL_GL_EN, SUN4I_I2S_CTRL_GL_EN); @@ -667,6 +670,9 @@ static void sun4i_i2s_shutdown(struct snd_pcm_substream *substream, { struct sun4i_i2s *i2s = snd_soc_dai_get_drvdata(dai);
+ if (dai->active) + return; + clk_disable_unprepare(i2s->mod_clk);
/* Disable our output lines */