From nobody Mon May 4 11:33:25 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4A7A1C433EF for ; Wed, 6 Jul 2022 09:58:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232438AbiGFJ56 (ORCPT ); Wed, 6 Jul 2022 05:57:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38770 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232256AbiGFJ54 (ORCPT ); Wed, 6 Jul 2022 05:57:56 -0400 Received: from inva021.nxp.com (inva021.nxp.com [92.121.34.21]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E7EFA1ED for ; Wed, 6 Jul 2022 02:57:54 -0700 (PDT) Received: from inva021.nxp.com (localhost [127.0.0.1]) by inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id 3C48A20079B; Wed, 6 Jul 2022 11:57:53 +0200 (CEST) Received: from aprdc01srsp001v.ap-rdc01.nxp.com (aprdc01srsp001v.ap-rdc01.nxp.com [165.114.16.16]) by inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id 04D402007DE; Wed, 6 Jul 2022 11:57:53 +0200 (CEST) Received: from localhost.localdomain (shlinux2.ap.freescale.net [10.192.224.44]) by aprdc01srsp001v.ap-rdc01.nxp.com (Postfix) with ESMTP id 50153180327D; Wed, 6 Jul 2022 17:57:51 +0800 (+08) From: Shengjiu Wang To: nicoleotsuka@gmail.com, Xiubo.Lee@gmail.com, festevam@gmail.com, shengjiu.wang@gmail.com, lgirdwood@gmail.com, broonie@kernel.org, perex@perex.cz, tiwai@suse.com, alsa-devel@alsa-project.org Cc: linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org Subject: [PATCH] ASoC: imx-card: Fix DSD/PDM mclk frequency Date: Wed, 6 Jul 2022 17:42:55 +0800 Message-Id: <1657100575-8261-1-git-send-email-shengjiu.wang@nxp.com> X-Mailer: git-send-email 2.7.4 X-Virus-Scanned: ClamAV using ClamSMTP Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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 --- 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 1797d777b1b8..ccc4194dc5e7 100644 --- a/sound/soc/fsl/imx-card.c +++ b/sound/soc/fsl/imx-card.c @@ -17,6 +17,9 @@ =20 #include "fsl_sai.h" =20 +#define IMX_CARD_MCLK_22P5792MHZ 22579200 +#define IMX_CARD_MCLK_24P576MHZ 24576000 + enum codec_type { CODEC_DUMMY =3D 0, CODEC_AK5558 =3D 1, @@ -353,9 +356,14 @@ static int imx_aif_hw_params(struct snd_pcm_substream = *substream, mclk_freq =3D akcodec_get_mclk_rate(substream, params, slots, slot_width= ); else mclk_freq =3D params_rate(params) * slots * slot_width; - /* Use the maximum freq from DSD512 (512*44100 =3D 22579200) */ - if (format_is_dsd(params)) - mclk_freq =3D 22579200; + + if (format_is_dsd(params)) { + /* Use the maximum freq from DSD512 (512*44100 =3D 22579200) */ + if (!(params_rate(params) % 11025)) + mclk_freq =3D IMX_CARD_MCLK_22P5792MHZ; + else + mclk_freq =3D IMX_CARD_MCLK_24P576MHZ; + } =20 ret =3D snd_soc_dai_set_sysclk(cpu_dai, link_data->cpu_sysclk_id, mclk_fr= eq, SND_SOC_CLOCK_OUT); --=20 2.17.1