Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S3000201AbdDZNKm (ORCPT ); Wed, 26 Apr 2017 09:10:42 -0400 Received: from mail-co1nam03on0057.outbound.protection.outlook.com ([104.47.40.57]:56480 "EHLO NAM03-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S3000146AbdDZNKK (ORCPT ); Wed, 26 Apr 2017 09:10:10 -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 v2 2/2] ASoC: codec: wm8960: Relax bit clock computation when using PLL Date: Wed, 26 Apr 2017 16:09:52 +0300 Message-ID: <1493212192-7930-3-git-send-email-daniel.baluta@nxp.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1493212192-7930-1-git-send-email-daniel.baluta@nxp.com> References: <1493212192-7930-1-git-send-email-daniel.baluta@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131376858084380685;(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)(39400400002)(39860400002)(39840400002)(39380400002)(39850400002)(39410400002)(39450400003)(2980300002)(1109001)(1110001)(339900001)(189002)(199003)(9170700003)(8676002)(47776003)(33646002)(8936002)(104016004)(2906002)(50226002)(105606002)(106466001)(189998001)(50986999)(81166006)(76176999)(356003)(53936002)(38730400002)(5003940100001)(2201001)(36756003)(54906002)(77096006)(6666003)(85426001)(8656002)(305945005)(4326008)(50466002)(2950100002)(5660300001)(575784001)(48376002)(86362001)(39060400002);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;BN1BFFO11FD033;1:f7T4jbfjEGGgK6VHFg+q7AybsBrYBl2hhfA4KPL3opV24eviVQyHyn5FznwZfxxpXVBaqZyEwFQFsphYlhAJa/fOumvCg4mKX4AYq99BzCZ8jjf+udqQrfrXW268CKQ5DFrpo5twPV9gv7b48hm3ecThDA+OSdW6oQz5nfPG3joIETPn78JzILCzfP3X1WjScrpBajho9Ho/qJm+C1tsUOn5DtTKpwGFMeZ5QsneCUZ/S/cZkDiIYDfj15hqE7NRjhnQQ0hYPo+WsPgUxV5vfugso1wglU5LohwB600I6NL8sVkL+oyCQMf/1PVoGwQpOJcmtQEsJ8qKqMgSRTH+3VIcusAZPs/BmFoIGZooxqdtzC2MZu1/G95uMb+vbDUGjgUZVBoV5Uiv8riy3vLJta5c9BnGM1U+tWk5VJeJQp5BYEhLFLSH/f12juOYYszWHUxwIc/oEwMhIEVy1de4ZXJsYUGfNzN/9GEsgEA6yjLkAxS5+gdSNccFEwIGkS4MjqEjULWnDTdPmubGa49CrCCVzO/oWgpr6DrDH8TOVKauW4Bywt91xLlL2wzBVXSQyhW/UlXDF31r2TcA1QO7k1YyiVNJDshfA4KvhXpThJJuWqMDm7TUUyNP4cNLT5oIsgzP2MOSmt2bPXqwUbjNu5QlOV0E/WyUJ8PoEd4t2KJa0uH9AgZfGh8KTuKAidAa39hmJBL2tXMR0FOkIqHR6AZwp2o9ez3c2FqMXYBND+g= MIME-Version: 1.0 Content-Type: text/plain X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 048b985c-d241-4de1-2eac-08d48ca59048 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131430075)(201703131517081);SRVR:DM2PR0301MB0608; X-Microsoft-Exchange-Diagnostics: 1;DM2PR0301MB0608;3:X31Ql8bfMMHsMFiVNQggRpP5oMyoJZOKagpS+KXxfkCALBBbya0rwpCgZU1BdxdScl6Ax101eCXxTRXJQhM+g92SVVam1jRTBzrf49fp6SAl2eYVPiflbh4Y7t4UTry8pq4s0w06IRm+UZaAXj2UjtsGeZ1ZNT2/Bsepu9sc6ceLz0Ifu7BTo6hrUbKb6OheuDVMLjgdOekIYNgg0DUJtCVEL86sJe3ItU9hpEg7ZIiREQEnS9P8i7SA5X2ZadxEVlklWHArGSgRm8tINmXZMDbri87q8bvj4Od78Nx4VOuimWi74XXd8HT8M/gdOiDAlFJ9+sewVn20w0UYyPiq5R9WIu9mOGd7lZb7IpOhQZWVEQ7ybCVTw5mLSkzFeOp6IZUvs+f1WVaL/DG4N/ARGg9O+OfGfW5towRc4SiIVv8tFC6/EsFPItW/gm4X93sn;25:53LitxsgCQRI3Aeqmc8u8e9atzf3i1AyQzz+b6xVqz9vUhd0RX6ruCemZz0CORhcLqTyL3TsG7zBmiqeVNEP4EcSaaZe64DAOU3WXL3Sce/QDFLpIv0DOlt0G6dhO7nND0GLBPHhrqfw5PAY8GrntC4UE98MzvDYO1g9xtEB5/lo6s/o0+YOCQkm3mQW/K4k8jsjhr+9xdXv0BRzGlVWljkQC5VJL2XimPPO4bJ0vOM+KLVXohadrIFWidBrFOx7jXwgk9gfYFSUfTpkkNKzLLa+AVYjHXN+x1ACZLjylhb6q312Y/h7T4ax9U6huUWfP2FhVZI+CujU8JagoYtPNnLhYgV5W/OlFHWSmEFm+ASzhyJZA3VrKrql4BinWZPBqAKGN1DNAbfizjW22P7EfuJuyWgwFxH3aKoqtYax7hZYI37LyWZgXesvc2i3b36y2+9bOYAhhhjzp8A6rtVDmA== X-Microsoft-Exchange-Diagnostics: 1;DM2PR0301MB0608;31:pcHwrKfOq1neMzJYBhkfQIdxeTRY363Xwfa4gpAU+XBN80HlOZSI/fbj6drDg5TZcnvft0PYG9l8vgipCG7arcxyUWW+PN8ZalIFxpz9nSttVoM4Fr3oAu346BUPagtRG7i64aFPl7wtu/K6EjGdOPNmhAVcSM00tVpZt53KpX7jb9bZg0X3U98P3b9Pu1fJT789t88SgKLDKxFMMZThbr/Yzedtrxgste2usQgGPCjbyCPF7i58XZjlYE2Qg8MPqOnxlQb1x6obj+W/WxOfx211Wfk9a2sQ+/Ti4rq0feo= 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)(13024025)(13023025)(13018025)(13015025)(8121501046)(13017025)(5005006)(93006095)(93001095)(3002001)(10201501046)(6055026)(6096035)(20161123563025)(201703131430075)(201703131433075)(201703131441075)(201703131448075)(201703161259150)(20161123561025)(20161123565025)(20161123556025);SRVR:DM2PR0301MB0608;BCL:0;PCL:0;RULEID:(400006);SRVR:DM2PR0301MB0608; X-Microsoft-Exchange-Diagnostics: 1;DM2PR0301MB0608;4:I102os9Fa6O/VmfP00kmDxdvIA/csiAYaYEtViU5H+W4DjYXxO48xEBAR+u/urNwjCTC1lOcXumjhYm+CpdPG134XWdszewYV5DEaJLTrJcRRU+7eqatcIjRTH3r+Fmut7S/B9K/Euxk4Cl0kHmb05HoDo6r5VLu6qxImHUnfa3yv1iO7ElXHPUrU4voaPFLtjhj818QLv5iHDepdWpikw8OR5dGER5xd+RY3Wn0gwwhB+UEuTBfcc4xuAfWC7bHsMouN8RqGmLbthy5CX5gL9jBaykJtZEKcGhnoqL8jDK+/R+pfYWkSyjiWx9iftDHzqIQSua4dPbGMi/XW+isL6yk4hhzENtpIYcd5LAVnFS35MIPk+PX3PKxub0d36BjB3Idn4Y1bC4eLdQj2I462DfUhl6e9KyhE4UikW+DjY4ea2MW+fcjF4lPJtxIkb6LNkKzb9d6g/DJqqTXRZEfWJOxeqoFdxSD5LFGeT+xTLeXPrpk6t5s2oTNxaOBwTBy4kNWAX8jYuz6XSyZyGzyA0JGDHSFlCKzhGuCFadPGgmzyHon6G8kClwVx6r3E3Ozc9ew/mT+qJyvJ8/1k5LNyw8yMn8P86EuYcmo4S05D5UbFDtE9c3AHDBSMh9JIvin1Z9AUx0Q7aStg6aymarBwHgeLjrLCCZ93N26MKRXiRcc+lnresJPPVUyTLR3nlwUWb4+YY5ohmh19t5cvCIFNQmTGd0Wx2B0wykeLj+Xnq5Edj0RTFH9pEz0EvD83Kp7xJVEks3MiFi1+IXbTVUbA6H7fgWrkgBAZZz1D1pCNlqz+c/QKE+GHwlVwdepH+ygI1Dip+pQkeFvcOAglyzx8+lg4veDlVHZzW0RNqVOBmcvBfE1v5qJp0D9J/iHpAnFUE1SmJUXaGBy1d+ubBuxXPyb97x3ltzNQMWNK+tT4Fo= X-Forefront-PRVS: 0289B6431E X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DM2PR0301MB0608;23:H3hW+FiURfLCA0qnf4NYkdqFTTnpKDsUhKjg0+C?= =?us-ascii?Q?4xFmacfxn3ipEJjkE9jD1yvhp/ehQJg+87vqs+8e8EE6uZndXL7DomulE6Iq?= =?us-ascii?Q?xXR1qMoE02WjIkSUk0UXm/ZWXmoF0FvvyiXrW/3A7vQfCTvphejYYA/oR9ut?= =?us-ascii?Q?0FV9QRBOy/4tvrE1Iqn+CLYiBnZthctGcnNIldPQX3V8ppEDReNw1jQGaRKc?= =?us-ascii?Q?GGEVwRqmlryNcVvTrHdQq0zTk8rFeYD0eephaJAnBudef+XR9Mtzf7xxUH4C?= =?us-ascii?Q?7eThV4XlAWH68a+6rpnjUV52gZKOsPM4x7P5y6y9wm+IMFTYNZG+WchJqrhn?= =?us-ascii?Q?1kG4xCwu2ozFqChPdGg7eik2ryg45EVXSkG7by6jcJel9YoGWTGxq2WmThoy?= =?us-ascii?Q?zpyV1fE3aB0tnCuoA/RWx66BvERPaX01JlLhwEptuHN3kTigkoFahVGBSITp?= =?us-ascii?Q?LsPXIEpa3jC8wvX1jddl6vkctKLjtXJI2ON03enGBAIhXDTKiDkrratiKMFu?= =?us-ascii?Q?cv1wb2g0qazILyP+nXuacIvZyp0233T4Bq8BoSNqSFa8l91h00l/WbPhdlzx?= =?us-ascii?Q?gNX4pUwmt2/VrYk5lUGCuIMiYC9FcPU+nUfH+QTw9GucCGZ/rB0WChmSlOVB?= =?us-ascii?Q?p3XOl8ak43JdWGlCAMuTJN/x3rGt+OfC2JHLzBSy/t8gmVIhGD+0jofZVBDN?= =?us-ascii?Q?x5zEKRnh460w1GIQ41J2uUW058l3E/hZL6nDU7FQAsLTvHqDvZ7OlwqEhlnd?= =?us-ascii?Q?EQ7WtquaUc8ucGrTP6ICMyL+l9u94lqc8hSut3XKSsV5/sZJriUWSHYnJ1vw?= =?us-ascii?Q?TUtO0NKuC8Pq5Rfm0HIWmor7ny5QdX56EwuhiHZVkb5s+yJATYNxYLLrG0u8?= =?us-ascii?Q?qE0vE3NHG0lJTj4V2UFtFA2AQrT0xLs8qJUnaOLrg3JE87kEks/7y+Smm2Bw?= =?us-ascii?Q?XFmwuZpMwolU6U3XVjXd8RnMS3fK0BHM2UudUwbpZgGY0jOONPQYDMDG7FMW?= =?us-ascii?Q?xowe97z5187bXjYIFvJJTGUMvqAEYLRtQ2JSpwlS4+voH6IvM4WbOoSv/Lpz?= =?us-ascii?Q?j+8MfcOZMQ3CZ8rpDqXVCpj/elfMhF+TD749PNZGzRTUoLTWMYrqWCbuI40e?= =?us-ascii?Q?yyNyC7ev8IRNYCBUnqkHDQ2c8wBjZNawd5Kbc39U0jtZdMar/sis62vEviQA?= =?us-ascii?Q?jBKTsYG3hC5dbd7xiGVD9e88b3gdIlOjj/x82B1KyNo5KkJahTC+UComEHw?= =?us-ascii?Q?=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;DM2PR0301MB0608;6:tjo+nd6dQFrnxA0hDH2Fw5oUtYZ1bjNAZyDNUjZN9szihvFZBpv2sdLn0i6/MefHMcUV6O4MzpVXsb/cDAwdgug5AY8amKNq4JqHRvQ5LgryrMpwvLys4fcWa1PO4QRNfIIydm1cr2AJR2gZvFqZQ5ITKQZnqqWvRjwfA9ehhPVVKvC9BfVPKN9UlG6do4zSq5bL9F86b/lL4QqO0om5Cs/46EGOZds2Lg5uyJvtrspAkSLvx3NIZUj/Vp/q+bCcNqdqpGIqynEMHIX2JpgKTG/FhnjV4CAGcljj6L0bdzJKMU+PQVw+1hBy6/aSg7K1rEHBirip1FC6sGACL2ibp8JGcLocAYpwBysU+1jDKzra0Ew55pTQRwTaJnoSvhst5IMAX89uMWW4TzepJ7H56jUQ/40J5c4jQ5M5t0Tk66dG9lE5bb25yb3MWSf+AqrnMlq/FoghVx40RWl6H9VpFaTZktUXbpxe/BdSveP6Fjom6qslhT4MIvGnOP4AanmY;5:7qsAM6mtrTHKn6Zy1LxwcHE6J0ZwQRo3IJusCDfqhZCj420WJCUt+03u1OuA67SYpbUe0zMbdGkcKqVymxN5INDuTBUPf8Mp13nnz5/5FLY1r4H584UK9Z6+rKvnvFobeWbKYSF250WQHkRF1MhNPM17w9PSLMgle7E7+rJ5vijMhA5pXWzu7XAQ0SbMhu1u;24:kaPy150i2PWVgYjuCjQyotmK35VqAkn1d1ISgocqA+WgEsDY75yAbgsvh36/W9YI933//OgnKNVhiqYPTx4nhVt7rIWRwBS6yudspYmbcxw= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DM2PR0301MB0608;7:9R9j6ANDg0fFzij5TKMjE6ep3m3nylYzu7K5M2H/fwIv3m/IuMJRQLTqepL4BnE0sz7SJpsBDFi3hJxVQLWz9vJhL0Pbn3PyCFKwEi+hQFtFYKpP15rWBmqRMAxcN1Fan2AZIvgkXVgc/1F4SLOksazi8ycrDd6peFr0hYb6nFhBH3vpxw3R5kNbNZCllFaIS1KGOWiNf6XtXQuIoiXXUn07zeYOAKRf8xfug0pH7FdMbbk+ngaomD01sjBsP4siAAVPlSRZjLS8d1Mxc9/B6An2Z6EXpXWoupg8/ox8uVrnZf3aicew6y9U/J6kbdKhzGjAyM2MPK5SvAm5zyJXiw== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Apr 2017 13:10:08.2196 (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: 2124 Lines: 72 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 --- Changes since v2: * rebase after changes in first patch in the series sound/soc/codecs/wm8960.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/sound/soc/codecs/wm8960.c b/sound/soc/codecs/wm8960.c index d899623..9ed4557 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,12 +700,14 @@ 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; + 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) { @@ -722,10 +728,18 @@ int wm8960_configure_pll(struct snd_soc_codec *codec, int freq_in, *bclk_idx = k; return freq_out; } + if (diff > 0 && closest > diff) { + *sysclk_idx = i; + *dac_idx = j; + *bclk_idx = k; + closest = diff; + best_freq_out = freq_out; + } } } } - return -EINVAL; + + return best_freq_out; } static int wm8960_configure_clocking(struct snd_soc_codec *codec) { -- 2.7.4