Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1161143AbdDUNHz (ORCPT ); Fri, 21 Apr 2017 09:07:55 -0400 Received: from mail-co1nam03on0063.outbound.protection.outlook.com ([104.47.40.63]:18816 "EHLO NAM03-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1039668AbdDUNHs (ORCPT ); Fri, 21 Apr 2017 09:07:48 -0400 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=nxp.com; nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=fail action=none header.from=nxp.com; From: Daniel Baluta To: , , , , CC: , , , Daniel Baluta Subject: [PATCH 2/2] ASoC: codec: wm8960: Relax bit clock computation when using PLL Date: Fri, 21 Apr 2017 16:07:35 +0300 Message-ID: <1492780055-4892-3-git-send-email-daniel.baluta@nxp.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1492780055-4892-1-git-send-email-daniel.baluta@nxp.com> References: <1492780055-4892-1-git-send-email-daniel.baluta@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131372536658988667;(91ab9b29-cfa4-454e-5278-08d120cd25b8);() X-Forefront-Antispam-Report: CIP:192.88.168.50;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(336005)(39850400002)(39410400002)(39400400002)(39450400003)(39840400002)(39860400002)(39380400002)(2980300002)(1109001)(1110001)(339900001)(189002)(199003)(9170700003)(305945005)(2950100002)(6666003)(81166006)(105606002)(189998001)(38730400002)(106466001)(50226002)(2906002)(8936002)(8676002)(50986999)(76176999)(48376002)(53936002)(33646002)(4326008)(47776003)(5003940100001)(36756003)(85426001)(54906002)(77096006)(86362001)(575784001)(104016004)(356003)(50466002)(5660300001)(2201001)(39060400002)(8656002);DIR:OUT;SFP:1101;SCL:1;SRVR:DM2PR0301MB0608;H:tx30smr01.am.freescale.net;FPR:;SPF:Fail;MLV:ovrnspm;MX:1;A:1;PTR:InfoDomainNonexistent;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BN1AFFO11FD039;1:VPTsqN7Y2v7yOEIHv1C/erWaDVf3KaA9IJqMT9bJdX7hvXslrmfW4ztOpY7WUL3VRVO7WU66SCDoQ2CmGPynQO7yeFynKnv0VptNmD/JAXZVbA3Wp8pESYh449LAVtBmlb5I/GSiWDzh+966PFP+iKNy4yO/JRJRclnz+f19SVUNce1B+bmOQoLvO7JtL1rHPQOvNYYpKAKh/mwqn9l1kcOgzxRWs8sm2SdUlsnDJDegTTyxApY7ePo3/5egBkBeqQxP0AGlPOGIG0W5O8LppPZmjwJiSV2F+oLGICSHlZeujuza7IC+TslAAcOcXRrY0G6IsJcrRY+LyPO32KJgvBv5UWB5fFZg6dXM6Db/2ag8r69BYGuP0g/H64PgPGkq9obb/jmn4iaTJdR6cjiH0Cs6HsvQzNm05uY3H2H82zKFE/zTlma7CAOMiFELvmoEcxXU/r6GaKK9oVOdnIQye7DedQZDF2KSuHbbHeUnr6Qu6huPQVrFGtcjDsW0qDqv98GvEXylWOpo4ik+Ib6tr/L4KK8cpL2c0DjhwGB5sqRV+eJS3neIBiIdUbTYk3p7oKacCSfWr+TSqA/agEdZtrMaLD8wDZk178nV2tK1+Frj/xfgxgo8frOczNXJxfhPXmOJW1zpxaUVfp1ziPLY+zaQ2v4WzaoMgqbn3ktQEKTvZHt+ol87qNdWXLL04cKjAayjsAlWypYoX9llqCLdDJPWs80p3aMStEkhZb/lAhU= MIME-Version: 1.0 Content-Type: text/plain X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e0cf1fc7-cd07-4408-ad19-08d488b76741 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131430075)(201703131517081);SRVR:DM2PR0301MB0608; X-Microsoft-Exchange-Diagnostics: 1;DM2PR0301MB0608;3:9iHM+8wB6egWqTQwImCYpbOuG4vop91aGExNE4Rwn9d6v4LfXovmC1t/ZwqLdcHpTYFYLruEqwiyRFG/ErYrPqhTEsj5hPMAQ0v+iubYJPTSBReRmMIOgmRu9rRC2c8pLHYe5hKvpcKJnNMg+nAVHFYopxs4WaHyKszrwfGwAnbqE2m4j26TCRW8OrFifDwRlh08uHjcxafKoEf2lYJqhOzfQV8su0ZWkUr2rch6awpP3bPnQbTIDxsuVSjhJn8E+Ou+5YuqN6N42NIsI69GaE2OEUuuaoMdiPLqh/QhyzSpULb+0jXK3GBarMnjkc/nza2xNb0SFFwYVlepIzHtQ7qO/HDo/eiRxazfibwM2/sKmglWSIeHWOZnPDN2G7AZYQMbg3yBvSrhuOBHXKFrs/QnmDkDdUht5NJ4OXmCwIEixVY/Zew/k3R4PiypQ02N;25:abFsdKmykplQJWIVnEZnN3T+EkVr8db/9MZ0eBedwOq+DAM+ucxRx2A2wRrlTD+tQHaxGXd8jd1WWyh9zbKZluh/p1fjD6PPpFT0bDNCmV67QTOj/qiQCBtHIOiNMRQ7hlnei51rCOH5DBIedarziUI4PaFc/Rad5gPmm5v1BQr9glZnM7EXfHu4ycWqR/RRZCqHEMvVtcOsvAVV+Rpezp1yfrX16QnkZZ9i8d7RlfFefVPguE7py9kQ4joD+2oH+huYs0N+ZRQoOTMcseg56z/N+gHuAl3M8REvRuUH3aP5TBLui3X5zCHrsweDoqrR9vpd4QF6KgTf4BxVI3GkjuEXyciYPp6zT6W1sRtcawGGNKf8x688r1c0zrm4sUKOqeDIUqtId5aCl8pK9QpArLkHdmiArbE/oOmdVXmJyIzl0q+FRQsyVNUvu7JhpGnJqosXTm8AekLRAKjOkKGDhA== X-Microsoft-Exchange-Diagnostics: 1;DM2PR0301MB0608;31:RzwpH1FVgD5WcRM7F0zltx/Jo5GqV3WYTxQ5ycvHdrNrx7NRzGmtn1DEbB9AOvNshHWlxQt7GSeqlvHOOYGXzmROgcmbEm1jzGWzkwN85r8nwqU8aq02E+vm7O0/kB6h39PnSXxtytp3sWmtt5DHDvBHum0TjScUQERStaIe0S4z5K//iSxij3jyk6Zs4kGzr/apJTTaXwT/UOi7TY/SasiNuQDCthVqNrscJsBreSR07JcpIS/ZxiL0BRGEFznEFu0K12qYMrWB15v54K4TYA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6095135)(601004)(2401047)(13023025)(13024025)(13018025)(13015025)(13017025)(8121501046)(5005006)(3002001)(10201501046)(93006095)(93001095)(6055026)(6096035)(20161123565025)(201703131430075)(201703131433075)(201703131441075)(201703131448075)(201703161259150)(20161123556025)(20161123563025)(20161123561025);SRVR:DM2PR0301MB0608;BCL:0;PCL:0;RULEID:(400006);SRVR:DM2PR0301MB0608; X-Microsoft-Exchange-Diagnostics: 1;DM2PR0301MB0608;4:6W/U9FuiCpcGgHQ9ihvdsvuBTQC6+UYRjeniP1OtMlg9uV6t7x/uT8rLGvenfaJ83WNyTA7x7aS8qc212JQgZd5ohGSdRXwj6Ps6W+NwQOqpyRzIyf8D65BCH9RKs+6xSio7/ClpjmxgUHnu2jJs+pOwwVw5Os/E5Idzv6X8GeelUdnNjV8UJGMbNeZVpax5quMZkFf9EPMpgNXsnwz7Lg5YrcEk7L7kjzjHO7cWtzPT+mFlgN6xVwBKlT3WQLkxKBJORty1C7sKq/Q6QoVxKFVMFWDthe80a5HhWJ2qrTi/Oc05RzRx32njpo5IX80YOF6VZmMmxn2sGeAnBILc+OPyJgxN1PuLUAnkoWaQhVrD9jjjWhyUtRpfMW24fW9ucDHvrd6undu5RYoiVglr3isr9EE6bY0VNnsIs0kTIVqIAkSlujtYmmqiuj0R0m0MHmT3ABKeo4YCjqMHdJHrB8onpHMAdDtNxzYDGen02b4LRkVLos9pWznOtd9yAI4bLGtgcB9AZJcYV1CBI8X/Si/LnsGadAVwTXDHgxalSuStjAqDWkWz3zkkefbCXtsVqtMy7oNMzwTul/hELk+CQnNGrvAM+YajeEYKuaEYdj1FkClBNAnm2GGXRaL8aEcEVPUclWFbuf2GPvBtOjjXft1L8HAYn1mpQgHyk3R4S/ohzWgYu0APlCbpzviex0anUY6fIY+a9RbadUZ/SKOFEHK9cX7QyEJYSzMu7W1E1bWeigwUgMKyOlpRoFfGKtrmhxmp/gIbLwhEULzc7betDiIYKvu8Vu36WysyxX4ErIsE9xNhIuzSO7ME4WlSMt7LSnRPHRSWEadNg2vLi/oAzNB+HWotrNnmUgZuaiJWtpva3gG4md1pir4nup7tlWSmzEaP3LPBFnATPLbd7k3tHbsTaNnxSBYLJV66chFYpOw= X-Forefront-PRVS: 02843AA9E0 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DM2PR0301MB0608;23:6wXrPo7A3kKrRpzpbYpFkWSL9rV83x+RV6W6/cW?= =?us-ascii?Q?fo8mhZbqLMOBMjZ6TaEzS82Y/++B5SQpw7ayJw0gxClWskihbniALWSxna7v?= =?us-ascii?Q?F2aHJqWPTyJiAm3wwUTakuDnH/ahecVX+xn4hy4fLOOrq/2TwKTg5/guonwr?= =?us-ascii?Q?A3JY8BE6O0HVM5qlV411OSLztVz1MzPL8Z+bR//jf39b1J7BmnCJfcZMsdI7?= =?us-ascii?Q?LZWYFR2jV6lVSmjCpV+p+7TgS6hrQWnXfHQu/uPpoL+HzgKOVfFljOsp6Sis?= =?us-ascii?Q?T5a7qqQ4G1pjAnFZQyhG+EW3FHWXWYUR6L9fdlaJEm/NC6haOgLBLlsJXLkJ?= =?us-ascii?Q?0Pm4U2/PCJezc6lbes5ueZDerh0FVrjAv0q7hDjcMCV9IiKASF44oGm6YGmR?= =?us-ascii?Q?6HImDAull5sBInk5EOt5TPltnCe6PhDMb0LMoJAZTXyRfCLjZCJIYVZidqwh?= =?us-ascii?Q?iC/oFs57R81oRkQITWtAd7hM7iI7MY04KCVdpvU+u2FQYvOT5I4WJ1lEJQGI?= =?us-ascii?Q?xk4sfjbN0s2blamPjH7bMBIim0kaQqhpcLTftK+U4XsENKvR8zDeSx72l0ID?= =?us-ascii?Q?o1uNbQOSnvD1TKAkbKrOQiz+WgUPJBMMSFZ3Cp9jVMyAltRsDMXupPWO3kpq?= =?us-ascii?Q?o+qJeBV1wID/AEztAgx+aEUdViPQw4Dbz7cbypjYzLCKEA1FHdOzFJEC0n/j?= =?us-ascii?Q?FLXECu2sGOvdLYSByfDWrINELnxA3PG5bN04SQwI1s+1KBvNW9HXaXDSBraT?= =?us-ascii?Q?IskMz/pRybaW8nAD0KGsKInswsXLdb3aeX2a2Jw2i3z4Y5KGzON6Qdybvtme?= =?us-ascii?Q?G/WeSYaookAgOrNS+mpTg2A/bCMCEm7XMG10Q8K8AmnJ2UaWahukQymHBJBW?= =?us-ascii?Q?0Wv03Ztnvl7j3Ij+L8fypee7fkxKJEpAzVuZabz0GmCqeP25v8DL44EmsmPj?= =?us-ascii?Q?Cv2dhCmhzFCkL4LP8vqIZhhA3aDhRc8ciQyeljVtNgpIFh0xoYVpYNFE69qe?= =?us-ascii?Q?Nb+/xHapLEQFZMMyXHO1/0d8f3BebKxlgrEBQG/kdDLSE1PFMW46+Zix4TnW?= =?us-ascii?Q?1BmaZwudG3Ykfine6uN8pdAD9cVWiBJ75y7wuLgy4V6kQhHamsKfja9SiHsr?= =?us-ascii?Q?FjFxhqDHUywsYO1HG6bfDKFedv4ltxWRDTY/j9CJfehYl3V4T/NxUBlyGkhC?= =?us-ascii?Q?DncnUA5IL6UWlwThTY+X4LYSBkwFOkLbD+SIUSvtqEGhoFCDnL9RJghbJfQ?= =?us-ascii?Q?=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;DM2PR0301MB0608;6:HYiAhL0rz0xawK8sCxwAoQlJZgU2wM8wdOt6Y9JoS/YC7mbtr56wL6M4TX5mg4J8G7ziRTtsOLYj9xNnQzOV719j483j3cas3Bh7QigsqkSswvvT35m2vXVCVKYW1FOTAZsPGLFX/l0+zPmZSr/SDwls5BY3XBNFJbIKQX1uY1O25sYL7c2BR1CVYWb1F2zCUENxJx3tsvaXwqTTDt7ZWP8/anqcO8TNxNm3f97ox16K9a5Sn3aXliB/z+qBgWr3c/0awNK3au09b46ieG9cFRu0Je5LEA7IDaibQOU4059xa8IPg7LG1aWSlP/Vi+JQLAUFU8P9qTs1C2k03fAafOtUwh5ngH5vKZ6SbLzJuUW5MiASgLJ6NFWc/lj910+32Llf1IuMlCjQqgHsoYLRKa7BvOjttEB7bp/+0rYe0UO/HyEwdQ8AIg63S4JiOKTUIhaNV5TSBfouHcvuGU9a+qx7anfzHSRdwPf1ioiX5m5wllCfVLw1sNpphDfxV+jq;5:atGDtsSi5/RaMJNhc6jLkosiz8qhxWso0pEWguCyaylrnKOh9umajhqiJnsP8MGRWxQ5j/pV077ip48JkBeR7G7PYeu+tvSIx0U8dBk2XeirkbM8A7WagvhSL9fUrwam+lieJOHosZqppTKSPQG8lE0ZQNMlQehr6O702SgLwnEBTdPEz2xm2BzvKFpbtKhI;24:bhc0se8zEFHLfjGUuTBlllIwi3XNTlxwfjlvGT3xnIkiXPNxRdhWsnZboXVfrBJGv4RSD2QHhqtL1zpJdwvKPmXdODSOV801EpviSoi4GAo= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DM2PR0301MB0608;7:iyIfDgvqKLp/yN6rfSabYhrAnGRUsYFuCQ0wjPtFKy5/cSl3z2oweaJQDxN6pO2/Y5GUkt9lw5Sft/8MqPOzO5FUQlJtyoaZoSqgJehd4zjwssX2aF9Cx2VtvgSq15jnWb4VMRpuooxLShnF/Q0fttHDtQovwCNFjvQ8cWp8hGklfBRDdMZSBZNmuzZfKOW8RjfHFTEs7xQek56OgiF5m09xqgZTGVVhqKNuZihxpLHtY7DBO1x3sPlKMQupHd4kgBVQZaX9LF5h/JJCCPrBteLjMfbNRLko0ohgU9RA7fktegCnLi0eopO3rppce9wA2iVHnt8Oj7Uj1MMe2DKkYw== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Apr 2017 13:07:45.7272 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e;Ip=[192.88.168.50];Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM2PR0301MB0608 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2691 Lines: 83 Bitclk is derived from sysclk using bclk_divs. Sysclk can be derived in two ways: (1) directly from MLCK (2) MCLK via PLL Commit 3c01b9ee2ab9d0d ("ASoC: codec: wm8960: Relax bit clock computation") relaxed bitclk computation when sysclk is directly derived from MCLK. Lets do the same thing when sysclk is derived via PLL. Signed-off-by: Daniel Baluta --- Here, I forced the following harmless initialization: *sysclk_idx = *dac_idx = *bclk_idx = -1; otherwise I would trigger a gcc false positive warning: sound/soc/codecs/wm8960.c: In function 'wm8960_configure_clocking': sound/soc/codecs/wm8960.c:810:46: warning: 'j' may be used uninitialized in this function [-Wmaybe-uninitialized] snd_soc_update_bits(codec, WM8960_CLOCK1, 0x7 << 6, j << 6); ~~^~~~ sound/soc/codecs/wm8960.c:806:44: warning: 'i' may be used uninitialized in this function [-Wmaybe-uninitialized] snd_soc_update_bits(codec, WM8960_CLOCK1, 3 << 1, i << 1); ~~^~~~ sound/soc/codecs/wm8960.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/sound/soc/codecs/wm8960.c b/sound/soc/codecs/wm8960.c index 8c87153..60700d5 100644 --- a/sound/soc/codecs/wm8960.c +++ b/sound/soc/codecs/wm8960.c @@ -679,6 +679,10 @@ int wm8960_configure_sysclk(struct wm8960_priv *wm8960, int mclk, * - freq_out = sysclk * sysclk_divs * - 10 * sysclk = bclk * bclk_divs * + * If we cannot find an exact match for (sysclk, lrclk, bclk) + * triplet, we relax the bclk such that bclk is chosen as the + * closest available frequency greater than expected bclk. + * * @codec: codec structure * @freq_in: input frequency used to derive freq out via PLL * @sysclk_idx: sysclk_divs index for found sysclk @@ -696,13 +700,15 @@ int wm8960_configure_pll(struct snd_soc_codec *codec, int freq_in, { struct wm8960_priv *wm8960 = snd_soc_codec_get_drvdata(codec); int sysclk, bclk, lrclk, freq_out; - int diff, best_freq_out; + int diff, closest, best_freq_out; int i, j, k; bclk = wm8960->bclk; lrclk = wm8960->lrclk; + closest = freq_in; best_freq_out = -EINVAL; + *sysclk_idx = *dac_idx = *bclk_idx = -1; for (i = 0; i < ARRAY_SIZE(sysclk_divs); ++i) { if (sysclk_divs[i] == -1) @@ -723,6 +729,13 @@ int wm8960_configure_pll(struct snd_soc_codec *codec, int freq_in, best_freq_out = freq_out; break; } + if (diff > 0 && closest > diff) { + *sysclk_idx = i; + *dac_idx = j; + *bclk_idx = k; + closest = diff; + best_freq_out = freq_out; + } } if (k != ARRAY_SIZE(bclk_divs)) break; -- 2.7.4