From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752543AbdGFA5Y (ORCPT ); Wed, 5 Jul 2017 20:57:24 -0400 Received: from mailout4.samsung.com ([203.254.224.34]:38502 "EHLO mailout4.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751914AbdGFA5W (ORCPT ); Wed, 5 Jul 2017 20:57:22 -0400 X-AuditID: b6c32a2e-f79746d00000129a-28-595d8aefd16e MIME-version: 1.0 Content-transfer-encoding: 8BIT Content-type: text/plain; charset="UTF-8" Message-id: <595D8AEF.2090908@samsung.com> Date: Thu, 06 Jul 2017 09:57:19 +0900 From: Chanwoo Choi Organization: Samsung Electronics User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.6.0 To: Jaechul Lee , Krzysztof Kozlowski , Sangbeom Kim , Sylwester Nawrocki , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , alsa-devel Cc: Jaechul Lee , linux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] ASoC: samsung: i2s: Supported high resolution rates In-reply-to: <20170705055832.4893-1-jcsing.lee@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrOJsWRmVeSWpSXmKPExsWy7bCmpu77rthIgz9rLSyuXDzEZDH14RM2 i+MrZzFbvN3fzWxx/vwGdotvVzqYLC7vmsNmMeP8PiaLzl39rBaH37SzWlxc8YXJYsP3tYwO PB4bPjexeeycdZfdY9OqTjaPfW+XsXn0bVnF6LF+y1UWj8+b5ALYo1JtMlITU1KLFFLzkvNT MvPSbZW8g+Od403NDAx1DS0tzJUU8hJzU22VXHwCdN0yc4AuVVIoS8wpBQoFJBYXK+nb2RTl l5akKmTkF5fYKkUbGhrpGRqY6xkZGemZGMdaGZkClSSkZrzrdyn4oFKxZfts9gbGl7JdjJwc EgImEgd2tjBB2GISF+6tZ+ti5OIQEljKKNE8vYUVwvnMKNE09SM7TMf8B7OYIBI7GCX2blrI DJLgFRCU+DH5HksXIwcHs4C8xJFL2SBhZgFNia2717ND1N9jlFj87RobRL2WxIy1exhBbBYB VYmHB1azgthsQPH9L26A1fALKEpc/fEYrEZUIEJi5/xvYINEBG4ySTzZ9pERYkO6xLG2jywg trCAh8SRf7vAmjkFrCWO/n/PAtIgIXCLXWLho0XMINdJCMhKbDrADPGNi0Tznd2sELawxKvj W6C+lJLo7pjFDtHbziixec49qEEdjBL3VzZCdRhLnOpqZIK4gk+i9/cTJogFvBIdbUIQJR4S 01t+QC1zlHh4ZSkjJCj6GCW6Xk5kn8CoMAsp9GYhQm8WUugtYGRexSiWWlCcm55abFpgrFec mFtcmpeul5yfu4kRnGi19HYw/lvgfYhRgINRiYf3wYeYSCHWxLLiytxDjBIczEoivFP1YiOF eFMSK6tSi/Lji0pzUosPMZoCA38is5Rocj4wC+SVxBuaWBqYmJoZGxgbWlgqifNqrLwWISSQ nliSmp2aWpBaBNPHxMEp1cDYV/71uYJQ5TLNgz8Vzxhns788Xlf6951k0XYuh7JksZPX9V5H zL33OzSrTnKuzzHbpevsOh89rMnzvrui0fCT2obD2/Y8OBG1pTfdnO/SvFOnSo3OmluLncoI mP937c/yN7myJhk76hns5y/3vXP84ZGLTTcD1qk2GFitPTRf+Gsc29MY99dCSizFGYmGWsxF xYkAsIIt3MoDAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrMIsWRmVeSWpSXmKPExsVy+t9jAd33XbGRBufnaltcuXiIyWLqwyds FsdXzmK2eLu/m9ni/PkN7BbfrnQwWVzeNYfNYsb5fUwWnbv6WS0Ov2lntbi44guTxYbvaxkd eDw2fG5i89g56y67x6ZVnWwe+94uY/Po27KK0WP9lqssHp83yQWwR7nZZKQmpqQWKaTmJeen ZOal2yqFhrjpWigp5CXmptoqRej6hgQpKZQl5pQCeUYGaMDBOcA9WEnfLsEt412/S8EHlYot 22ezNzC+lO1i5OSQEDCRmP9gFhOELSZx4d56ti5GLg4hgW2MEpO3fGADSfAKCEr8mHyPpYuR g4NZQF7iyKVskDCzgLrEpHmLmCHqHzBK7N7XywhRryUxY+0eMJtFQFXi4YHVrCA2G1B8/4sb YDP5BRQlrv54zAgyU1QgQqL7RCXIHBGB20wSix7ehtqVLjFnrjJIubCAh8SRf7ugbpvAKLHr zCZ2kASngLXE0f/vWSYwCs5CcuoshFNnITl1ASPzKkau1ILi3PTcYqMCo02MwAjddlgrYAdj 07noQ4wCHIxKPLwd72IihVgTy4orcw8xSnAwK4nwTtWLjRTiTUmsrEotyo8vKs1JLT7EaAr0 3URmKdHkfGDyyCuJNzSxNDIxMDMzNDIwNlMS550Q+CVCSCA9sSQ1OzW1ILUIpo+Jg1OqgVEh 5akkz62PiX8qZSXWLfkitCPx+D/TrQfmWETteZP1/HGBocO2Lc2XDyYvOX5GY6n1addlNyb9 4D/94s7HVH1Bc4O4MzoXJTjPiF1eeLj5NcvE2aGswol+GwMd/n0NCpFYs6Xk1OxPy8NTbnwq bVs+Uyfk1owVHlGnata+unvb0fHUhtTcR1mWSizFGYmGWsxFxYkA9Y78x+YCAAA= X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20170706005719epcas5p247d2f33f059ddf7cde58f94c169350f1 X-Msg-Generator: CA X-Sender-IP: 182.195.42.80 X-Local-Sender: =?UTF-8?B?7LWc7LCs7JqwG1RpemVuIFBsYXRmb3JtIExhYihTL1fshLw=?= =?UTF-8?B?7YSwKRvsgrzshLHsoITsnpAbU2VuaW9yIEVuZ2luZWVy?= X-Global-Sender: =?UTF-8?B?Q2hhbndvbyBDaG9pG1RpemVuIFBsYXRmb3JtIExhYi4bU2Ft?= =?UTF-8?B?c3VuZyBFbGVjdHJvbmljcxtTZW5pb3IgRW5naW5lZXI=?= X-Sender-Code: =?UTF-8?B?QzEwG1RFTEUbQzEwVjgxMTE=?= CMS-TYPE: 105P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20170705055835epcas5p32d60ee0f1acaf4e04c8a80d49bc2a730 X-RootMTR: 20170705055835epcas5p32d60ee0f1acaf4e04c8a80d49bc2a730 References: <20170705055832.4893-1-jcsing.lee@samsung.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Jaechul, On 2017년 07월 05일 14:58, Jaechul Lee wrote: > 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 high resolution rates, the constraints would be set rates > properly because each drivers have its own limits. > > Signed-off-by: Jaechul Lee > --- > sound/soc/samsung/i2s.c | 19 +++++++++++++++---- > 1 file changed, 15 insertions(+), 4 deletions(-) > > diff --git a/sound/soc/samsung/i2s.c b/sound/soc/samsung/i2s.c > index af3ba4d4ccc5..fc34af6a2c1e 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 rates; > const struct samsung_i2s_variant_regs *i2s_variant_regs; > }; > > @@ -1076,20 +1077,25 @@ 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) > { > + const struct samsung_i2s_dai_data *i2s_dai_data; > struct i2s_dai *i2s; > > i2s = devm_kzalloc(&pdev->dev, sizeof(struct i2s_dai), GFP_KERNEL); > if (i2s == NULL) > return NULL; > > + if (IS_ENABLED(CONFIG_OF) && pdev->dev.of_node) > + i2s_dai_data = of_device_get_match_data(&pdev->dev); > + else > + i2s_dai_data = (struct samsung_i2s_dai_data *) > + platform_get_device_id(pdev)->driver_data; > + The samsung_i2s_probe() already gets the 'i2s_dai_data' instance. It is not good to add the duplicate code in the i2s_alloc_dai(). You better to reuse the i2s_dai_data in samsung_i2s_probe() I think that you can choose the following two method. IMO, I prefer to use the 'method 1'. method 1. Redefine the 'i2s_alloc_dai' function as following: static struct i2s_dai *i2s_alloc_dai(struct platform_device *pdev, bool sec struct samsung_i2s_dai_data *i2s_dai_data) method 2. Add the 'i2s_dai_data' field to the 'struct i2s_dai'. @@ -98,6 +98,8 @@ struct i2s_dai { /* Below fields are only valid if this is the primary FIFO */ struct clk *clk_table[3]; struct clk_onecell_data clk_data; + + struct samsung_i2s_dai_data *i2s_dai_data; }; > i2s->pdev = pdev; > i2s->pri_dai = NULL; > i2s->sec_dai = NULL; > @@ -1101,13 +1107,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->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->rates; > i2s->i2s_dai_drv.capture.formats = SAMSUNG_I2S_FMTS; > } > return i2s; > @@ -1452,29 +1458,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, > + .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, > + .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, > + .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, > + .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, > + .rates = SNDRV_PCM_RATE_8000_96000, > .i2s_variant_regs = &i2sv5_i2s1_regs, > }; > > -- Best Regards, Chanwoo Choi Samsung Electronics