From: Sascha Hauer <s.hauer@pengutronix.de>
To: Shengjiu Wang <shengjiu.wang@gmail.com>
Cc: alsa-devel@alsa-project.org, Xiubo Li <Xiubo.Lee@gmail.com>,
Vinod Koul <vkoul@kernel.org>, NXP Linux Team <linux-imx@nxp.com>,
Sascha Hauer <kernel@pengutronix.de>,
dmaengine@vger.kernel.org, Fabio Estevam <festevam@gmail.com>
Subject: Re: [PATCH v3 15/20] ASoC: fsl_micfil: simplify clock setting
Date: Thu, 7 Apr 2022 09:08:51 +0200 [thread overview]
Message-ID: <20220407070851.GZ4012@pengutronix.de> (raw)
In-Reply-To: <CAA+D8AOWVaaAEvR-tK=fL9KL463-NwKGvtdPOXcs0AZ0WOgZDA@mail.gmail.com>
On Thu, Apr 07, 2022 at 01:09:37PM +0800, Shengjiu Wang wrote:
> On Tue, Apr 5, 2022 at 4:00 PM Sascha Hauer <[1]s.hauer@pengutronix.de>
> wrote:
>
> The reference manual has this for calculating the micfil internal clock
> divider:
>
> MICFIL Clock rate
> clkdiv = -----------------
> 8 * OSR * outrate
>
> (with OSR == Oversampling Rate, outrate == output sample rate)
>
> The driver first sets the MICFIL Clock rate to (outrate * 1024) and then
> calculates back the clkdiv value from the above calculation.
>
> Simplify this by using a fixed clkdiv value of 8 and set the MICFIL
> Clock rate to (outrate * clkdiv * OSR * 8).
>
> While at it drop disabling the clock before setting its rate. The MICFIL
> module is disabled when the rate is changed and it is also resetted
> before it is started again, so I doubt it's necessary to disable the
> clock.
>
> Signed-off-by: Sascha Hauer <[2]s.hauer@pengutronix.de>
> ---
> sound/soc/fsl/fsl_micfil.c | 45 ++++----------------------------------
> 1 file changed, 4 insertions(+), 41 deletions(-)
>
> diff --git a/sound/soc/fsl/fsl_micfil.c b/sound/soc/fsl/fsl_micfil.c
> index 8335646a84d17..fd3b168a38661 100644
> --- a/sound/soc/fsl/fsl_micfil.c
> +++ b/sound/soc/fsl/fsl_micfil.c
> @@ -111,19 +111,6 @@ static const struct snd_kcontrol_new
> fsl_micfil_snd_controls[] = {
> snd_soc_get_enum_double, snd_soc_put_enum_double),
> };
>
> -static inline int get_clk_div(struct fsl_micfil *micfil,
> - unsigned int rate)
> -{
> - long mclk_rate;
> - int clk_div;
> -
> - mclk_rate = clk_get_rate(micfil->mclk);
> -
> - clk_div = mclk_rate / (rate * micfil->osr * 8);
> -
> - return clk_div;
> -}
> -
> /* The SRES is a self-negated bit which provides the CPU with the
> * capability to initialize the PDM Interface module through the
> * slave-bus interface. This bit always reads as zero, and this
> @@ -147,24 +134,6 @@ static int fsl_micfil_reset(struct device *dev)
> return 0;
> }
>
> -static int fsl_micfil_set_mclk_rate(struct fsl_micfil *micfil,
> - unsigned int freq)
> -{
> - struct device *dev = &micfil->pdev->dev;
> - int ret;
> -
> - clk_disable_unprepare(micfil->mclk);
> -
> - ret = clk_set_rate(micfil->mclk, freq * 1024);
> - if (ret)
> - dev_warn(dev, "failed to set rate (%u): %d\n",
> - freq * 1024, ret);
> -
> - clk_prepare_enable(micfil->mclk);
> -
> - return ret;
> -}
> -
> static int fsl_micfil_startup(struct snd_pcm_substream *substream,
> struct snd_soc_dai *dai)
> {
> @@ -238,13 +207,12 @@ static int fsl_micfil_trigger(struct
> snd_pcm_substream *substream, int cmd,
> static int fsl_set_clock_params(struct device *dev, unsigned int rate)
> {
> struct fsl_micfil *micfil = dev_get_drvdata(dev);
> - int clk_div;
> + int clk_div = 8;
> int ret;
>
> - ret = fsl_micfil_set_mclk_rate(micfil, rate);
> - if (ret < 0)
> - dev_err(dev, "failed to set mclk[%lu] to rate %u\n",
> - clk_get_rate(micfil->mclk), rate);
> + ret = clk_set_rate(micfil->mclk, rate * clk_div * micfil->osr *
> 8);
>
> Please make sure micfil->osr is assigned.
Should also be MICFIL_OSR_DEFAULT instead. The micfil->osr field sneaked
in during development and I decided against it finally.
Sascha
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
WARNING: multiple messages have this Message-ID (diff)
From: Sascha Hauer <s.hauer@pengutronix.de>
To: Shengjiu Wang <shengjiu.wang@gmail.com>
Cc: alsa-devel@alsa-project.org, Xiubo Li <Xiubo.Lee@gmail.com>,
Fabio Estevam <festevam@gmail.com>,
Sascha Hauer <kernel@pengutronix.de>,
Vinod Koul <vkoul@kernel.org>, NXP Linux Team <linux-imx@nxp.com>,
dmaengine@vger.kernel.org
Subject: Re: [PATCH v3 15/20] ASoC: fsl_micfil: simplify clock setting
Date: Thu, 7 Apr 2022 09:08:51 +0200 [thread overview]
Message-ID: <20220407070851.GZ4012@pengutronix.de> (raw)
In-Reply-To: <CAA+D8AOWVaaAEvR-tK=fL9KL463-NwKGvtdPOXcs0AZ0WOgZDA@mail.gmail.com>
On Thu, Apr 07, 2022 at 01:09:37PM +0800, Shengjiu Wang wrote:
> On Tue, Apr 5, 2022 at 4:00 PM Sascha Hauer <[1]s.hauer@pengutronix.de>
> wrote:
>
> The reference manual has this for calculating the micfil internal clock
> divider:
>
> MICFIL Clock rate
> clkdiv = -----------------
> 8 * OSR * outrate
>
> (with OSR == Oversampling Rate, outrate == output sample rate)
>
> The driver first sets the MICFIL Clock rate to (outrate * 1024) and then
> calculates back the clkdiv value from the above calculation.
>
> Simplify this by using a fixed clkdiv value of 8 and set the MICFIL
> Clock rate to (outrate * clkdiv * OSR * 8).
>
> While at it drop disabling the clock before setting its rate. The MICFIL
> module is disabled when the rate is changed and it is also resetted
> before it is started again, so I doubt it's necessary to disable the
> clock.
>
> Signed-off-by: Sascha Hauer <[2]s.hauer@pengutronix.de>
> ---
> sound/soc/fsl/fsl_micfil.c | 45 ++++----------------------------------
> 1 file changed, 4 insertions(+), 41 deletions(-)
>
> diff --git a/sound/soc/fsl/fsl_micfil.c b/sound/soc/fsl/fsl_micfil.c
> index 8335646a84d17..fd3b168a38661 100644
> --- a/sound/soc/fsl/fsl_micfil.c
> +++ b/sound/soc/fsl/fsl_micfil.c
> @@ -111,19 +111,6 @@ static const struct snd_kcontrol_new
> fsl_micfil_snd_controls[] = {
> snd_soc_get_enum_double, snd_soc_put_enum_double),
> };
>
> -static inline int get_clk_div(struct fsl_micfil *micfil,
> - unsigned int rate)
> -{
> - long mclk_rate;
> - int clk_div;
> -
> - mclk_rate = clk_get_rate(micfil->mclk);
> -
> - clk_div = mclk_rate / (rate * micfil->osr * 8);
> -
> - return clk_div;
> -}
> -
> /* The SRES is a self-negated bit which provides the CPU with the
> * capability to initialize the PDM Interface module through the
> * slave-bus interface. This bit always reads as zero, and this
> @@ -147,24 +134,6 @@ static int fsl_micfil_reset(struct device *dev)
> return 0;
> }
>
> -static int fsl_micfil_set_mclk_rate(struct fsl_micfil *micfil,
> - unsigned int freq)
> -{
> - struct device *dev = &micfil->pdev->dev;
> - int ret;
> -
> - clk_disable_unprepare(micfil->mclk);
> -
> - ret = clk_set_rate(micfil->mclk, freq * 1024);
> - if (ret)
> - dev_warn(dev, "failed to set rate (%u): %d\n",
> - freq * 1024, ret);
> -
> - clk_prepare_enable(micfil->mclk);
> -
> - return ret;
> -}
> -
> static int fsl_micfil_startup(struct snd_pcm_substream *substream,
> struct snd_soc_dai *dai)
> {
> @@ -238,13 +207,12 @@ static int fsl_micfil_trigger(struct
> snd_pcm_substream *substream, int cmd,
> static int fsl_set_clock_params(struct device *dev, unsigned int rate)
> {
> struct fsl_micfil *micfil = dev_get_drvdata(dev);
> - int clk_div;
> + int clk_div = 8;
> int ret;
>
> - ret = fsl_micfil_set_mclk_rate(micfil, rate);
> - if (ret < 0)
> - dev_err(dev, "failed to set mclk[%lu] to rate %u\n",
> - clk_get_rate(micfil->mclk), rate);
> + ret = clk_set_rate(micfil->mclk, rate * clk_div * micfil->osr *
> 8);
>
> Please make sure micfil->osr is assigned.
Should also be MICFIL_OSR_DEFAULT instead. The micfil->osr field sneaked
in during development and I decided against it finally.
Sascha
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
next prev parent reply other threads:[~2022-04-07 7:09 UTC|newest]
Thread overview: 74+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-05 7:59 [PATCH v3 00/20] ASoC: fsl_micfil: Driver updates Sascha Hauer
2022-04-05 7:59 ` Sascha Hauer
2022-04-05 7:59 ` [PATCH v3 01/20] ASoC: fsl_micfil: Drop unnecessary register read Sascha Hauer
2022-04-05 7:59 ` Sascha Hauer
2022-04-06 12:42 ` Shengjiu Wang
2022-04-05 7:59 ` [PATCH v3 02/20] ASoC: fsl_micfil: Drop unused " Sascha Hauer
2022-04-05 7:59 ` Sascha Hauer
2022-04-06 12:44 ` Shengjiu Wang
2022-04-05 7:59 ` [PATCH v3 03/20] ASoC: fsl_micfil: drop fsl_micfil_set_mclk_rate() Sascha Hauer
2022-04-05 7:59 ` Sascha Hauer
2022-04-06 13:01 ` Shengjiu Wang
2022-04-05 7:59 ` [PATCH v3 04/20] ASoC: fsl_micfil: do not define SHIFT/MASK for single bits Sascha Hauer
2022-04-05 7:59 ` Sascha Hauer
2022-04-06 13:05 ` Shengjiu Wang
2022-04-05 7:59 ` [PATCH v3 05/20] ASoC: fsl_micfil: use GENMASK to define register bit fields Sascha Hauer
2022-04-05 7:59 ` Sascha Hauer
2022-04-05 7:59 ` [PATCH v3 06/20] ASoC: fsl_micfil: use clear/set bits Sascha Hauer
2022-04-05 7:59 ` Sascha Hauer
2022-04-07 2:15 ` Shengjiu Wang
2022-04-05 7:59 ` [PATCH v3 07/20] ASoC: fsl_micfil: drop error messages from failed register accesses Sascha Hauer
2022-04-05 7:59 ` Sascha Hauer
2022-04-07 2:18 ` Shengjiu Wang
2022-04-05 7:59 ` [PATCH v3 08/20] ASoC: fsl_micfil: drop unused variables Sascha Hauer
2022-04-05 7:59 ` Sascha Hauer
2022-04-07 2:28 ` Shengjiu Wang
2022-04-05 7:59 ` [PATCH v3 09/20] dmaengine: imx: Move header to include/dma/ Sascha Hauer
2022-04-05 7:59 ` Sascha Hauer
2022-04-07 8:30 ` Vinod Koul
2022-04-07 8:30 ` Vinod Koul
2022-04-05 7:59 ` [PATCH v3 10/20] dmaengine: imx-sdma: error out on unsupported transfer types Sascha Hauer
2022-04-05 7:59 ` Sascha Hauer
2022-04-07 8:30 ` Vinod Koul
2022-04-07 8:30 ` Vinod Koul
2022-04-05 7:59 ` [PATCH v3 11/20] dmaengine: imx-sdma: Add multi fifo support Sascha Hauer
2022-04-05 7:59 ` Sascha Hauer
2022-04-07 2:23 ` [EXT] " Joy Zou
2022-04-07 7:27 ` Sascha Hauer
2022-04-07 7:27 ` Sascha Hauer
2022-04-07 8:31 ` Vinod Koul
2022-04-07 8:31 ` Vinod Koul
2022-04-05 7:59 ` [PATCH v3 12/20] ASoC: fsl_micfil: add " Sascha Hauer
2022-04-05 7:59 ` Sascha Hauer
2022-04-05 14:05 ` kernel test robot
2022-04-05 14:05 ` kernel test robot
2022-04-05 14:05 ` kernel test robot
2022-04-05 14:05 ` kernel test robot
2022-04-05 7:59 ` [PATCH v3 13/20] ASoC: fsl_micfil: use define for OSR default value Sascha Hauer
2022-04-05 7:59 ` Sascha Hauer
2022-04-07 2:46 ` Shengjiu Wang
2022-04-05 7:59 ` [PATCH v3 14/20] ASoC: fsl_micfil: Drop get_pdm_clk() Sascha Hauer
2022-04-05 7:59 ` Sascha Hauer
2022-04-07 3:41 ` Shengjiu Wang
2022-04-07 7:04 ` Sascha Hauer
2022-04-07 7:04 ` Sascha Hauer
2022-04-05 7:59 ` [PATCH v3 15/20] ASoC: fsl_micfil: simplify clock setting Sascha Hauer
2022-04-05 7:59 ` Sascha Hauer
2022-04-07 5:09 ` Shengjiu Wang
2022-04-07 7:08 ` Sascha Hauer [this message]
2022-04-07 7:08 ` Sascha Hauer
2022-04-05 7:59 ` [PATCH v3 16/20] ASoC: fsl_micfil: rework quality setting Sascha Hauer
2022-04-05 7:59 ` Sascha Hauer
2022-04-07 5:24 ` Shengjiu Wang
2022-04-05 7:59 ` [PATCH v3 17/20] ASoC: fsl_micfil: drop unused include Sascha Hauer
2022-04-05 7:59 ` Sascha Hauer
2022-04-07 5:26 ` Shengjiu Wang
2022-04-05 7:59 ` [PATCH v3 18/20] ASoC: fsl_micfil: drop only once used defines Sascha Hauer
2022-04-05 7:59 ` Sascha Hauer
2022-04-07 5:27 ` Shengjiu Wang
2022-04-05 7:59 ` [PATCH v3 19/20] ASoC: fsl_micfil: drop support for undocumented property Sascha Hauer
2022-04-05 7:59 ` Sascha Hauer
2022-04-07 5:30 ` Shengjiu Wang
2022-04-05 7:59 ` [PATCH v3 20/20] ASoC: fsl_micfil: fold fsl_set_clock_params() into its only user Sascha Hauer
2022-04-05 7:59 ` Sascha Hauer
2022-04-07 5:36 ` Shengjiu Wang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220407070851.GZ4012@pengutronix.de \
--to=s.hauer@pengutronix.de \
--cc=Xiubo.Lee@gmail.com \
--cc=alsa-devel@alsa-project.org \
--cc=dmaengine@vger.kernel.org \
--cc=festevam@gmail.com \
--cc=kernel@pengutronix.de \
--cc=linux-imx@nxp.com \
--cc=shengjiu.wang@gmail.com \
--cc=vkoul@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.