Re: [PATCH] ASoC: Extend FLL function

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Dear all,
Please check up in the following comment, and I cut off original mail.

On 12/31/2015 5:14 PM, Anatol Pomozov wrote:
 /* freq_out must be 256*Fs in order to achieve the best performance */
@@ -970,6 +981,37 @@ static int nau8825_set_pll(struct snd_soc_codec *codec, int pll_id, int source,
        return 0;
 }

+static int nau8825_mclk_prepare(struct nau8825 *nau8825, unsigned int freq)
+{
+       int ret = 0;
+
+       /* We selected MCLK source but the clock itself managed externally */
+       if (!nau8825->mclk)
+               goto done;

A nitpick.

This "goto" style is used for recovering resources or something that
should be restored in case of error. But in your case "done:" does not
recover anything. It is cleaner remove "goto" and replace with "return
0" or "return err".

OK, I'll change it.
+
+       if (!nau8825->mclk_freq) {
+               ret = clk_prepare_enable(nau8825->mclk);
+               if (ret) {
+                       dev_err(nau8825->dev, "Unable to prepare codec mclk\n");
+                       goto done;
+               }
+       }
+
+       if (nau8825->mclk_freq != freq) {
+               nau8825->mclk_freq = freq;
+
+               freq = clk_round_rate(nau8825->mclk, freq);
+               ret = clk_set_rate(nau8825->mclk, freq);
+               if (ret) {
+                       dev_err(nau8825->dev, "Unable to set mclk rate\n");
+                       goto done;
+               }
+       }
+
+done:
+       return ret;
+}
+

                break;
        case NAU8825_CLK_INTERNAL:
@@ -1018,6 +1040,30 @@ static int nau8825_configure_sysclk(struct nau8825 *nau8825, int clk_id,
                }

                break;
+       case NAU8825_CLK_FLL_MCLK:
+               regmap_update_bits(regmap, NAU8825_REG_FLL3,
+                       NAU8825_FLL_CLK_SRC_MASK, NAU8825_FLL_CLK_SRC_MCLK);
+               ret = nau8825_mclk_prepare(nau8825, freq);
+               if (ret)
+                       return ret;
+
+               break;
+       case NAU8825_CLK_FLL_BLK:
+               regmap_update_bits(regmap, NAU8825_REG_FLL3,
+                       NAU8825_FLL_CLK_SRC_MASK, NAU8825_FLL_CLK_SRC_BLK);
+               ret = nau8825_mclk_prepare(nau8825, freq);


Based on names for these constants I believe CODEC is going to use
BCLK/FS signal of I2S bus as a clock signal reference.

Do you still need MCLK signal in this case? If no then you should
disable MCLK to save some power.

Yes, the MCLK should disable when FLL reference to BCLK/FS for power saving.
I'll disable it like internal clock case.


BR.
John
_______________________________________________
Alsa-devel mailing list
Alsa-devel@xxxxxxxxxxxxxxxx
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel



[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux