lkml.org 
[lkml]   [2022]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.16 0526/1039] ASoC: imx-card: Fix mclk calculation issue for akcodec
    Date
    From: Shengjiu Wang <shengjiu.wang@nxp.com>

    [ Upstream commit f331ae5fa59fbfb748317b290648fc3f1a50d932 ]

    Transfer the refined slots and slot_width to akcodec_get_mclk_rate()
    for mclk calculation, otherwise the mclk frequency does not match
    with the slots and slot_width for S16_LE format, because the default
    slot_width is 32.

    Fixes: aa736700f42f ("ASoC: imx-card: Add imx-card machine driver")
    Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com>
    Link: https://lore.kernel.org/r/1641292835-19085-3-git-send-email-shengjiu.wang@nxp.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    sound/soc/fsl/imx-card.c | 7 ++++---
    1 file changed, 4 insertions(+), 3 deletions(-)

    diff --git a/sound/soc/fsl/imx-card.c b/sound/soc/fsl/imx-card.c
    index 96ac1e465fade..84a8dcdee9316 100644
    --- a/sound/soc/fsl/imx-card.c
    +++ b/sound/soc/fsl/imx-card.c
    @@ -247,13 +247,14 @@ static bool codec_is_akcodec(unsigned int type)
    }

    static unsigned long akcodec_get_mclk_rate(struct snd_pcm_substream *substream,
    - struct snd_pcm_hw_params *params)
    + struct snd_pcm_hw_params *params,
    + int slots, int slot_width)
    {
    struct snd_soc_pcm_runtime *rtd = substream->private_data;
    struct imx_card_data *data = snd_soc_card_get_drvdata(rtd->card);
    const struct imx_card_plat_data *plat_data = data->plat_data;
    struct dai_link_data *link_data = &data->link_data[rtd->num];
    - unsigned int width = link_data->slots * link_data->slot_width;
    + unsigned int width = slots * slot_width;
    unsigned int rate = params_rate(params);
    int i;

    @@ -349,7 +350,7 @@ static int imx_aif_hw_params(struct snd_pcm_substream *substream,

    /* Set MCLK freq */
    if (codec_is_akcodec(plat_data->type))
    - mclk_freq = akcodec_get_mclk_rate(substream, params);
    + mclk_freq = akcodec_get_mclk_rate(substream, params, slots, slot_width);
    else
    mclk_freq = params_rate(params) * slots * slot_width;
    /* Use the maximum freq from DSD512 (512*44100 = 22579200) */
    --
    2.34.1


    \
     
     \ /
      Last update: 2022-09-17 16:12    [W:4.049 / U:0.260 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site