lkml.org 
[lkml]   [2021]   [Mar]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 1/3] ASoC: simple-card-utils: Fix device module clock
    Hi Sameer,

    Am 2021-03-10 15:50, schrieb Sameer Pujar:
    > On 3/10/2021 4:00 AM, Michael Walle wrote:
    >> Am 2021-03-09 17:27, schrieb Sameer Pujar:
    >>> On 3/9/2021 8:11 PM, Michael Walle wrote:
    >>>>> 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 <spujar@nvidia.com>
    >>>>
    >>>> 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.
    >>
    >> You mean to drop the mclk-fs property? I can't do that because I
    >> actually need a frequency of 256 * sample rate. But that doesn't
    >> necessarily need to be the MCLK, because the codec itself has a
    >> FLL/PLL which can be used to generate any frequency for a given
    >> MCLK. So that is a valid scenario. See also commit 13409d27cb39
    >> ("ASoC: wm8904: configure sysclk/FLL automatically").
    >>

    I've had a closer look at this and it seems you're messing around
    with the clock of the codec's node (which is _not_ a subnode of
    the simple-audio-card). I don't think this is correct.

    I guess you should rather set the clock property in the codec
    subnode of the simple-audio-card, which is then picked up by the
    simple-audio-card driver and changed accordingly.

    For example:
    simple-audio-card,dai-link@0 {
    reg = <0>;
    bitclock-master = <&dailink0_master>;
    frame-master = <&dailink0_master>;
    format = "i2s";

    cpu {
    sound-dai = <&sai6>;
    };

    dailink0_master: codec {
    sound-dai = <&wm8904>;
    clocks = <&mclk>;
    };
    };

    In this case mclk will be enabled and disabled accordingly.

    Could you test this?

    -michael

    \
     
     \ /
      Last update: 2021-03-11 11:29    [W:4.138 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site