From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753230AbdGGBbR (ORCPT ); Thu, 6 Jul 2017 21:31:17 -0400 Received: from mailout3.samsung.com ([203.254.224.33]:47514 "EHLO mailout3.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753165AbdGGBbP (ORCPT ); Thu, 6 Jul 2017 21:31:15 -0400 X-AuditID: b6c32a2d-f79866d0000012d5-54-595ee461a11d From: Jaechul Lee To: Krzysztof Kozlowski , Sangbeom Kim , Sylwester Nawrocki , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , alsa-devel Cc: Jaechul Lee , Jaechul Lee , linux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2] ASoC: samsung: i2s: Support more resolution rates Date: Fri, 07 Jul 2017 10:31:10 +0900 Message-id: <20170707013110.7060-1-jcsing.lee@samsung.com> X-Mailer: git-send-email 2.11.0 X-Brightmail-Tracker: H4sIAAAAAAAAAzVSa0hTYRjuO2c7m6PZaZp92E2OdDOcu+oxtKvVwhChAq1snfQ4td04Z0aF hS7QpXYnKE0yMlPDsk10ClnMZBWBaWaWXbBWkWmBrkn4o447+u953vd53huvGJUNCSPF+WYb zZgpI4FJBG3da9fEUr6DmYq20gXkQJ8HIa+M+DDS21iFkuOPKlCyt7dFRAYGHAj5qvM6Rl7t 7ULIM53nhWT3WJmQ7GvwI2TLVDPYNF/XMmnHdB1VH0Q6Z9MZTNc1Xo/pzrU2Ad391tcC3aRz ebpoH52UR1M5NBNFm7MtOflmQzKRulu/Va+NVyhjlYlkAhFlpkx0MpGyKz12e76Rm5SIOkoZ C7lQOsWyRNyGJMZSaKOj8iysLZnYr1Sq5EpFglylUsk16qz1Ki0nOUTn9d9xAquLOFY/XAaK QcPSchAihrgGXq15L+JxBHz58T5WDiRiGX4bwOq7bgFPJgGs8DcL5xxvJr7OJpoBdA71BO0y fApAzxfJDMbwGHi+rjJYKhx3IbD3XbtohqD4WQC97UPBUmH4NthcEghiAb4SXva7kBksxdfD 0c6PGN9uBews7RPOmCE+jcHA9F8uIebIMuh8jPKaFNgz0jOrD4Oj3tbZhSJhhaNKxHvLuOne /gE8cQDYNVA761DD5+Ulwc4oHgrPTvsQvoEUOkplvEQHvR11Aj68GX4+nclvnAWf2O3CC2BJ LZjXBCJoK2sy0KzWqpKzlIktNBvk2RaTEwS/KibWDfy1qR6AiwExX+pOOZgpE1JH2eMmD4Bi lAiXCru5kDSHOn6CZix6ptBIsx6g5U5zEY1clG3hftRs0ys1iQqNNl6tUCvJRGKxdHXjYIYM N1A2+ghNW2lmzoeIQyKLweWYH2UFEeGpB4pyC9iHlSer1/27YXty+NNgYMGEPZfcsmbj0yYE UAtf3BvGa3ZkPHC5fTcH9cjvU9FTaOJwGnOsqD20P3/vr7gNiyUbnzE7x4rGw65dwlf/dOy5 6K8K9fS7v1XWHVZ8+2qLbg1ge2yhq363ucqjLcu+30pbJKnIIgRsHqWMQRmW+g/RPOq2awMA AA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrNLMWRmVeSWpSXmKPExsVy+t9jQd2EJ3GRBi9/KFpcuXiIyWLqwyds FsdXzmK2eLu/m9ni/PkN7BbfrnQwWVzeNYfNYsb5fUwWnbv6WS0Ov2lntbi44guTxYbvaxkd eDw2fG5i89g56y67x6ZVnWwe+94uY/Po27KK0WP9lqssHp83yQWwR7nZZKQmpqQWKaTmJeen ZOal2yqFhrjpWigp5CXmptoqRej6hgQpKZQl5pQCeUYGaMDBOcA9WEnfLsEt49LyTYwFm5Uq lt1uZ2xgXCHTxcjJISFgInH901MWCFtM4sK99WxdjFwcQgKrGSU2L33KDuF8Z5Q4uXQ2G0gV m4CWRP+SHjBbRGAzk8T7fwEgRcwCvYwSX45cZAdJCAu4Sqxt/MYKYrMIqEpM/rKZCcTmFbCS eLXrHhvEOnmJXW0XWScwci9gZFjFyJVaUJybnltsVGC0iREY0NsOawXsYGw6F32IUYCDUYmH d4dLXKQQa2JZcWXuIUYJDmYlEV7Ww0Ah3pTEyqrUovz4otKc1OJDjKZAKycyS4km5wOjLa8k 3tDE0sjEwMzM0MjA2ExJnHdC4JcIIYH0xJLU7NTUgtQimD4mDk6pBsZV7S8MxMv5ZRu4BPxz 4j8st0z0/FhraxkuM3NX/0cH3eI7m1bKMn9Q3Lfr8B/NKUsX+K76/58h+VWXnsEOWXPxd0GW QeLq8yV+fez8/92Rkbn5WrWuA39H2/dDqVUaXn+zFjv4v/QTPbsgSdrszZa1L8/4fRQ4GMkj necuILFAcmlth6JyvRJLcUaioRZzUXEiAEOMtAN+AgAA X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20170707013112epcas5p43273c95afd43b18ded971bea081edd40 X-Msg-Generator: CA X-Sender-IP: 182.195.42.80 X-Local-Sender: =?UTF-8?B?7J207J6s7LKgG1RpemVuIFBsYXRmb3JtIExhYihTL1fshLw=?= =?UTF-8?B?7YSwKRvsgrzshLHsoITsnpAbU2VuaW9yIEVuZ2luZWVy?= X-Global-Sender: =?UTF-8?B?SmFlQ2h1bCBMZWUbVGl6ZW4gUGxhdGZvcm0gTGFiLhtTYW1z?= =?UTF-8?B?dW5nIEVsZWN0cm9uaWNzG1NlbmlvciBFbmdpbmVlcg==?= X-Sender-Code: =?UTF-8?B?QzEwG1RFTEUbQzEwVjgxMTE=?= CMS-TYPE: 105P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20170707013112epcas5p43273c95afd43b18ded971bea081edd40 X-RootMTR: 20170707013112epcas5p43273c95afd43b18ded971bea081edd40 References: Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This driver can support more frequencies over 96KHz. There are no reasons to limit the frequency range below 96KHz. If codecs/amps or something else can't support higher resolution rates, the constraints would be set rates properly because each drivers have its own limits. I added the 'pcm_rates' field to the dai_data to be set rates by the compatibilities. As a result, rates will be set each devices respectively. For example of exynos5433, rates will be set from 8KHz to 192KHz. Signed-off-by: Jaechul Lee --- v2: - changed the name of variable to pcm_rates. - removed duplicated code. - modified commit message. --- sound/soc/samsung/i2s.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/sound/soc/samsung/i2s.c b/sound/soc/samsung/i2s.c index af3ba4d4ccc5..c9f87f7bae99 100644 --- a/sound/soc/samsung/i2s.c +++ b/sound/soc/samsung/i2s.c @@ -50,6 +50,7 @@ struct samsung_i2s_variant_regs { struct samsung_i2s_dai_data { u32 quirks; + unsigned int pcm_rates; const struct samsung_i2s_variant_regs *i2s_variant_regs; }; @@ -1076,13 +1077,13 @@ static const struct snd_soc_component_driver samsung_i2s_component = { .name = "samsung-i2s", }; -#define SAMSUNG_I2S_RATES SNDRV_PCM_RATE_8000_96000 - #define SAMSUNG_I2S_FMTS (SNDRV_PCM_FMTBIT_S8 | \ SNDRV_PCM_FMTBIT_S16_LE | \ SNDRV_PCM_FMTBIT_S24_LE) -static struct i2s_dai *i2s_alloc_dai(struct platform_device *pdev, bool sec) +static struct i2s_dai *i2s_alloc_dai(struct platform_device *pdev, + const struct samsung_i2s_dai_data *i2s_dai_data, + bool sec) { struct i2s_dai *i2s; @@ -1101,13 +1102,13 @@ static struct i2s_dai *i2s_alloc_dai(struct platform_device *pdev, bool sec) i2s->i2s_dai_drv.resume = i2s_resume; i2s->i2s_dai_drv.playback.channels_min = 1; i2s->i2s_dai_drv.playback.channels_max = 2; - i2s->i2s_dai_drv.playback.rates = SAMSUNG_I2S_RATES; + i2s->i2s_dai_drv.playback.rates = i2s_dai_data->pcm_rates; i2s->i2s_dai_drv.playback.formats = SAMSUNG_I2S_FMTS; if (!sec) { i2s->i2s_dai_drv.capture.channels_min = 1; i2s->i2s_dai_drv.capture.channels_max = 2; - i2s->i2s_dai_drv.capture.rates = SAMSUNG_I2S_RATES; + i2s->i2s_dai_drv.capture.rates = i2s_dai_data->pcm_rates; i2s->i2s_dai_drv.capture.formats = SAMSUNG_I2S_FMTS; } return i2s; @@ -1242,7 +1243,7 @@ static int samsung_i2s_probe(struct platform_device *pdev) i2s_dai_data = (struct samsung_i2s_dai_data *) platform_get_device_id(pdev)->driver_data; - pri_dai = i2s_alloc_dai(pdev, false); + pri_dai = i2s_alloc_dai(pdev, i2s_dai_data, false); if (!pri_dai) { dev_err(&pdev->dev, "Unable to alloc I2S_pri\n"); return -ENOMEM; @@ -1316,7 +1317,7 @@ static int samsung_i2s_probe(struct platform_device *pdev) goto err_disable_clk; if (quirks & QUIRK_SEC_DAI) { - sec_dai = i2s_alloc_dai(pdev, true); + sec_dai = i2s_alloc_dai(pdev, i2s_dai_data, true); if (!sec_dai) { dev_err(&pdev->dev, "Unable to alloc I2S_sec\n"); ret = -ENOMEM; @@ -1452,29 +1453,34 @@ static const struct samsung_i2s_variant_regs i2sv5_i2s1_regs = { static const struct samsung_i2s_dai_data i2sv3_dai_type = { .quirks = QUIRK_NO_MUXPSR, + .pcm_rates = SNDRV_PCM_RATE_8000_96000, .i2s_variant_regs = &i2sv3_regs, }; static const struct samsung_i2s_dai_data i2sv5_dai_type = { .quirks = QUIRK_PRI_6CHAN | QUIRK_SEC_DAI | QUIRK_NEED_RSTCLR | QUIRK_SUPPORTS_IDMA, + .pcm_rates = SNDRV_PCM_RATE_8000_96000, .i2s_variant_regs = &i2sv3_regs, }; static const struct samsung_i2s_dai_data i2sv6_dai_type = { .quirks = QUIRK_PRI_6CHAN | QUIRK_SEC_DAI | QUIRK_NEED_RSTCLR | QUIRK_SUPPORTS_TDM | QUIRK_SUPPORTS_IDMA, + .pcm_rates = SNDRV_PCM_RATE_8000_96000, .i2s_variant_regs = &i2sv6_regs, }; static const struct samsung_i2s_dai_data i2sv7_dai_type = { .quirks = QUIRK_PRI_6CHAN | QUIRK_SEC_DAI | QUIRK_NEED_RSTCLR | QUIRK_SUPPORTS_TDM, + .pcm_rates = SNDRV_PCM_RATE_8000_192000, .i2s_variant_regs = &i2sv7_regs, }; static const struct samsung_i2s_dai_data i2sv5_dai_type_i2s1 = { .quirks = QUIRK_PRI_6CHAN | QUIRK_NEED_RSTCLR, + .pcm_rates = SNDRV_PCM_RATE_8000_96000, .i2s_variant_regs = &i2sv5_i2s1_regs, }; -- 2.11.0