Thread (5 messages) 5 messages, 4 authors, 2020-06-30

Re: [PATCH] ASoC: fsl_asrc: Add an option to select internal ratio mode

From: Shengjiu Wang <shengjiu.wang@gmail.com>
Date: 2020-06-30 13:31:11
Also in: alsa-devel, lkml

On Tue, Jun 30, 2020 at 8:38 PM Fabio Estevam [off-list ref] wrote:
Hi Shengjiu,

On Mon, Jun 29, 2020 at 11:10 AM Shengjiu Wang [off-list ref] wrote:
quoted
+/**
"/**" notation may confuse 'make htmldocs". Since this is a single
line comment you could do:

/* Select proper clock source for internal ratio mode */

quoted
+ * Select proper clock source for internal ratio mode
+ */
+static int fsl_asrc_select_clk(struct fsl_asrc_priv *asrc_priv,
+                              struct fsl_asrc_pair *pair,
+                              int in_rate,
+                              int out_rate)
+{
+       struct fsl_asrc_pair_priv *pair_priv = pair->private;
+       struct asrc_config *config = pair_priv->config;
+       int rate[2], select_clk[2]; /* Array size 2 means IN and OUT */
+       int clk_rate, clk_index;
+       int i = 0, j = 0;
+       bool clk_sel[2];
+
+       rate[0] = in_rate;
+       rate[1] = out_rate;
+
+       /* Select proper clock source for internal ratio mode */
+       for (j = 0; j < 2; j++) {
+               for (i = 0; i < ASRC_CLK_MAP_LEN; i++) {
+                       clk_index = asrc_priv->clk_map[j][i];
+                       clk_rate = clk_get_rate(asrc_priv->asrck_clk[clk_index]);
+                       if (clk_rate != 0 && (clk_rate / rate[j]) <= 1024 &&
+                           (clk_rate % rate[j]) == 0)
+                               break;
+               }
+
+               if (i == ASRC_CLK_MAP_LEN) {
+                       select_clk[j] = OUTCLK_ASRCK1_CLK;
+                       clk_sel[j] = false;
+               } else {
+                       select_clk[j] = i;
+                       clk_sel[j] = true;
+               }
+       }
+
+       /* Switch to ideal ratio mode if there is no proper clock source */
+       if (!clk_sel[IN] || !clk_sel[OUT])
+               select_clk[IN] = INCLK_NONE;
+
+       config->inclk = select_clk[IN];
+       config->outclk = select_clk[OUT];
+
+       return 0;
This new function always returns 0. Should it be converted to 'void'
type instead?
quoted
+       ret = fsl_asrc_select_clk(asrc_priv, pair,
+                                 config.input_sample_rate,
+                                 config.output_sample_rate);
+       if (ret) {
+               dev_err(dai->dev, "fail to select clock\n");
fsl_asrc_select_clk() does not return error, so you could skip the
error checking.
ok, will update the patch

best regards
wang shengjiu
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help