ASoC: dapm: Add support for hw_free on CODEC to CODEC links
authorCharles Keepax <ckeepax@opensource.cirrus.com>
Thu, 11 Oct 2018 16:28:28 +0000 (17:28 +0100)
committerMark Brown <broonie@kernel.org>
Fri, 19 Oct 2018 12:08:27 +0000 (13:08 +0100)
Currently, on power down for a CODEC to CODEC DAI link we only call
digital_mute and shutdown. Provide a little more flexibility for drivers
by adding a call to hw_free as well.

Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/soc-dapm.c

index 8c5b065c8880620330f39883fc59a33cb031f513..a5178845065b3586bc1bde669c03580574f1bcb7 100644 (file)
@@ -3737,25 +3737,30 @@ static int snd_soc_dai_link_event(struct snd_soc_dapm_widget *w,
                        ret = 0;
                }
 
+               substream.stream = SNDRV_PCM_STREAM_CAPTURE;
                snd_soc_dapm_widget_for_each_source_path(w, path) {
                        source = path->source->priv;
 
+                       if (source->driver->ops->hw_free)
+                               source->driver->ops->hw_free(&substream,
+                                                            source);
+
                        source->active--;
-                       if (source->driver->ops->shutdown) {
-                               substream.stream = SNDRV_PCM_STREAM_CAPTURE;
+                       if (source->driver->ops->shutdown)
                                source->driver->ops->shutdown(&substream,
                                                              source);
-                       }
                }
 
+               substream.stream = SNDRV_PCM_STREAM_PLAYBACK;
                snd_soc_dapm_widget_for_each_sink_path(w, path) {
                        sink = path->sink->priv;
 
+                       if (sink->driver->ops->hw_free)
+                               sink->driver->ops->hw_free(&substream, sink);
+
                        sink->active--;
-                       if (sink->driver->ops->shutdown) {
-                               substream.stream = SNDRV_PCM_STREAM_PLAYBACK;
+                       if (sink->driver->ops->shutdown)
                                sink->driver->ops->shutdown(&substream, sink);
-                       }
                }
                break;