]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Merge remote-tracking branches 'asoc/topic/rl6231' and 'asoc/topic/rt5677' into asoc...
authorMark Brown <broonie@linaro.org>
Tue, 3 Jun 2014 09:39:55 +0000 (10:39 +0100)
committerMark Brown <broonie@linaro.org>
Tue, 3 Jun 2014 09:39:55 +0000 (10:39 +0100)
1  2  3 
sound/soc/codecs/Kconfig
sound/soc/codecs/Makefile
sound/soc/codecs/rt5640.c

diff --combined sound/soc/codecs/Kconfig
index f1ef578229a34455840ad7c5a45663d7096a262d,d224ef3bfb5ea7c3d51786a9f6e29b9936f5da1c,34422dc1e951d0d7443e40ddef3f2fbdae886618..cbfa1e18f65192afade5b31cccc77558b1dd050d
@@@@ -23,10 -23,6 -23,6 +23,10 @@@@ config SND_SOC_ALL_CODEC
        select SND_SOC_AD1980 if SND_SOC_AC97_BUS
        select SND_SOC_AD73311
        select SND_SOC_ADAU1373 if I2C
 ++     select SND_SOC_ADAU1761_I2C if I2C
 ++     select SND_SOC_ADAU1761_SPI if SPI
 ++     select SND_SOC_ADAU1781_I2C if I2C
 ++     select SND_SOC_ADAU1781_SPI if SPI
        select SND_SOC_ADAV801 if SPI_MASTER
        select SND_SOC_ADAV803 if I2C
        select SND_SOC_ADAU1977_SPI if SPI_MASTER
        select SND_SOC_ALC5623 if I2C
        select SND_SOC_ALC5632 if I2C
        select SND_SOC_CQ0093VC if MFD_DAVINCI_VOICECODEC
 --     select SND_SOC_CS42L51 if I2C
 --     select SND_SOC_CS42L52 if I2C
 ++     select SND_SOC_CS42L51_I2C if I2C
 ++     select SND_SOC_CS42L52 if I2C && INPUT
 ++     select SND_SOC_CS42L56 if I2C && INPUT
        select SND_SOC_CS42L73 if I2C
        select SND_SOC_CS4270 if I2C
        select SND_SOC_CS4271 if SND_SOC_I2C_AND_SPI
        select SND_SOC_RT5640 if I2C
        select SND_SOC_RT5645 if I2C
        select SND_SOC_RT5651 if I2C
++      select SND_SOC_RT5677 if I2C
        select SND_SOC_SGTL5000 if I2C
        select SND_SOC_SI476X if MFD_SI476X_CORE
        select SND_SOC_SIRF_AUDIO_CODEC
        select SND_SOC_SSM2602_SPI if SPI_MASTER
        select SND_SOC_SSM2602_I2C if I2C
        select SND_SOC_STA32X if I2C
 ++     select SND_SOC_STA350 if I2C
        select SND_SOC_STA529 if I2C
        select SND_SOC_STAC9766 if SND_SOC_AC97_BUS
        select SND_SOC_TAS5086 if I2C
        select SND_SOC_WM8955 if I2C
        select SND_SOC_WM8960 if I2C
        select SND_SOC_WM8961 if I2C
 --     select SND_SOC_WM8962 if I2C
 ++     select SND_SOC_WM8962 if I2C && INPUT
        select SND_SOC_WM8971 if I2C
        select SND_SOC_WM8974 if I2C
        select SND_SOC_WM8978 if I2C
@@@@ -218,45 -212,13 -213,13 +219,45 @@@@ config SND_SOC_AD198
   config SND_SOC_AD73311
        tristate
   
 ++config SND_SOC_ADAU1373
 ++     tristate
 ++
   config SND_SOC_ADAU1701
        tristate "Analog Devices ADAU1701 CODEC"
        depends on I2C
        select SND_SOC_SIGMADSP
   
 --config SND_SOC_ADAU1373
 ++config SND_SOC_ADAU17X1
 ++     tristate
 ++     select SND_SOC_SIGMADSP
 ++
 ++config SND_SOC_ADAU1761
 ++     tristate
 ++     select SND_SOC_ADAU17X1
 ++
 ++config SND_SOC_ADAU1761_I2C
 ++     tristate
 ++     select SND_SOC_ADAU1761
 ++     select REGMAP_I2C
 ++
 ++config SND_SOC_ADAU1761_SPI
 ++     tristate
 ++     select SND_SOC_ADAU1761
 ++     select REGMAP_SPI
 ++
 ++config SND_SOC_ADAU1781
 ++     select SND_SOC_ADAU17X1
 ++     tristate
 ++
 ++config SND_SOC_ADAU1781_I2C
 ++     tristate
 ++     select SND_SOC_ADAU1781
 ++     select REGMAP_I2C
 ++
 ++config SND_SOC_ADAU1781_SPI
        tristate
 ++     select SND_SOC_ADAU1781
 ++     select REGMAP_SPI
   
   config SND_SOC_ADAU1977
        tristate
@@@@ -309,8 -271,7 -272,7 +310,8 @@@@ config SND_SOC_AK538
        tristate "AKM AK5638 CODEC"
   
   config SND_SOC_ALC5623
 --       tristate
 ++       tristate "Realtek ALC5623 CODEC"
 ++     depends on I2C
   
   config SND_SOC_ALC5632
        tristate
@@@@ -321,17 -282,9 -283,9 +322,17 @@@@ config SND_SOC_CQ0093V
   config SND_SOC_CS42L51
        tristate
   
 ++config SND_SOC_CS42L51_I2C
 ++     tristate
 ++     select SND_SOC_CS42L51
 ++
   config SND_SOC_CS42L52
        tristate "Cirrus Logic CS42L52 CODEC"
 --     depends on I2C
 ++     depends on I2C && INPUT
 ++
 ++config SND_SOC_CS42L56
 ++     tristate "Cirrus Logic CS42L56 CODEC"
 ++     depends on I2C && INPUT
   
   config SND_SOC_CS42L73
        tristate "Cirrus Logic CS42L73 CODEC"
@@@@ -439,6 -392,15 -393,6 +440,15 @@@@ config SND_SOC_PCM512x_SP
        select SND_SOC_PCM512x
        select REGMAP_SPI
   
+ +config SND_SOC_RL6231
+ +     tristate
+ +     default y if SND_SOC_RT5640=y
+ +     default y if SND_SOC_RT5645=y
+ +     default y if SND_SOC_RT5651=y
+ +     default m if SND_SOC_RT5640=m
+ +     default m if SND_SOC_RT5645=m
+ +     default m if SND_SOC_RT5651=m
+ +
   config SND_SOC_RT5631
        tristate
   
@@@@ -451,6 -413,6 -405,9 +461,9 @@@@ config SND_SOC_RT564
   config SND_SOC_RT5651
        tristate
   
++ config SND_SOC_RT5677
++      tristate
++ 
   #Freescale sgtl5000 codec
   config SND_SOC_SGTL5000
        tristate "Freescale SGTL5000 CODEC"
@@@@ -490,10 -452,6 -447,6 +503,10 @@@@ config SND_SOC_SSM2602_I2
   config SND_SOC_STA32X
        tristate
   
 ++config SND_SOC_STA350
 ++     tristate "STA350 speaker amplifier"
 ++     depends on I2C
 ++
   config SND_SOC_STA529
        tristate
   
@@@@ -657,7 -615,7 -610,7 +670,7 @@@@ config SND_SOC_WM896
   
   config SND_SOC_WM8962
        tristate "Wolfson Microelectronics WM8962 CODEC"
 --     depends on I2C
 ++     depends on I2C && INPUT
   
   config SND_SOC_WM8971
        tristate
index bed0d984c97ce79a5bb9c7b989e58be650153590,c50165e97ebe41558388e3bbe9ac1c616203dadd,397f18f3a9f9a82befb968567c5fee017879f0b8..be3377b8d73fcddbe33bdf0e3a6e44a6d7b3d77b
@@@@ -7,15 -7,8 -7,8 +7,15 @@@@ snd-soc-ad193x-spi-objs := ad193x-spi.
   snd-soc-ad193x-i2c-objs := ad193x-i2c.o
   snd-soc-ad1980-objs := ad1980.o
   snd-soc-ad73311-objs := ad73311.o
 --snd-soc-adau1701-objs := adau1701.o
   snd-soc-adau1373-objs := adau1373.o
 ++snd-soc-adau1701-objs := adau1701.o
 ++snd-soc-adau17x1-objs := adau17x1.o
 ++snd-soc-adau1761-objs := adau1761.o
 ++snd-soc-adau1761-i2c-objs := adau1761-i2c.o
 ++snd-soc-adau1761-spi-objs := adau1761-spi.o
 ++snd-soc-adau1781-objs := adau1781.o
 ++snd-soc-adau1781-i2c-objs := adau1781-i2c.o
 ++snd-soc-adau1781-spi-objs := adau1781-spi.o
   snd-soc-adau1977-objs := adau1977.o
   snd-soc-adau1977-spi-objs := adau1977-spi.o
   snd-soc-adau1977-i2c-objs := adau1977-i2c.o
@@@@ -33,9 -26,7 -26,7 +33,9 @@@@ snd-soc-ak5386-objs := ak5386.
   snd-soc-arizona-objs := arizona.o
   snd-soc-cq93vc-objs := cq93vc.o
   snd-soc-cs42l51-objs := cs42l51.o
 ++snd-soc-cs42l51-i2c-objs := cs42l51-i2c.o
   snd-soc-cs42l52-objs := cs42l52.o
 ++snd-soc-cs42l56-objs := cs42l56.o
   snd-soc-cs42l73-objs := cs42l73.o
   snd-soc-cs4270-objs := cs4270.o
   snd-soc-cs4271-objs := cs4271.o
@@@@ -67,10 -58,11 -58,11 +67,12 @@@@ snd-soc-pcm3008-objs := pcm3008.
   snd-soc-pcm512x-objs := pcm512x.o
   snd-soc-pcm512x-i2c-objs := pcm512x-i2c.o
   snd-soc-pcm512x-spi-objs := pcm512x-spi.o
+ +snd-soc-rl6231-objs := rl6231.o
   snd-soc-rt5631-objs := rt5631.o
   snd-soc-rt5640-objs := rt5640.o
   snd-soc-rt5645-objs := rt5645.o
   snd-soc-rt5651-objs := rt5651.o
++ snd-soc-rt5677-objs := rt5677.o
   snd-soc-sgtl5000-objs := sgtl5000.o
   snd-soc-alc5623-objs := alc5623.o
   snd-soc-alc5632-objs := alc5632.o
@@@@ -85,7 -77,6 -77,6 +87,7 @@@@ snd-soc-ssm2602-objs := ssm2602.
   snd-soc-ssm2602-spi-objs := ssm2602-spi.o
   snd-soc-ssm2602-i2c-objs := ssm2602-i2c.o
   snd-soc-sta32x-objs := sta32x.o
 ++snd-soc-sta350-objs := sta350.o
   snd-soc-sta529-objs := sta529.o
   snd-soc-stac9766-objs := stac9766.o
   snd-soc-tas5086-objs := tas5086.o
@@@@ -169,17 -160,10 -160,10 +171,17 @@@@ obj-$(CONFIG_SND_SOC_AD193X_I2C)      += snd
   obj-$(CONFIG_SND_SOC_AD1980) += snd-soc-ad1980.o
   obj-$(CONFIG_SND_SOC_AD73311) += snd-soc-ad73311.o
   obj-$(CONFIG_SND_SOC_ADAU1373)       += snd-soc-adau1373.o
 ++obj-$(CONFIG_SND_SOC_ADAU1701)               += snd-soc-adau1701.o
 ++obj-$(CONFIG_SND_SOC_ADAU17X1)               += snd-soc-adau17x1.o
 ++obj-$(CONFIG_SND_SOC_ADAU1761)               += snd-soc-adau1761.o
 ++obj-$(CONFIG_SND_SOC_ADAU1761_I2C)   += snd-soc-adau1761-i2c.o
 ++obj-$(CONFIG_SND_SOC_ADAU1761_SPI)   += snd-soc-adau1761-spi.o
 ++obj-$(CONFIG_SND_SOC_ADAU1781)               += snd-soc-adau1781.o
 ++obj-$(CONFIG_SND_SOC_ADAU1781_I2C)   += snd-soc-adau1781-i2c.o
 ++obj-$(CONFIG_SND_SOC_ADAU1781_SPI)   += snd-soc-adau1781-spi.o
   obj-$(CONFIG_SND_SOC_ADAU1977)               += snd-soc-adau1977.o
   obj-$(CONFIG_SND_SOC_ADAU1977_SPI)   += snd-soc-adau1977-spi.o
   obj-$(CONFIG_SND_SOC_ADAU1977_I2C)   += snd-soc-adau1977-i2c.o
 --obj-$(CONFIG_SND_SOC_ADAU1701)  += snd-soc-adau1701.o
   obj-$(CONFIG_SND_SOC_ADAV80X)  += snd-soc-adav80x.o
   obj-$(CONFIG_SND_SOC_ADAV801)  += snd-soc-adav801.o
   obj-$(CONFIG_SND_SOC_ADAV803)  += snd-soc-adav803.o
@@@@ -196,9 -180,7 -180,7 +198,9 @@@@ obj-$(CONFIG_SND_SOC_ALC5632)     += snd-so
   obj-$(CONFIG_SND_SOC_ARIZONA)        += snd-soc-arizona.o
   obj-$(CONFIG_SND_SOC_CQ0093VC) += snd-soc-cq93vc.o
   obj-$(CONFIG_SND_SOC_CS42L51)        += snd-soc-cs42l51.o
 ++obj-$(CONFIG_SND_SOC_CS42L51_I2C)    += snd-soc-cs42l51-i2c.o
   obj-$(CONFIG_SND_SOC_CS42L52)        += snd-soc-cs42l52.o
 ++obj-$(CONFIG_SND_SOC_CS42L56)        += snd-soc-cs42l56.o
   obj-$(CONFIG_SND_SOC_CS42L73)        += snd-soc-cs42l73.o
   obj-$(CONFIG_SND_SOC_CS4270) += snd-soc-cs4270.o
   obj-$(CONFIG_SND_SOC_CS4271) += snd-soc-cs4271.o
@@@@ -230,10 -212,11 -212,11 +232,12 @@@@ obj-$(CONFIG_SND_SOC_PCM3008) += snd-so
   obj-$(CONFIG_SND_SOC_PCM512x)        += snd-soc-pcm512x.o
   obj-$(CONFIG_SND_SOC_PCM512x_I2C)    += snd-soc-pcm512x-i2c.o
   obj-$(CONFIG_SND_SOC_PCM512x_SPI)    += snd-soc-pcm512x-spi.o
+ +obj-$(CONFIG_SND_SOC_RL6231) += snd-soc-rl6231.o
   obj-$(CONFIG_SND_SOC_RT5631) += snd-soc-rt5631.o
   obj-$(CONFIG_SND_SOC_RT5640) += snd-soc-rt5640.o
   obj-$(CONFIG_SND_SOC_RT5645) += snd-soc-rt5645.o
   obj-$(CONFIG_SND_SOC_RT5651) += snd-soc-rt5651.o
++ obj-$(CONFIG_SND_SOC_RT5677) += snd-soc-rt5677.o
   obj-$(CONFIG_SND_SOC_SGTL5000)  += snd-soc-sgtl5000.o
   obj-$(CONFIG_SND_SOC_SIGMADSP)       += snd-soc-sigmadsp.o
   obj-$(CONFIG_SND_SOC_SI476X) += snd-soc-si476x.o
@@@@ -244,7 -227,6 -227,6 +248,7 @@@@ obj-$(CONFIG_SND_SOC_SSM2602)     += snd-so
   obj-$(CONFIG_SND_SOC_SSM2602_SPI)    += snd-soc-ssm2602-spi.o
   obj-$(CONFIG_SND_SOC_SSM2602_I2C)    += snd-soc-ssm2602-i2c.o
   obj-$(CONFIG_SND_SOC_STA32X)   += snd-soc-sta32x.o
 ++obj-$(CONFIG_SND_SOC_STA350)   += snd-soc-sta350.o
   obj-$(CONFIG_SND_SOC_STA529)   += snd-soc-sta529.o
   obj-$(CONFIG_SND_SOC_STAC9766)       += snd-soc-stac9766.o
   obj-$(CONFIG_SND_SOC_TAS5086)        += snd-soc-tas5086.o
index 9e0d48f989271b1c5d8702a57479eeaebda2ab4c,3a09e86082aaa70edcba2c5cbe440372b661e3bc,ddefd5a476d04700d0b1f5f74d8c49608a7c83c9..de80e89b5fd8899d35c6de2b2f20c579cebd9de9
   #include <linux/gpio.h>
   #include <linux/i2c.h>
   #include <linux/regmap.h>
 ++#include <linux/of.h>
   #include <linux/of_gpio.h>
   #include <linux/platform_device.h>
   #include <linux/spi/spi.h>
   #include <sound/initval.h>
   #include <sound/tlv.h>
   
+ +#include "rl6231.h"
   #include "rt5640.h"
   
   #define RT5640_DEVICE_ID 0x6231
@@@@ -453,30 -453,16 -452,30 +454,16 @@@@ static const struct snd_kcontrol_new rt
    * @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
@@@@ -874,7 -860,7 -873,7 +861,7 @@@@ static SOC_VALUE_ENUM_SINGLE_DECL(rt564
                                  0x3, rt5640_dac_l2_src, rt5640_dac_l2_values);
   
   static const struct snd_kcontrol_new rt5640_dac_l2_mux =
 --     SOC_DAPM_VALUE_ENUM("DAC2 left channel source", rt5640_dac_l2_enum);
 ++     SOC_DAPM_ENUM("DAC2 left channel source", rt5640_dac_l2_enum);
   
   static const char * const rt5640_dac_r2_src[] = {
        "IF2",
@@@@ -909,7 -895,7 -908,7 +896,7 @@@@ static SOC_VALUE_ENUM_SINGLE_DECL(rt564
                                  rt5640_dai_iis_map_values);
   
   static const struct snd_kcontrol_new rt5640_dai_mux =
 --     SOC_DAPM_VALUE_ENUM("DAI select", rt5640_dai_iis_map_enum);
 ++     SOC_DAPM_ENUM("DAI select", rt5640_dai_iis_map_enum);
   
   /* SDI select */
   static const char * const rt5640_sdi_sel[] = {
@@@@ -1639,21 -1625,6 -1638,21 +1626,6 @@@@ static int get_sdp_info(struct snd_soc_
        return ret;
   }
   
- -static int get_clk_info(int sclk, int rate)
- -{
- -     int i, pd[] = {1, 2, 3, 4, 6, 8, 12, 16};
- -
- -     if (sclk <= 0 || rate <= 0)
- -             return -EINVAL;
- -
- -     rate = rate << 8;
- -     for (i = 0; i < ARRAY_SIZE(pd); i++)
- -             if (sclk == rate * pd[i])
- -                     return i;
- -
- -     return -EINVAL;
- -}
- -
   static int rt5640_hw_params(struct snd_pcm_substream *substream,
        struct snd_pcm_hw_params *params, struct snd_soc_dai *dai)
   {
        int dai_sel, pre_div, bclk_ms, frame_size;
   
        rt5640->lrck[dai->id] = params_rate(params);
- -     pre_div = get_clk_info(rt5640->sysclk, rt5640->lrck[dai->id]);
+ +     pre_div = rl6231_get_clk_info(rt5640->sysclk, rt5640->lrck[dai->id]);
        if (pre_div < 0) {
                dev_err(codec->dev, "Unsupported clock setting %d for DAI %d\n",
                        rt5640->lrck[dai->id], dai->id);
@@@@ -1820,65 -1791,12 -1819,65 +1792,12 @@@@ static int rt5640_set_dai_sysclk(struc
        return 0;
   }
   
- -/**
- - * rt5640_pll_calc - Calculate PLL M/N/K code.
- - * @freq_in: external clock provided to codec.
- - * @freq_out: target clock which codec works on.
- - * @pll_code: Pointer to structure with M, N, K and bypass flag.
- - *
- - * Calculate M/N/K code to configure PLL for codec. And K is assigned to 2
- - * which make calculation more efficiently.
- - *
- - * Returns 0 for success or negative error code.
- - */
- -static int rt5640_pll_calc(const unsigned int freq_in,
- -     const unsigned int freq_out, struct rt5640_pll_code *pll_code)
- -{
- -     int max_n = RT5640_PLL_N_MAX, max_m = RT5640_PLL_M_MAX;
- -     int n = 0, m = 0, red, n_t, m_t, in_t, out_t;
- -     int red_t = abs(freq_out - freq_in);
- -     bool bypass = false;
- -
- -     if (RT5640_PLL_INP_MAX < freq_in || RT5640_PLL_INP_MIN > freq_in)
- -             return -EINVAL;
- -
- -     for (n_t = 0; n_t <= max_n; n_t++) {
- -             in_t = (freq_in >> 1) + (freq_in >> 2) * n_t;
- -             if (in_t < 0)
- -                     continue;
- -             if (in_t == freq_out) {
- -                     bypass = true;
- -                     n = n_t;
- -                     goto code_find;
- -             }
- -             for (m_t = 0; m_t <= max_m; m_t++) {
- -                     out_t = in_t / (m_t + 2);
- -                     red = abs(out_t - freq_out);
- -                     if (red < red_t) {
- -                             n = n_t;
- -                             m = m_t;
- -                             if (red == 0)
- -                                     goto code_find;
- -                             red_t = red;
- -                     }
- -             }
- -     }
- -     pr_debug("Only get approximation about PLL\n");
- -
- -code_find:
- -     pll_code->m_bp = bypass;
- -     pll_code->m_code = m;
- -     pll_code->n_code = n;
- -     pll_code->k_code = 2;
- -     return 0;
- -}
- -
   static int rt5640_set_dai_pll(struct snd_soc_dai *dai, int pll_id, int source,
                        unsigned int freq_in, unsigned int freq_out)
   {
        struct snd_soc_codec *codec = dai->codec;
        struct rt5640_priv *rt5640 = snd_soc_codec_get_drvdata(codec);
- -     struct rt5640_pll_code *pll_code = &rt5640->pll_code;
+ +     struct rl6231_pll_code pll_code;
        int ret, dai_sel;
   
        if (source == rt5640->pll_src && freq_in == rt5640->pll_in &&
                return -EINVAL;
        }
   
- -     ret = rt5640_pll_calc(freq_in, freq_out, pll_code);
+ +     ret = rl6231_pll_calc(freq_in, freq_out, &pll_code);
        if (ret < 0) {
                dev_err(codec->dev, "Unsupport input clock %d\n", freq_in);
                return ret;
        }
   
- -     dev_dbg(codec->dev, "bypass=%d m=%d n=%d k=2\n", pll_code->m_bp,
- -             (pll_code->m_bp ? 0 : pll_code->m_code), pll_code->n_code);
+ +     dev_dbg(codec->dev, "bypass=%d m=%d n=%d k=%d\n",
+ +             pll_code.m_bp, (pll_code.m_bp ? 0 : pll_code.m_code),
+ +             pll_code.n_code, pll_code.k_code);
   
        snd_soc_write(codec, RT5640_PLL_CTRL1,
- -             pll_code->n_code << RT5640_PLL_N_SFT | pll_code->k_code);
+ +             pll_code.n_code << RT5640_PLL_N_SFT | pll_code.k_code);
        snd_soc_write(codec, RT5640_PLL_CTRL2,
- -             (pll_code->m_bp ? 0 : pll_code->m_code) << RT5640_PLL_M_SFT |
- -             pll_code->m_bp << RT5640_PLL_M_BP_SFT);
+ +             (pll_code.m_bp ? 0 : pll_code.m_code) << RT5640_PLL_M_SFT |
+ +             pll_code.m_bp << RT5640_PLL_M_BP_SFT);
   
        rt5640->pll_in = freq_in;
        rt5640->pll_out = freq_out;