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

Commit bff23c72 authored by Vinod Koul's avatar Vinod Koul Committed by Satish Babu Patakokila
Browse files

ASoC: compress: Fix compress device direction check



The detection of direction for compress was only taking
into account codec capabilities and not CPU ones.
Fix this by checking the CPU side capabilities as well.

Cc: <stable@vger.kernel.org>
Tested-by: default avatarAshish Panwar <ashish.panwar@intel.com>
Signed-off-by: default avatarVinod Koul <vinod.koul@intel.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
Git-commit: a1068045883ed4a18363a4ebad0c3d55e473b716
Git-repo: https://git.kernel.org/cgit/linux/kernel/git/stable


CRs-fixed: 1072067
Change-Id: I04a0c4e34a0e1120cc5c0f121df6127d103b22f4
Signed-off-by: default avatarSatish Babu Patakokila <sbpata@codeaurora.org>
Signed-off-by: default avatarSridhar Gujje <sgujje@codeaurora.org>
parent 64120cd2
Loading
Loading
Loading
Loading
+20 −3
Original line number Original line Diff line number Diff line
@@ -758,6 +758,7 @@ int soc_new_compress(struct snd_soc_pcm_runtime *rtd, int num)
	struct snd_pcm_substream *be_capture_substream;
	struct snd_pcm_substream *be_capture_substream;
	char new_name[64];
	char new_name[64];
	int ret = 0, direction = 0;
	int ret = 0, direction = 0;
	int playback = 0, capture = 0;


	if (rtd->num_codecs > 1) {
	if (rtd->num_codecs > 1) {
		dev_err(rtd->card->dev, "Multicodec not supported for compressed stream\n");
		dev_err(rtd->card->dev, "Multicodec not supported for compressed stream\n");
@@ -769,11 +770,27 @@ int soc_new_compress(struct snd_soc_pcm_runtime *rtd, int num)
			rtd->dai_link->stream_name, codec_dai->name, num);
			rtd->dai_link->stream_name, codec_dai->name, num);


	if (codec_dai->driver->playback.channels_min)
	if (codec_dai->driver->playback.channels_min)
		playback = 1;
	if (codec_dai->driver->capture.channels_min)
		capture = 1;

	capture = capture && cpu_dai->driver->capture.channels_min;
	playback = playback && cpu_dai->driver->playback.channels_min;

	/*
	 * Compress devices are unidirectional so only one of the directions
	 * should be set, check for that (xor)
	 */
	if (playback + capture != 1) {
		dev_err(rtd->card->dev, "Invalid direction for compress P %d, C %d\n",
				playback, capture);
		return -EINVAL;
	}

	if (playback)
		direction = SND_COMPRESS_PLAYBACK;
		direction = SND_COMPRESS_PLAYBACK;
	else if (codec_dai->driver->capture.channels_min)
		direction = SND_COMPRESS_CAPTURE;
	else
	else
		return -EINVAL;
		direction = SND_COMPRESS_CAPTURE;


	compr = kzalloc(sizeof(*compr), GFP_KERNEL);
	compr = kzalloc(sizeof(*compr), GFP_KERNEL);
	if (compr == NULL) {
	if (compr == NULL) {