Unverified Commit 7a5aaba4 authored by Kuninori Morimoto's avatar Kuninori Morimoto Committed by Mark Brown
Browse files

ASoC: soc-pcm: add snd_soc_runtime_action()



ALSA SoC has snd_soc_runtime_activate() / snd_soc_runtime_deactivate().
These increment or decrement DAI/Component activity, but the code
difference is only +1 or -1.
This patch adds common snd_soc_runtime_action() which can get +1 or -1 as
parameter, and use it from snd_soc_runtime_activate/deactivate() to
avoid duplicate implementation.

Signed-off-by: default avatarKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Reviewed-by: default avatarRanjani Sridharan <ranjani.sridharan@linux.intel.com>
Link: https://lore.kernel.org/r/87blq7ceyq.wl-kuninori.morimoto.gx@renesas.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent fa1f875c
Loading
Loading
Loading
Loading
+26 −41
Original line number Diff line number Diff line
@@ -82,17 +82,8 @@ static int soc_rtd_trigger(struct snd_soc_pcm_runtime *rtd,
	return 0;
}

/**
 * snd_soc_runtime_activate() - Increment active count for PCM runtime components
 * @rtd: ASoC PCM runtime that is activated
 * @stream: Direction of the PCM stream
 *
 * Increments the active count for all the DAIs and components attached to a PCM
 * runtime. Should typically be called when a stream is opened.
 *
 * Must be called with the rtd->card->pcm_mutex being held
 */
void snd_soc_runtime_activate(struct snd_soc_pcm_runtime *rtd, int stream)
static void snd_soc_runtime_action(struct snd_soc_pcm_runtime *rtd,
				   int stream, int action)
{
	struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
	struct snd_soc_dai *codec_dai;
@@ -101,23 +92,38 @@ void snd_soc_runtime_activate(struct snd_soc_pcm_runtime *rtd, int stream)
	lockdep_assert_held(&rtd->card->pcm_mutex);

	if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
		cpu_dai->playback_active++;
		cpu_dai->playback_active += action;
		for_each_rtd_codec_dai(rtd, i, codec_dai)
			codec_dai->playback_active++;
			codec_dai->playback_active += action;
	} else {
		cpu_dai->capture_active++;
		cpu_dai->capture_active += action;
		for_each_rtd_codec_dai(rtd, i, codec_dai)
			codec_dai->capture_active++;
			codec_dai->capture_active += action;
	}

	cpu_dai->active++;
	cpu_dai->component->active++;
	cpu_dai->active += action;
	cpu_dai->component->active += action;
	for_each_rtd_codec_dai(rtd, i, codec_dai) {
		codec_dai->active++;
		codec_dai->component->active++;
		codec_dai->active += action;
		codec_dai->component->active += action;
	}
}

/**
 * snd_soc_runtime_activate() - Increment active count for PCM runtime components
 * @rtd: ASoC PCM runtime that is activated
 * @stream: Direction of the PCM stream
 *
 * Increments the active count for all the DAIs and components attached to a PCM
 * runtime. Should typically be called when a stream is opened.
 *
 * Must be called with the rtd->card->pcm_mutex being held
 */
void snd_soc_runtime_activate(struct snd_soc_pcm_runtime *rtd, int stream)
{
	snd_soc_runtime_action(rtd, stream, 1);
}

/**
 * snd_soc_runtime_deactivate() - Decrement active count for PCM runtime components
 * @rtd: ASoC PCM runtime that is deactivated
@@ -130,28 +136,7 @@ void snd_soc_runtime_activate(struct snd_soc_pcm_runtime *rtd, int stream)
 */
void snd_soc_runtime_deactivate(struct snd_soc_pcm_runtime *rtd, int stream)
{
	struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
	struct snd_soc_dai *codec_dai;
	int i;

	lockdep_assert_held(&rtd->card->pcm_mutex);

	if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
		cpu_dai->playback_active--;
		for_each_rtd_codec_dai(rtd, i, codec_dai)
			codec_dai->playback_active--;
	} else {
		cpu_dai->capture_active--;
		for_each_rtd_codec_dai(rtd, i, codec_dai)
			codec_dai->capture_active--;
	}

	cpu_dai->active--;
	cpu_dai->component->active--;
	for_each_rtd_codec_dai(rtd, i, codec_dai) {
		codec_dai->component->active--;
		codec_dai->active--;
	}
	snd_soc_runtime_action(rtd, stream, -1);
}

/**