Re: [PATCH 2/2] ASoC: codec: wm8960: Relax bit clock computation when using PLL

2017-04-21 Thread Arnd Bergmann
On Fri, Apr 21, 2017 at 3:07 PM, Daniel Baluta  wrote:
> 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);
>   ~~^~~~

I saw the same warning earlier, but it was gone after the rework
I posted the other day. Please try if that works for you as well, I think
that would be better than a bogus initialization.

   Arnd


Re: [PATCH 2/2] ASoC: codec: wm8960: Relax bit clock computation when using PLL

2017-04-21 Thread Arnd Bergmann
On Fri, Apr 21, 2017 at 3:07 PM, Daniel Baluta  wrote:
> 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);
>   ~~^~~~

I saw the same warning earlier, but it was gone after the rework
I posted the other day. Please try if that works for you as well, I think
that would be better than a bogus initialization.

   Arnd


[PATCH 2/2] ASoC: codec: wm8960: Relax bit clock computation when using PLL

2017-04-21 Thread Daniel Baluta
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



[PATCH 2/2] ASoC: codec: wm8960: Relax bit clock computation when using PLL

2017-04-21 Thread Daniel Baluta
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



[PATCH 2/2] ASoC: codec: wm8960: Relax bit clock computation when using PLL

2017-04-06 Thread Daniel Baluta
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 
Acked-by: Charles Keepax 
---
 sound/soc/codecs/wm8960.c | 16 ++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/sound/soc/codecs/wm8960.c b/sound/soc/codecs/wm8960.c
index ace69da..8ab9fa2 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,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, best_freq_out;
+   int diff, closest, best_freq_out = 0;
int i, j, k;
 
bclk = wm8960->bclk;
lrclk = wm8960->lrclk;
+   closest = freq_in;
 
-   *bclk_idx = -1;
+   *bclk_idx = *dac_idx = *sysclk_idx = -1;
 
for (i = 0; i < ARRAY_SIZE(sysclk_divs); ++i) {
if (sysclk_divs[i] == -1)
@@ -723,6 +728,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



[PATCH 2/2] ASoC: codec: wm8960: Relax bit clock computation when using PLL

2017-04-06 Thread Daniel Baluta
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 
Acked-by: Charles Keepax 
---
 sound/soc/codecs/wm8960.c | 16 ++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/sound/soc/codecs/wm8960.c b/sound/soc/codecs/wm8960.c
index ace69da..8ab9fa2 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,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, best_freq_out;
+   int diff, closest, best_freq_out = 0;
int i, j, k;
 
bclk = wm8960->bclk;
lrclk = wm8960->lrclk;
+   closest = freq_in;
 
-   *bclk_idx = -1;
+   *bclk_idx = *dac_idx = *sysclk_idx = -1;
 
for (i = 0; i < ARRAY_SIZE(sysclk_divs); ++i) {
if (sysclk_divs[i] == -1)
@@ -723,6 +728,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



Re: [PATCH 2/2] ASoC: codec: wm8960: Relax bit clock computation when using PLL

2017-04-05 Thread kbuild test robot
Hi Daniel,

[auto build test WARNING on asoc/for-next]
[also build test WARNING on next-20170405]
[cannot apply to v4.11-rc5]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improve the system]

url:
https://github.com/0day-ci/linux/commits/Daniel-Baluta/ASoC-codec-wm8960-Relax-bit-clock-computation-when-using-PLL/20170405-144647
base:   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git 
for-next
config: i386-randconfig-s0-201714 (attached as .config)
compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
reproduce:
# save the attached .config to linux build tree
make ARCH=i386 

Note: it may well be a FALSE warning. FWIW you are at least aware of it now.
http://gcc.gnu.org/wiki/Better_Uninitialized_Warnings

All warnings (new ones prefixed by >>):

   sound/soc/codecs/wm8960.c: In function 'wm8960_configure_clocking':
>> sound/soc/codecs/wm8960.c:743:3: warning: 'best_freq_out' may be used 
>> uninitialized in this function [-Wmaybe-uninitialized]
  wm8960_set_pll(codec, freq_in, best_freq_out);
  ^
   sound/soc/codecs/wm8960.c:703:21: note: 'best_freq_out' was declared here
 int diff, closest, best_freq_out;
^
   sound/soc/codecs/wm8960.c:806:56: 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:802:54: warning: 'i' may be used uninitialized in 
this function [-Wmaybe-uninitialized]
 snd_soc_update_bits(codec, WM8960_CLOCK1, 3 << 1, i << 1);
   ~~^~~~

vim +/best_freq_out +743 sound/soc/codecs/wm8960.c

6b662dee Daniel Baluta 2017-04-04  727  
*bclk_idx = k;
6b662dee Daniel Baluta 2017-04-04  728  
best_freq_out = freq_out;
6b662dee Daniel Baluta 2017-04-04  729  
break;
6b662dee Daniel Baluta 2017-04-04  730  }
16c42f46 Daniel Baluta 2017-04-04  731  if 
(diff > 0 && closest > diff) {
16c42f46 Daniel Baluta 2017-04-04  732  
*sysclk_idx = i;
16c42f46 Daniel Baluta 2017-04-04  733  
*dac_idx = j;
16c42f46 Daniel Baluta 2017-04-04  734  
*bclk_idx = k;
16c42f46 Daniel Baluta 2017-04-04  735  
closest = diff;
16c42f46 Daniel Baluta 2017-04-04  736  
best_freq_out = freq_out;
16c42f46 Daniel Baluta 2017-04-04  737  }
6b662dee Daniel Baluta 2017-04-04  738  }
6b662dee Daniel Baluta 2017-04-04  739  }
6b662dee Daniel Baluta 2017-04-04  740  }
6b662dee Daniel Baluta 2017-04-04  741  
6b662dee Daniel Baluta 2017-04-04  742  if (*bclk_idx != -1)
6b662dee Daniel Baluta 2017-04-04 @743  wm8960_set_pll(codec, 
freq_in, best_freq_out);
6b662dee Daniel Baluta 2017-04-04  744  
6b662dee Daniel Baluta 2017-04-04  745  return *bclk_idx;
6b662dee Daniel Baluta 2017-04-04  746  }
3176bf2d Zidan Wang2015-08-11  747  static int 
wm8960_configure_clocking(struct snd_soc_codec *codec)
0e50b51a Zidan Wang2015-05-12  748  {
0e50b51a Zidan Wang2015-05-12  749  struct wm8960_priv *wm8960 = 
snd_soc_codec_get_drvdata(codec);
6b662dee Daniel Baluta 2017-04-04  750  int freq_out, freq_in;
0e50b51a Zidan Wang2015-05-12  751  u16 iface1 = 
snd_soc_read(codec, WM8960_IFACE1);

:: The code at line 743 was first introduced by commit
:: 6b662deec0da0ad4f9dce8112d01828ed72b5a4c ASoC: codec: wm9860: Refactor 
PLL out freq search

:: TO: Daniel Baluta 
:: CC: 0day robot 

---
0-DAY kernel test infrastructureOpen Source Technology Center
https://lists.01.org/pipermail/kbuild-all   Intel Corporation


.config.gz
Description: application/gzip


Re: [PATCH 2/2] ASoC: codec: wm8960: Relax bit clock computation when using PLL

2017-04-05 Thread kbuild test robot
Hi Daniel,

[auto build test WARNING on asoc/for-next]
[also build test WARNING on next-20170405]
[cannot apply to v4.11-rc5]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improve the system]

url:
https://github.com/0day-ci/linux/commits/Daniel-Baluta/ASoC-codec-wm8960-Relax-bit-clock-computation-when-using-PLL/20170405-144647
base:   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git 
for-next
config: i386-randconfig-s0-201714 (attached as .config)
compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
reproduce:
# save the attached .config to linux build tree
make ARCH=i386 

Note: it may well be a FALSE warning. FWIW you are at least aware of it now.
http://gcc.gnu.org/wiki/Better_Uninitialized_Warnings

All warnings (new ones prefixed by >>):

   sound/soc/codecs/wm8960.c: In function 'wm8960_configure_clocking':
>> sound/soc/codecs/wm8960.c:743:3: warning: 'best_freq_out' may be used 
>> uninitialized in this function [-Wmaybe-uninitialized]
  wm8960_set_pll(codec, freq_in, best_freq_out);
  ^
   sound/soc/codecs/wm8960.c:703:21: note: 'best_freq_out' was declared here
 int diff, closest, best_freq_out;
^
   sound/soc/codecs/wm8960.c:806:56: 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:802:54: warning: 'i' may be used uninitialized in 
this function [-Wmaybe-uninitialized]
 snd_soc_update_bits(codec, WM8960_CLOCK1, 3 << 1, i << 1);
   ~~^~~~

vim +/best_freq_out +743 sound/soc/codecs/wm8960.c

6b662dee Daniel Baluta 2017-04-04  727  
*bclk_idx = k;
6b662dee Daniel Baluta 2017-04-04  728  
best_freq_out = freq_out;
6b662dee Daniel Baluta 2017-04-04  729  
break;
6b662dee Daniel Baluta 2017-04-04  730  }
16c42f46 Daniel Baluta 2017-04-04  731  if 
(diff > 0 && closest > diff) {
16c42f46 Daniel Baluta 2017-04-04  732  
*sysclk_idx = i;
16c42f46 Daniel Baluta 2017-04-04  733  
*dac_idx = j;
16c42f46 Daniel Baluta 2017-04-04  734  
*bclk_idx = k;
16c42f46 Daniel Baluta 2017-04-04  735  
closest = diff;
16c42f46 Daniel Baluta 2017-04-04  736  
best_freq_out = freq_out;
16c42f46 Daniel Baluta 2017-04-04  737  }
6b662dee Daniel Baluta 2017-04-04  738  }
6b662dee Daniel Baluta 2017-04-04  739  }
6b662dee Daniel Baluta 2017-04-04  740  }
6b662dee Daniel Baluta 2017-04-04  741  
6b662dee Daniel Baluta 2017-04-04  742  if (*bclk_idx != -1)
6b662dee Daniel Baluta 2017-04-04 @743  wm8960_set_pll(codec, 
freq_in, best_freq_out);
6b662dee Daniel Baluta 2017-04-04  744  
6b662dee Daniel Baluta 2017-04-04  745  return *bclk_idx;
6b662dee Daniel Baluta 2017-04-04  746  }
3176bf2d Zidan Wang2015-08-11  747  static int 
wm8960_configure_clocking(struct snd_soc_codec *codec)
0e50b51a Zidan Wang2015-05-12  748  {
0e50b51a Zidan Wang2015-05-12  749  struct wm8960_priv *wm8960 = 
snd_soc_codec_get_drvdata(codec);
6b662dee Daniel Baluta 2017-04-04  750  int freq_out, freq_in;
0e50b51a Zidan Wang2015-05-12  751  u16 iface1 = 
snd_soc_read(codec, WM8960_IFACE1);

:: The code at line 743 was first introduced by commit
:: 6b662deec0da0ad4f9dce8112d01828ed72b5a4c ASoC: codec: wm9860: Refactor 
PLL out freq search

:: TO: Daniel Baluta 
:: CC: 0day robot 

---
0-DAY kernel test infrastructureOpen Source Technology Center
https://lists.01.org/pipermail/kbuild-all   Intel Corporation


.config.gz
Description: application/gzip


Re: [PATCH 2/2] ASoC: codec: wm8960: Relax bit clock computation when using PLL

2017-04-05 Thread Charles Keepax
On Tue, Apr 04, 2017 at 07:45:14PM +0300, Daniel Baluta wrote:
> 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 
> ---

Acked-by: Charles Keepax 

Thanks,
Charles


Re: [PATCH 2/2] ASoC: codec: wm8960: Relax bit clock computation when using PLL

2017-04-05 Thread Charles Keepax
On Tue, Apr 04, 2017 at 07:45:14PM +0300, Daniel Baluta wrote:
> 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 
> ---

Acked-by: Charles Keepax 

Thanks,
Charles


[PATCH 2/2] ASoC: codec: wm8960: Relax bit clock computation when using PLL

2017-04-04 Thread Daniel Baluta
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 
---
 sound/soc/codecs/wm8960.c | 14 +-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/sound/soc/codecs/wm8960.c b/sound/soc/codecs/wm8960.c
index 36c8454..e8cb764 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,11 +700,12 @@ 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;
 
*bclk_idx = -1;
 
@@ -723,6 +728,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;
+   }
}
}
}
-- 
2.7.4



[PATCH 2/2] ASoC: codec: wm8960: Relax bit clock computation when using PLL

2017-04-04 Thread Daniel Baluta
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 
---
 sound/soc/codecs/wm8960.c | 14 +-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/sound/soc/codecs/wm8960.c b/sound/soc/codecs/wm8960.c
index 36c8454..e8cb764 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,11 +700,12 @@ 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;
 
*bclk_idx = -1;
 
@@ -723,6 +728,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;
+   }
}
}
}
-- 
2.7.4