lkml.org 
[lkml]   [2022]   [Aug]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.19 0936/1157] ASoC: imx-card: Fix DSD/PDM mclk frequency
    Date
    From: Shengjiu Wang <shengjiu.wang@nxp.com>

    [ Upstream commit c0fabd12a8570cb932f13d9388f3d887ad44369b ]

    The DSD/PDM rate not only DSD64/128/256/512, which are the
    multiple rate of 44.1kHz, but also support the multiple
    rate of 8kHz, so can't force all mclk frequency to be
    22579200Hz, need to assign the frequency according to
    rate.

    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/1657100575-8261-1-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 | 14 +++++++++++---
    1 file changed, 11 insertions(+), 3 deletions(-)

    diff --git a/sound/soc/fsl/imx-card.c b/sound/soc/fsl/imx-card.c
    index 6f8efd838fcc..c0eb218a254b 100644
    --- a/sound/soc/fsl/imx-card.c
    +++ b/sound/soc/fsl/imx-card.c
    @@ -17,6 +17,9 @@

    #include "fsl_sai.h"

    +#define IMX_CARD_MCLK_22P5792MHZ 22579200
    +#define IMX_CARD_MCLK_24P576MHZ 24576000
    +
    enum codec_type {
    CODEC_DUMMY = 0,
    CODEC_AK5558 = 1,
    @@ -353,9 +356,14 @@ static int imx_aif_hw_params(struct snd_pcm_substream *substream,
    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) */
    - if (format_is_dsd(params))
    - mclk_freq = 22579200;
    +
    + if (format_is_dsd(params)) {
    + /* Use the maximum freq from DSD512 (512*44100 = 22579200) */
    + if (!(params_rate(params) % 11025))
    + mclk_freq = IMX_CARD_MCLK_22P5792MHZ;
    + else
    + mclk_freq = IMX_CARD_MCLK_24P576MHZ;
    + }

    ret = snd_soc_dai_set_sysclk(cpu_dai, link_data->cpu_sysclk_id, mclk_freq,
    SND_SOC_CLOCK_OUT);
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-08-16 02:51    [W:2.945 / U:0.444 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site