Thread (37 messages) 37 messages, 4 authors, 2021-03-15

Re: [PATCH 1/3] ASoC: simple-card-utils: Fix device module clock

From: Sameer Pujar <hidden>
Date: 2021-03-09 16:29:15
Also in: alsa-devel, linux-tegra, lkml

Hi Michael,

On 3/9/2021 8:11 PM, Michael Walle wrote:
External email: Use caution opening links or attachments


Hi,
quoted
If "clocks = <&xxx>" is specified from the CPU or Codec component
device node, the clock is not getting enabled. Thus audio playback
or capture fails.

Fix this by populating "simple_dai->clk" field when clocks property
is specified from device node as well. Also tidy up by re-organising
conditional statements of parsing logic.

Fixes: bb6fc620c2ed ("ASoC: simple-card-utils: add asoc_simple_card_parse_clk()")
Cc: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Sameer Pujar <redacted>
This actually breaks sound on my board
(arch/arm64/boot/dts/freescale/fsl-ls1028a-kontron-sl28-var3-ads2.dts).
The codec on this board (wm8904) has a fixed clock input (only distinct
frequencies are supported) and uses the FLL of the codec to generate the
desired sample rate.

It seems that after this patch the clock rate of the codecs clock (rather
than the FLL) is tried to be changed. Which fails, because it doesn't
support arbitrary frequencies.
Yes, after the given change the clock will be updated if "*mclk-fs" 
property is specified.

DT you mentioned has property "simple-audio-card,mclk-fs = <256>", which 
means you need a clock that is a function of sample rate. But as per 
above you want a fixed clock for MCLK. I think if you drop this 
property, the clock updates won't happen. Earlier for your case, this 
property was not used at all because the clock handle was not populated.
-michael
quoted
---
  sound/soc/generic/simple-card-utils.c | 13 ++++++-------
  1 file changed, 6 insertions(+), 7 deletions(-)
diff --git a/sound/soc/generic/simple-card-utils.c b/sound/soc/generic/simple-card-utils.c
index bc0b62e..0754d70 100644
--- a/sound/soc/generic/simple-card-utils.c
+++ b/sound/soc/generic/simple-card-utils.c
@@ -173,16 +173,15 @@ int asoc_simple_parse_clk(struct device *dev,
        *  or device's module clock.
        */
       clk = devm_get_clk_from_child(dev, node, NULL);
-     if (!IS_ERR(clk)) {
-             simple_dai->sysclk = clk_get_rate(clk);
+     if (IS_ERR(clk))
+             clk = devm_get_clk_from_child(dev, dlc->of_node, NULL);

+     if (!IS_ERR(clk)) {
               simple_dai->clk = clk;
-     } else if (!of_property_read_u32(node, "system-clock-frequency", &val)) {
+             simple_dai->sysclk = clk_get_rate(clk);
+     } else if (!of_property_read_u32(node, "system-clock-frequency",
+                                      &val)) {
               simple_dai->sysclk = val;
-     } else {
-             clk = devm_get_clk_from_child(dev, dlc->of_node, NULL);
-             if (!IS_ERR(clk))
-                     simple_dai->sysclk = clk_get_rate(clk);
       }

       if (of_property_read_bool(node, "system-clock-direction-out"))
--
2.7.4
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help