Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0121327c authored by Vinod Koul's avatar Vinod Koul Committed by Mark Brown
Browse files

ASoC: Intel: mfld-pcm: add control for powering up/down dsp



When we have PCM (FE/BE) opened or DAPM widgets triggered we need power
up/down DSP accordingly. The DSP will do ref count of these requests
i.e. link these runtime_get/put calls of DSP

Also fix some preexisting spacing error.

Signed-off-by: default avatarVinod Koul <vinod.koul@intel.com>
Signed-off-by: default avatarSubhransu S. Prusty <subhransu.s.prusty@intel.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 6df5d768
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -322,6 +322,16 @@ static int sst_platform_init_stream(struct snd_pcm_substream *substream)

}

static int power_up_sst(struct sst_runtime_stream *stream)
{
	return stream->ops->power(sst->dev, true);
}

static void power_down_sst(struct sst_runtime_stream *stream)
{
	stream->ops->power(sst->dev, false);
}

static int sst_media_open(struct snd_pcm_substream *substream,
		struct snd_soc_dai *dai)
{
@@ -351,6 +361,10 @@ static int sst_media_open(struct snd_pcm_substream *substream,
	/* allocate memory for SST API set */
	runtime->private_data = stream;

	ret_val = power_up_sst(stream);
	if (ret_val < 0)
		return ret_val;

	/* Make sure, that the period size is always even */
	snd_pcm_hw_constraint_step(substream->runtime, 0,
			   SNDRV_PCM_HW_PARAM_PERIODS, 2);
@@ -370,6 +384,8 @@ static void sst_media_close(struct snd_pcm_substream *substream,
	int ret_val = 0, str_id;

	stream = substream->runtime->private_data;
	power_down_sst(stream);

	str_id = stream->stream_info.str_id;
	if (str_id)
		ret_val = stream->ops->close(sst->dev, str_id);
+9 −8
Original line number Diff line number Diff line
@@ -129,6 +129,7 @@ struct sst_ops {
	int (*stream_read_tstamp)(struct device *dev, struct pcm_stream_info *str_info);
	int (*send_byte_stream)(struct device *dev, struct snd_sst_bytes_v2 *bytes);
	int (*close)(struct device *dev, unsigned int str_id);
	int (*power)(struct device *dev, bool state);
};

struct sst_runtime_stream {