From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752793AbcD0JDy (ORCPT ); Wed, 27 Apr 2016 05:03:54 -0400 Received: from mail-am1on0112.outbound.protection.outlook.com ([157.56.112.112]:9366 "EHLO emea01-am1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751550AbcD0JDv (ORCPT ); Wed, 27 Apr 2016 05:03:51 -0400 X-Greylist: delayed 129293 seconds by postgrey-1.27 at vger.kernel.org; Wed, 27 Apr 2016 05:03:50 EDT Authentication-Results: alsa-project.org; dkim=none (message not signed) header.d=none;alsa-project.org; dmarc=none action=none header.from=axentia.se; From: Peter Rosin To: CC: Peter Rosin , Liam Girdwood , "Mark Brown" , Jaroslav Kysela , Takashi Iwai , Subject: [PATCH] ASoC: pcm: allow changing the playback/capture rates for symmetric links Date: Wed, 27 Apr 2016 10:49:19 +0200 Message-ID: <1461746959-11443-1-git-send-email-peda@axentia.se> X-Mailer: git-send-email 2.1.4 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [217.210.101.82] X-ClientProxiedBy: DB5PR03CA0066.eurprd03.prod.outlook.com (10.164.34.34) To VI1PR02MB1309.eurprd02.prod.outlook.com (10.165.231.151) X-MS-Office365-Filtering-Correlation-Id: 0c0f054c-6b6b-4ad0-a550-08d36e78d98c X-Microsoft-Exchange-Diagnostics: 1;VI1PR02MB1309;2:mdxqLvkCO+CgOGZj0I9VDdTFXTwyqMaZQVm4tdGcyf4tfGAabYCuUOkqZw0JtwMIkOgobGx1VmfyiUpRD+5WCINqjtjv9ZMWgXlovdJmVvC7o1pXVvdjy9r1+UXgN7eKAdFMVJ+nTYqU7hrOWi6q6MKnBOl3Z1Rkuh7HOuJPKt44155DvNw1r7ZAJObu0RAe;3:LW5GMOwwS8PYblGBuc0dhEFoEU3dmCwi+KZXN2QGCwHOl5TQmFBdm8qHUV79R1dDoljRnH4uneanpdvUXfE8pT3eMUdC5biSF01VVCv99lj7J51na/IgmEPVx+EkZ3Ot X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:VI1PR02MB1309; X-Microsoft-Exchange-Diagnostics: 1;VI1PR02MB1309;25:QnswLBGo+xbT9kOYVoG2zHX5nJ8N5ig27RvwwFpKUv+nGa55+BksulkcspGcu8oiR8YU2xJ9UhNjUaOOueLJIG2OCGlQTzMApo1Hf0jZY7eaY2xVqp2UydtOBeg1HISRpIZ9XJS+g72ytDUwoRrdVQ6Etqx58HpE+jEY5G0LkfYVJxexi1q/X10W6NL5nCBAxuXfxTkBm5uHCvzu/ZuPCrD54Z4pB/zDPCG2XPMlR6dh2OaneD6GmuyqyUtClXfIi0KOfrwJpBLLP/jTfVezWT6G4cOH4thzHeuaweX+n739KnZuoKj817FhTSJBn7miOjeFTI0ClFQ3mL8GrO2zknhZHCNJCmGYur9zIlBA0lYWa+qWBSdsSlHyu0BD6yoA5esiO6U/SBK1AX0Se9ucetHUhULhFMleiRSTVbhhcZMsqAsWAIOPHh8HMGh+jXoWax2w/DuGCGj2/8kFJlUaMUnu4wmGXN6bJi4i6mOjfKnOxREnAfhekIk3PC7P+5TDOgSeV7P8gPtQpDHINS4zPacrr2gVeLxAivbIIpXkpgJYYi7oLZbFCH5xFkoQVvDk+LhAKB8jO7InYOettaeC/6Z3iDTiZI9yD0v3nQ8OqFGTPGZbOZSYoVfOKN7KniNaGt0iMT+jJiWWYnVUCSknHA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(9101521072)(6040130)(601004)(2401047)(5005006)(8121501046)(10201501046)(3002001)(6041072)(6043046);SRVR:VI1PR02MB1309;BCL:0;PCL:0;RULEID:;SRVR:VI1PR02MB1309; X-Microsoft-Exchange-Diagnostics: 1;VI1PR02MB1309;4:/iDEKzGHUfhWVaZxOI7GuijGSBdetsXstL0OGFBvOrt+c04o2c8FLFLWg+TjjOa9MJ6WgpYems6Yi+mp6TmV19M3VpbuXE56o4bbQc4alqnMVpjpiCcEgDtrEhdcT8umuUAZZ4QX6yOffaRLqfReQqjGawqD22XEq9h+iWRFZOzD9yOfRPca6duUzaK9doWXr5KhDdO0Jdjsr2M06XaQIQA5hAbsCgcaRxRP7KjH/mjBEpJXfSqYZ6TCEvL1dfvADjZ7VDCaEAoB+7q3xh9eRTbqw2t8DxVup4HzTlK4qRtUJwFwL4EVPnRWjwbmQvhV8XCB98n6RX5hnj8Zyk+wc7FhJci8ZXRYQQKzCQod1trhlSZBAvU8muI0/czn0sPLljaD8v74su7KQBl4Mr6+BMFMFfMpWLkpAgMp3NqANhMi/+MTQP63Scw7ABvqjVLR/hTa5G0kEBulYKc4lhChwQ== X-Forefront-PRVS: 0925081676 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6069001)(6009001)(36756003)(5003940100001)(33646002)(5004730100002)(86362001)(189998001)(74482002)(2906002)(2351001)(4326007)(50986999)(92566002)(77096005)(81166005)(229853001)(66066001)(48376002)(5008740100001)(19580395003)(586003)(19580405001)(110136002)(3846002)(6116002)(1096002)(50466002)(42186005)(47776003)(50226002)(42262002);DIR:OUT;SFP:1102;SCL:1;SRVR:VI1PR02MB1309;H:localhost.localdomain;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;VI1PR02MB1309;23:jt7HXIh9WqCMgjakQNNnavCBKM5HlrpL08Kclq39cvqN7mdU6yGbumvynJ7UytlAfbG/n0xm927oodjePbfHqD2DkGbYD5zXnx4DObNMMzMrTPpH8Fv2W4goFjL74NdagtBdhlTDONa6gY5zD8G1bah8yd0iIc3lxxgtz/TpJ5LeuBidcUFVC6Df3YE58nRYM96m/ADXldu/1rUUeu/VsKn5eyNXHuu9x9EchQ7/q1LXPSTxdSbvq/6omywejLcvELaNg5Su15RZKWqAHmHOv1WvvcstHPHuAjkuODyvfpV5b5tfxYqMsIPi0YsmVQ5wWuWQcOa2N7LG8ZnfUgLvFWcvcmgDgcsbMZT4M2BrEJMeW7PXPABKSheBhl2ateremEJnGdesmTQn9ozxJ6Ma7XGsl3BoYVoar2u0MRmJfLzjg6bVI+sUgxCpSJJm3p420SAn9yIZEXMEDHFoqV3n+H0YyHv8kNNjtOrxLKSHDYtkW5EgEhAfJEZyOeIUdkhCEKMQ1+JOFOFXO/3wk7yUrSGSJb41l9mmmrvs1mbGcGJJFWz6+qMb7PuyjDpAq/EsCT7RTREH5H4MC5q5uzQWqbYXfZ4zR3rar+fZQYQ+E82bjABAbtWyhTdeNtOVo4bFFi1bE2sW5/ba4VF/BMqych9+eEgbl5s+SlPTqEeTMoB58D00aj4Usze0oq9RcVrmnZmREqCQQxBZdvQjhOEPkbshcSgLGgjrQSX/D0bhQAm7a9C1/NUdcmtoC7IayNrkQJDu3k4N1aBi7VXHVBpkizwgma+OJ766yc7pugRwZ16dD5JyfnDiCjumETsiSKdhq+Y8ifv1dhqU74oamgn6hw5wacZLFBMBY2H/+E9Cg3pXDZF8VD/DdsTtEyEWRcyvMJu2Xxn5rEhQJszMlAvVTA== X-Microsoft-Exchange-Diagnostics: 1;VI1PR02MB1309;5:AUuOWHrqenUa5aShf89Qx6envmBuRGrM9+7RQ3aTM/whczNba5n+WDvkePBOSJcHN0mdoItHQmBYoME6RT1Nb9UFU6ke/x/qR4MwW2ReUTHwvB8NbrizGActmuRdcU/RpuKIgukp2JmBccxBjYunFA==;24:oNO09zehgnrxv3/ovEa6QAiYymmMxvYv7VMIxQKLa1M2yQQeGQ+kkRa8OElzPdZ35vLTqjrH+H6aVL6dsKvoumH+KKJ1r9bdIEfBa836UyU=;7:CMBXYEisSfzN5fLikLY4JRUzpXiaQSetejMt5UvCMILHoUhTapAV5455p2qLERev78Wtg5Ev0miFlTjTMHlFCl5lJClHPGiPDJgsYBiT0URjl2ugJtUV10/zpmyEsvrdnwh2ODm8CowHgRajbfCs2alP3iJPC1LJUths7g5/rsos5Vt+MNnN9W09hWpF2lRA SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: axentia.se X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Apr 2016 08:49:30.1562 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR02MB1309 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The below program fails on a dai link with symmetric rates without this patch. The patch makes it work. #include #include #include #include #include int main(void) { int fd; int format; int channels; int speed; if ((fd = open("/dev/dsp", O_WRONLY, 0)) == -1) { perror("open"); return 1; } format = AFMT_S16_LE; if (ioctl(fd, SNDCTL_DSP_SETFMT, &format) == -1) { perror("SNDCTL_DSP_SETFMT"); return 1; } channels = 2; if (ioctl(fd, SNDCTL_DSP_CHANNELS, &channels) == -1) { perror("SNDCTL_DSP_CHANNELS"); return 1; } speed = 22050; if (ioctl(fd, SNDCTL_DSP_SPEED, &speed) == -1) { perror("SNDCTL_DSP_SPEED"); return 1; } return 0; } Signed-off-by: Peter Rosin --- sound/soc/soc-pcm.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c index 35fe58f4fa86..1e876ff23524 100644 --- a/sound/soc/soc-pcm.c +++ b/sound/soc/soc-pcm.c @@ -237,6 +237,14 @@ static int soc_pcm_params_symmetry(struct snd_pcm_substream *substream, struct snd_soc_dai *cpu_dai = rtd->cpu_dai; unsigned int rate, channels, sample_bits, symmetry, i; + if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { + if (!cpu_dai->capture_active) + return 0; + } else if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) { + if (!cpu_dai->playback_active) + return 0; + } + rate = params_rate(params); channels = params_channels(params); sample_bits = snd_pcm_format_physical_width(params_format(params)); -- 2.1.4