Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp967943ybt; Wed, 17 Jun 2020 19:23:02 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzkFbW+NqpRmFZ0nj+ilPYSzpiFN5ELWYSRCJ73SYrH7KFILfvNVaZqNeLyo+cGPqo2pfND X-Received: by 2002:a05:6402:144e:: with SMTP id d14mr1984501edx.14.1592446982654; Wed, 17 Jun 2020 19:23:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592446982; cv=none; d=google.com; s=arc-20160816; b=YCIZ4dmTsLkVBwN4TGXjX7ejQ2/PvBQ8RJ8h/ATfLUTAlwj4evm7868cSWl8rRIZ41 PGYdAmSpu4ofiAIBR3RGVNIwlNRTrKyHaXi/i1epENm8Ts4wmvnJg6lqNPvjxkTJaBTt SpDIJGcgHxQd1PdLkdGxvv2vTQ50FfRyUPnkZ9u2KZhBj44GD/pitwnQNKYT+DkgTW4p KQR8p2r6yxksvlfH5+xqMYoUoDFcMxYeelYkImVnboR+ttIBxe8vwyEEiD41RQyZrOZs f2XtdjL6OZQ/rFKHmp/W/GWORmItg0ire7j9DxRGzWYbSoivuSO4l6qEKjF5KszOpH7c TG6w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=Q+DWD7FfHsKmvpyQgeOWT8VsrcTOtbwL4QrMab8ixCY=; b=BNIXPPAayhAoMz4gzDTCcMAjTIuAD891gPJIxRqfxQQyKGVQQ3uyvrR4vlDD034gL1 WRSm+7knRBRRmJm1hqQpjsbmRb1Dku8hULSVFPP62VujSDZ081fmY9SyBx0qz8bp5zYc JKQ+6RMQzIvrRONNZXw5GcefNt8yuSXYqKf8pqTsEMvV1QlzGKLNVarEVE4hWidlUfxy 1iUsqXiwhBniOGwE8rTZOtXjLwpYVGlbwEeef6J8wEZYRjdR5psqbcCc3CdyItOz2PYI 0a99aJJtA8uMDmTHPBhxQJyQaR0vXDV40r4TznJh9NLeo/Jpbdxq+sIz+EDZvRLQ/naL f1Gg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=o7iQ1flQ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id w18si1101777edq.44.2020.06.17.19.22.40; Wed, 17 Jun 2020 19:23:02 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=o7iQ1flQ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730035AbgFRBSx (ORCPT + 99 others); Wed, 17 Jun 2020 21:18:53 -0400 Received: from mail.kernel.org ([198.145.29.99]:46138 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728431AbgFRBPy (ORCPT ); Wed, 17 Jun 2020 21:15:54 -0400 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 1B3FA21D79; Thu, 18 Jun 2020 01:15:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1592442954; bh=hsh8OBWkdJYDP6rXNi6v/fdteZHhnTVpUh3LbNud6rw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=o7iQ1flQyJF5hbnCuCpopU7nMUFXrJA4W3FvD8nLrLKNMf3u3npudCymvZequaezp ij9R2VinBeYHjzdMuXosamEaY+nN4clB0JqKnyvmV0Pz+Sk5k0DV+KQ9p5u3s1mdaT ek+VwT1vRlA4QiRY7WROS8vZkXCHlA7bXR55F/+s= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Pierre-Louis Bossart , Bard Liao , Guennadi Liakhovetski , Ranjani Sridharan , Daniel Baluta , Mark Brown , Sasha Levin , alsa-devel@alsa-project.org Subject: [PATCH AUTOSEL 5.7 362/388] ASoC: soc-pcm: dpcm: fix playback/capture checks Date: Wed, 17 Jun 2020 21:07:39 -0400 Message-Id: <20200618010805.600873-362-sashal@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200618010805.600873-1-sashal@kernel.org> References: <20200618010805.600873-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Pierre-Louis Bossart [ Upstream commit b73287f0b0745961b14e5ebcce92cc8ed24d4d52 ] Recent changes in the ASoC core prevent multi-cpu BE dailinks from being used. DPCM does support multi-cpu DAIs for BE Dailinks, but not for FE. Handle the FE checks first, and make sure all DAIs support the same capabilities within the same dailink. Fixes: 9b5db059366ae2 ("ASoC: soc-pcm: dpcm: Only allow playback/capture if supported") Signed-off-by: Pierre-Louis Bossart Reviewed-by: Bard Liao Reviewed-by: Guennadi Liakhovetski Reviewed-by: Ranjani Sridharan Reviewed-by: Daniel Baluta BugLink: https://github.com/thesofproject/linux/issues/2031 Link: https://lore.kernel.org/r/20200608194415.4663-2-pierre-louis.bossart@linux.intel.com Signed-off-by: Mark Brown Signed-off-by: Sasha Levin --- sound/soc/soc-pcm.c | 44 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 34 insertions(+), 10 deletions(-) diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c index 1f302de44052..39ce61c5b874 100644 --- a/sound/soc/soc-pcm.c +++ b/sound/soc/soc-pcm.c @@ -2908,20 +2908,44 @@ int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num) struct snd_pcm *pcm; char new_name[64]; int ret = 0, playback = 0, capture = 0; + int stream; int i; + if (rtd->dai_link->dynamic && rtd->num_cpus > 1) { + dev_err(rtd->dev, + "DPCM doesn't support Multi CPU for Front-Ends yet\n"); + return -EINVAL; + } + if (rtd->dai_link->dynamic || rtd->dai_link->no_pcm) { - cpu_dai = asoc_rtd_to_cpu(rtd, 0); - if (rtd->num_cpus > 1) { - dev_err(rtd->dev, - "DPCM doesn't support Multi CPU yet\n"); - return -EINVAL; + if (rtd->dai_link->dpcm_playback) { + stream = SNDRV_PCM_STREAM_PLAYBACK; + + for_each_rtd_cpu_dais(rtd, i, cpu_dai) + if (!snd_soc_dai_stream_valid(cpu_dai, + stream)) { + dev_err(rtd->card->dev, + "CPU DAI %s for rtd %s does not support playback\n", + cpu_dai->name, + rtd->dai_link->stream_name); + return -EINVAL; + } + playback = 1; + } + if (rtd->dai_link->dpcm_capture) { + stream = SNDRV_PCM_STREAM_CAPTURE; + + for_each_rtd_cpu_dais(rtd, i, cpu_dai) + if (!snd_soc_dai_stream_valid(cpu_dai, + stream)) { + dev_err(rtd->card->dev, + "CPU DAI %s for rtd %s does not support capture\n", + cpu_dai->name, + rtd->dai_link->stream_name); + return -EINVAL; + } + capture = 1; } - - playback = rtd->dai_link->dpcm_playback && - snd_soc_dai_stream_valid(cpu_dai, SNDRV_PCM_STREAM_PLAYBACK); - capture = rtd->dai_link->dpcm_capture && - snd_soc_dai_stream_valid(cpu_dai, SNDRV_PCM_STREAM_CAPTURE); } else { /* Adapt stream for codec2codec links */ int cpu_capture = rtd->dai_link->params ? -- 2.25.1