Message ID | 20220405075959.2744803-15-s.hauer@pengutronix.de (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | ASoC: fsl_micfil: Driver updates | expand |
On Tue, Apr 5, 2022 at 4:00 PM Sascha Hauer <s.hauer@pengutronix.de> wrote: > get_pdm_clk() calculates the PDM clock based on the quality setting, > but really the PDM clock is independent of the quality, it's always > rate * 4 * micfil->osr. Just drop the function and do the calculation > in the caller. > > Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> > --- > sound/soc/fsl/fsl_micfil.c | 38 +------------------------------------- > 1 file changed, 1 insertion(+), 37 deletions(-) > > diff --git a/sound/soc/fsl/fsl_micfil.c b/sound/soc/fsl/fsl_micfil.c > index 4b4b7fbbf5c4f..8335646a84d17 100644 > --- a/sound/soc/fsl/fsl_micfil.c > +++ b/sound/soc/fsl/fsl_micfil.c > @@ -111,42 +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_pdm_clk(struct fsl_micfil *micfil, > - unsigned int rate) > -{ > - u32 ctrl2_reg; > - int qsel; > - int bclk; > - int osr = MICFIL_OSR_DEFAULT; > - > - regmap_read(micfil->regmap, REG_MICFIL_CTRL2, &ctrl2_reg); > - qsel = FIELD_GET(MICFIL_CTRL2_QSEL, ctrl2_reg); > - > - switch (qsel) { > - case MICFIL_QSEL_HIGH_QUALITY: > - bclk = rate * 8 * osr / 2; /* kfactor = 0.5 */ > - break; > - case MICFIL_QSEL_MEDIUM_QUALITY: > - case MICFIL_QSEL_VLOW0_QUALITY: > - bclk = rate * 4 * osr * 1; /* kfactor = 1 */ > - break; > - case MICFIL_QSEL_LOW_QUALITY: > - case MICFIL_QSEL_VLOW1_QUALITY: > - bclk = rate * 2 * osr * 2; /* kfactor = 2 */ > - break; > - case MICFIL_QSEL_VLOW2_QUALITY: > - bclk = rate * osr * 4; /* kfactor = 4 */ > - break; > - default: > - dev_err(&micfil->pdev->dev, > - "Please make sure you select a valid quality.\n"); > - bclk = -1; > - break; > - } > - > - return bclk; > -} > - > static inline int get_clk_div(struct fsl_micfil *micfil, > unsigned int rate) > { > @@ -155,7 +119,7 @@ static inline int get_clk_div(struct fsl_micfil > *micfil, > > mclk_rate = clk_get_rate(micfil->mclk); > > - clk_div = mclk_rate / (get_pdm_clk(micfil, rate) * 2); > + clk_div = mclk_rate / (rate * micfil->osr * 8); > Where is micfil->osr assigned a value? > > return clk_div; > } > -- > 2.30.2 > >
On Thu, Apr 07, 2022 at 11:41:52AM +0800, Shengjiu Wang wrote: > On Tue, Apr 5, 2022 at 4:00 PM Sascha Hauer <[1]s.hauer@pengutronix.de> > wrote: > > get_pdm_clk() calculates the PDM clock based on the quality setting, > but really the PDM clock is independent of the quality, it's always > rate * 4 * micfil->osr. Just drop the function and do the calculation > in the caller. > > Signed-off-by: Sascha Hauer <[2]s.hauer@pengutronix.de> > --- > sound/soc/fsl/fsl_micfil.c | 38 +------------------------------------- > 1 file changed, 1 insertion(+), 37 deletions(-) > > diff --git a/sound/soc/fsl/fsl_micfil.c b/sound/soc/fsl/fsl_micfil.c > index 4b4b7fbbf5c4f..8335646a84d17 100644 > --- a/sound/soc/fsl/fsl_micfil.c > +++ b/sound/soc/fsl/fsl_micfil.c > @@ -111,42 +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_pdm_clk(struct fsl_micfil *micfil, > - unsigned int rate) > -{ > - u32 ctrl2_reg; > - int qsel; > - int bclk; > - int osr = MICFIL_OSR_DEFAULT; > - > - regmap_read(micfil->regmap, REG_MICFIL_CTRL2, &ctrl2_reg); > - qsel = FIELD_GET(MICFIL_CTRL2_QSEL, ctrl2_reg); > - > - switch (qsel) { > - case MICFIL_QSEL_HIGH_QUALITY: > - bclk = rate * 8 * osr / 2; /* kfactor = 0.5 */ > - break; > - case MICFIL_QSEL_MEDIUM_QUALITY: > - case MICFIL_QSEL_VLOW0_QUALITY: > - bclk = rate * 4 * osr * 1; /* kfactor = 1 */ > - break; > - case MICFIL_QSEL_LOW_QUALITY: > - case MICFIL_QSEL_VLOW1_QUALITY: > - bclk = rate * 2 * osr * 2; /* kfactor = 2 */ > - break; > - case MICFIL_QSEL_VLOW2_QUALITY: > - bclk = rate * osr * 4; /* kfactor = 4 */ > - break; > - default: > - dev_err(&micfil->pdev->dev, > - "Please make sure you select a valid > quality.\n"); > - bclk = -1; > - break; > - } > - > - return bclk; > -} > - > static inline int get_clk_div(struct fsl_micfil *micfil, > unsigned int rate) > { > @@ -155,7 +119,7 @@ static inline int get_clk_div(struct fsl_micfil > *micfil, > > mclk_rate = clk_get_rate(micfil->mclk); > > - clk_div = mclk_rate / (get_pdm_clk(micfil, rate) * 2); > + clk_div = mclk_rate / (rate * micfil->osr * 8); > > Where is micfil->osr assigned a value? Should be MICFIL_OSR_DEFAULT instead. Sascha
diff --git a/sound/soc/fsl/fsl_micfil.c b/sound/soc/fsl/fsl_micfil.c index 4b4b7fbbf5c4f..8335646a84d17 100644 --- a/sound/soc/fsl/fsl_micfil.c +++ b/sound/soc/fsl/fsl_micfil.c @@ -111,42 +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_pdm_clk(struct fsl_micfil *micfil, - unsigned int rate) -{ - u32 ctrl2_reg; - int qsel; - int bclk; - int osr = MICFIL_OSR_DEFAULT; - - regmap_read(micfil->regmap, REG_MICFIL_CTRL2, &ctrl2_reg); - qsel = FIELD_GET(MICFIL_CTRL2_QSEL, ctrl2_reg); - - switch (qsel) { - case MICFIL_QSEL_HIGH_QUALITY: - bclk = rate * 8 * osr / 2; /* kfactor = 0.5 */ - break; - case MICFIL_QSEL_MEDIUM_QUALITY: - case MICFIL_QSEL_VLOW0_QUALITY: - bclk = rate * 4 * osr * 1; /* kfactor = 1 */ - break; - case MICFIL_QSEL_LOW_QUALITY: - case MICFIL_QSEL_VLOW1_QUALITY: - bclk = rate * 2 * osr * 2; /* kfactor = 2 */ - break; - case MICFIL_QSEL_VLOW2_QUALITY: - bclk = rate * osr * 4; /* kfactor = 4 */ - break; - default: - dev_err(&micfil->pdev->dev, - "Please make sure you select a valid quality.\n"); - bclk = -1; - break; - } - - return bclk; -} - static inline int get_clk_div(struct fsl_micfil *micfil, unsigned int rate) { @@ -155,7 +119,7 @@ static inline int get_clk_div(struct fsl_micfil *micfil, mclk_rate = clk_get_rate(micfil->mclk); - clk_div = mclk_rate / (get_pdm_clk(micfil, rate) * 2); + clk_div = mclk_rate / (rate * micfil->osr * 8); return clk_div; }
get_pdm_clk() calculates the PDM clock based on the quality setting, but really the PDM clock is independent of the quality, it's always rate * 4 * micfil->osr. Just drop the function and do the calculation in the caller. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> --- sound/soc/fsl/fsl_micfil.c | 38 +------------------------------------- 1 file changed, 1 insertion(+), 37 deletions(-)