ASoC: rt5640: Add RL6231 class device shared support for RT5640, RT5645 and RT5651
[deliverable/linux.git] / sound / soc / codecs / rt5640.c
index ddefd5a476d04700d0b1f5f74d8c49608a7c83c9..d586228ae5b9a2acf0a8f9f3dcce5b9fe95424e4 100644 (file)
@@ -30,6 +30,7 @@
 #include <sound/initval.h>
 #include <sound/tlv.h>
 
+#include "rl6231.h"
 #include "rt5640.h"
 
 #define RT5640_DEVICE_ID 0x6231
@@ -452,30 +453,16 @@ static const struct snd_kcontrol_new rt5640_specific_snd_controls[] = {
  * @kcontrol: The kcontrol of this widget.
  * @event: Event id.
  *
- * Choose dmic clock between 1MHz and 3MHz.
- * It is better for clock to approximate 3MHz.
  */
 static int set_dmic_clk(struct snd_soc_dapm_widget *w,
        struct snd_kcontrol *kcontrol, int event)
 {
        struct snd_soc_codec *codec = w->codec;
        struct rt5640_priv *rt5640 = snd_soc_codec_get_drvdata(codec);
-       int div[] = {2, 3, 4, 6, 8, 12};
-       int idx = -EINVAL, i;
-       int rate, red, bound, temp;
-
-       rate = rt5640->sysclk;
-       red = 3000000 * 12;
-       for (i = 0; i < ARRAY_SIZE(div); i++) {
-               bound = div[i] * 3000000;
-               if (rate > bound)
-                       continue;
-               temp = bound - rate;
-               if (temp < red) {
-                       red = temp;
-                       idx = i;
-               }
-       }
+       int idx = -EINVAL;
+
+       idx = rl6231_calc_dmic_clk(rt5640->sysclk);
+
        if (idx < 0)
                dev_err(codec->dev, "Failed to set DMIC clock\n");
        else
This page took 0.027121 seconds and 5 git commands to generate.