在wm8994中修改蓝牙通话配置和耳机通话配置,修改蓝牙通话音量
authorChenJQ <chenjq@rock-chips.com>
Tue, 28 Sep 2010 02:20:41 +0000 (19:20 -0700)
committerChenJQ <chenjq@rock-chips.com>
Tue, 28 Sep 2010 02:20:41 +0000 (19:20 -0700)
arch/arm/configs/rk2818_raho_defconfig
sound/soc/codecs/wm8994.c

index 875b00585e15ae20cbe0907255c0af44b9833138..4c5d11cf9bb1a1d3915ba671c06624b4025c6a9d 100755 (executable)
@@ -1126,9 +1126,9 @@ CONFIG_WM8994_SPEAKER_NORMAL_VOL=15
 CONFIG_WM8994_HEADSET_INCALL_VOL=-9
 CONFIG_WM8994_HEADSET_INCALL_MIC_VOL=-6
 CONFIG_WM8994_HEADSET_NORMAL_VOL=15
-CONFIG_WM8994_BT_INCALL_VOL=15
-CONFIG_WM8994_BT_INCALL_MIC_VOL=15
-CONFIG_WM8994_RECORDER_VOL=-16
+CONFIG_WM8994_BT_INCALL_VOL=30
+CONFIG_WM8994_BT_INCALL_MIC_VOL=-30
+CONFIG_WM8994_RECORDER_VOL=20
 CONFIG_SND_CODEC_SOC_MASTER=y
 # CONFIG_SND_CODEC_SOC_SLAVE is not set
 CONFIG_SND_SOC_I2C_AND_SPI=y
index 1d5870fc0abdcc0143cde3a6532e93058ed79acb..11b2d4aea71ea5dbb628239f629bf0458b53d32b 100755 (executable)
@@ -681,20 +681,6 @@ void handsetMIC_to_baseband_to_headset(void)
        wm8994_write(0x28,  0x0030);  //IN1LN_TO_IN1L IN1LP_TO_IN1L
        wm8994_set_volume(wm8994_current_mode,call_vol,call_maxvol);
 
-#ifdef CONFIG_SND_BB_NORMAL_INPUT
-       wm8994_write(0x2D,  0x0003);  //bit 1 IN2LP_TO_MIXOUTL bit 12 DAC1L_TO_HPOUT1L  0x0102 
-       wm8994_write(0x2E,  0x0003);  //bit 1 IN2RP_TO_MIXOUTR bit 12 DAC1R_TO_HPOUT1R  0x0102
-#endif
-#ifdef CONFIG_SND_BB_DIFFERENTIAL_INPUT
-       vol=CONFIG_WM8994_HEADSET_INCALL_VOL;
-       if(vol>6)vol=6;
-       if(vol<-12)vol=-12;
-       wm8994_write(0x2B,  (vol+12)/3+1);  //-12~6dB
-       wm8994_write(0x02,  0x6240);
-       wm8994_write(0x2D,  0x0041);  //bit 1 MIXINL_TO_MIXOUTL bit 12 DAC1L_TO_HPOUT1L  0x0102 
-       wm8994_write(0x2E,  0x0081);  //bit 1 MIXINL_TO_MIXOUTR bit 12 DAC1R_TO_HPOUT1R  0x0102
-#endif
-
        wm8994_write(0x34,  0x0002);  //IN1L_TO_LINEOUT1P
        wm8994_write(0x36,  0x0003);
 
@@ -709,6 +695,19 @@ void handsetMIC_to_baseband_to_headset(void)
        wm8994_write(0x03,  0x3030);
        wm8994_write(0x04,  0x0300); // AIF1ADC1L_ENA=1, AIF1ADC1R_ENA=1
        wm8994_write(0x05,  0x0303);
+#ifdef CONFIG_SND_BB_NORMAL_INPUT
+       wm8994_write(0x2D,  0x0003);  //bit 1 IN2LP_TO_MIXOUTL bit 12 DAC1L_TO_HPOUT1L  0x0102 
+       wm8994_write(0x2E,  0x0003);  //bit 1 IN2RP_TO_MIXOUTR bit 12 DAC1R_TO_HPOUT1R  0x0102
+#endif
+#ifdef CONFIG_SND_BB_DIFFERENTIAL_INPUT
+       vol=CONFIG_WM8994_HEADSET_INCALL_VOL;
+       if(vol>6)vol=6;
+       if(vol<-12)vol=-12;
+       wm8994_write(0x2B,  (vol+12)/3+1);  //-12~6dB
+       wm8994_write(0x02,  0x6240);
+       wm8994_write(0x2D,  0x0041);  //bit 1 MIXINL_TO_MIXOUTL bit 12 DAC1L_TO_HPOUT1L  0x0102 
+       wm8994_write(0x2E,  0x0081);  //bit 1 MIXINL_TO_MIXOUTR bit 12 DAC1R_TO_HPOUT1R  0x0102
+#endif
        wm8994_write(0x208, 0x000A);
        wm8994_write(0x224, 0x0CC0);
        wm8994_write(0x420, 0x0000);
@@ -1128,14 +1127,10 @@ void BT_baseband(void)
        wm8994_write(0x04, 0x3303);
        wm8994_write(0x05, 0x3002);
        wm8994_write(0x06, 0x000A);
+       wm8994_set_volume(wm8994_current_mode,call_vol,call_maxvol);
        wm8994_write(0x1E, 0x0006);
-#ifdef CONFIG_SND_BB_NORMAL_INPUT
-       wm8994_write(0x28, 0x00C0);
-#endif
-#ifdef CONFIG_SND_BB_DIFFERENTIAL_INPUT
-       wm8994_write(0x28, 0x00CC);
-#endif
        wm8994_write(0x29, 0x0100);
+       wm8994_write(0x2A, 0x0100);
        vol=CONFIG_WM8994_BT_INCALL_MIC_VOL;
        if(vol>6)vol=6;
        if(vol<-57)vol=-57;
@@ -1144,9 +1139,17 @@ void BT_baseband(void)
        vol=CONFIG_WM8994_BT_INCALL_VOL;
        if(vol>30)vol=30;
        if(vol<0)vol=0;
-       if(vol>30)wm8994_write(0x29, 0x0130);
-       wm8994_set_volume(wm8994_current_mode,call_vol,call_maxvol);
-       wm8994_write(0x2A, 0x0100);
+       if(vol==30){
+               wm8994_write(0x29, 0x0130);
+               wm8994_write(0x2A, 0x0130);
+       }
+
+#ifdef CONFIG_SND_BB_NORMAL_INPUT
+       wm8994_write(0x28, 0x00C0);
+#endif
+#ifdef CONFIG_SND_BB_DIFFERENTIAL_INPUT
+       wm8994_write(0x28, 0x00CC);
+#endif
        wm8994_write(0x2D, 0x0001);
        wm8994_write(0x34, 0x0001);
        wm8994_write(0x200, 0x0001);
@@ -1159,11 +1162,19 @@ void BT_baseband(void)
        wm8994_write(0x221, 0x2F00);    // SMbus_16inx_16dat     Write  0x34      * FLL1 Control (2)(221H):  0700  FLL1_OUTDIV=2Fh, FLL1_CTRL_RATE=000, FLL1_FRATIO=000
        wm8994_write(0x222, 0x3126);    // SMbus_16inx_16dat     Write  0x34      * FLL1 Control (3)(222H):  8FD5  FLL1_K=3126h
        wm8994_write(0x223, 0x0100);    // SMbus_16inx_16dat     Write  0x34      * FLL1 Control (4)(223H):  00E0  FLL1_N=8h, FLL1_GAIN=0000
-       wm8994_write(0x303, 0x0090);
        wm8994_write(0x310, 0xC118);  //DSP/PCM; 16bits; ADC L channel = R channel;MODE A
+#ifdef CONFIG_SND_CODEC_SOC_MASTER
+       wm8994_write(0x700, 0xA101);  
+       wm8994_write(0x705, 0xA101);  
+       wm8994_write(0x303, 0x0090);
        wm8994_write(0x313, 0x0020);    // SMbus_16inx_16dat     Write  0x34      * AIF2 BCLK DIV--------AIF1CLK/2
        wm8994_write(0x314, 0x0080);    // SMbus_16inx_16dat     Write  0x34      * AIF2 ADCLRCK DIV-----BCLK/128
        wm8994_write(0x315, 0x0080);    // SMbus_16inx_16dat     Write  0x34      * AIF2 DACLRCK DIV-----BCLK/128
+       wm8994_write(0x302, 0x4000);
+msleep(50);
+       wm8994_write(0x312, 0x4000);    // SMbus_16inx_16dat     Write  0x34      * AIF2 Master/Slave(312H): 7000  AIF2_TRI=0, AIF2_MSTR=1, AIF2_CLK_FRC=0, AIF2_LRCLK_FRC=0
+msleep(50);
+#endif
        wm8994_write(0x210, 0x0003);    // SMbus_16inx_16dat     Write  0x34      * SR=8KHz
        wm8994_write(0x220, 0x0004);    // SMbus_16inx_16dat     Write  0x34      * FLL1 Control (1)(220H):  0005  FLL1_FRACN_ENA=1, FLL1_OSC_ENA=0, FLL1_ENA=0
        msleep(50);
@@ -1171,14 +1182,22 @@ void BT_baseband(void)
        wm8994_write(0x200, 0x0011);
        wm8994_write(0x204, 0x0011);    // SMbus_16inx_16dat     Write  0x34      * AIF2 Clocking (1)(204H): 0011  AIF2CLK_SRC=10, AIF2CLK_INV=0, AIF2CLK_DIV=0, AIF2CLK_ENA=1
 
+       wm8994_write(0x440, 0x0018);
+       wm8994_write(0x450, 0x0018);
+       wm8994_write(0x480, 0x0000);
+       wm8994_write(0x481, 0x0000);
+       wm8994_write(0x4A0, 0x0000);
+       wm8994_write(0x4A1, 0x0000);
        wm8994_write(0x520, 0x0000);
-
+       wm8994_write(0x540, 0x0018);
+       wm8994_write(0x580, 0x0000);
+       wm8994_write(0x581, 0x0000);
        wm8994_write(0x601, 0x0004);
        wm8994_write(0x603, 0x000C);
        wm8994_write(0x604, 0x0010);
        wm8994_write(0x605, 0x0010);
-       wm8994_write(0x606, 0x0003);
-       wm8994_write(0x607, 0x0003);
+       //wm8994_write(0x606, 0x0003);
+       //wm8994_write(0x607, 0x0003);
        wm8994_write(0x610, 0x01C0);
        wm8994_write(0x612, 0x01C0);
        wm8994_write(0x613, 0x01C0);
@@ -1187,29 +1206,14 @@ void BT_baseband(void)
        //roger_chen@20100519
        //enable AIF2 BCLK,LRCK
        //Rev.B and Rev.D is different
-       wm8994_write(0x700, 0xA101);
+       wm8994_write(0x702, 0xA100);    
+       wm8994_write(0x703, 0xA100);
+
        wm8994_write(0x704, 0xA100);
        wm8994_write(0x707, 0xA100);
        wm8994_write(0x708, 0x2100);
        wm8994_write(0x709, 0x2100);
        wm8994_write(0x70A, 0x2100);
-       msleep(10);
-       wm8994_write(0x702, 0xA100);
-       wm8994_write(0x703, 0xA100); 
-
-       wm8994_write(0x603, 0x018C);
-       wm8994_write(0x605, 0x0020);
-
-#ifdef CONFIG_SND_CODEC_SOC_MASTER
-       wm8994_write(0x302, 0x3000); // AIF1_MSTR=1
-       msleep(10);
-       wm8994_write(0x302, 0x7000); // AIF1_MSTR=1
-       msleep(10);
-       wm8994_write(0x312, 0x3000); // AIF1_MSTR=1
-       msleep(10);
-       wm8994_write(0x312, 0x7000); // AIF1_MSTR=1
-       msleep(10);
-#endif
 }
 
 void BT_baseband_and_record(void)
@@ -2054,7 +2058,7 @@ void wm8994_set_volume(unsigned char wm8994_mode,unsigned char volume,unsigned c
                //HPOUT1L_VOL bit 0~5 /-57dB to +6dB in 1dB steps
                wm8994_write(0x001C, (lvol&~0x003f)|headset_vol_table[volume]); 
                //HPOUT1R_VOL bit 0~5 /-57dB to +6dB in 1dB steps
-               wm8994_write(0x001D, (lvol&~0x003f)|headset_vol_table[volume]); 
+               wm8994_write(0x001D, (rvol&~0x003f)|headset_vol_table[volume]); 
        }
        else if(wm8994_mode==wm8994_mainMIC_to_baseband_to_speakers_and_record||
        wm8994_mode==wm8994_mainMIC_to_baseband_to_speakers||
@@ -2065,7 +2069,7 @@ void wm8994_set_volume(unsigned char wm8994_mode,unsigned char volume,unsigned c
                //SPKOUTL_VOL bit 0~5 /-57dB to +6dB in 1dB steps
                wm8994_write(0x0026, (lvol&~0x003f)|speakers_vol_table[volume]);
                //SPKOUTR_VOL bit 0~5 /-57dB to +6dB in 1dB steps
-               wm8994_write(0x0027, (lvol&~0x003f)|speakers_vol_table[volume]);
+               wm8994_write(0x0027, (rvol&~0x003f)|speakers_vol_table[volume]);
        }
        else if(wm8994_mode==wm8994_mainMIC_to_baseband_to_earpiece||
        wm8994_mode==wm8994_mainMIC_to_baseband_to_earpiece_and_record)
@@ -2076,7 +2080,7 @@ void wm8994_set_volume(unsigned char wm8994_mode,unsigned char volume,unsigned c
                //MIXOUTL_VOL bit 0~5 /-57dB to +6dB in 1dB steps
                wm8994_write(0x0020, (lvol&~0x003f)|earpiece_vol_table[volume]);
                //MIXOUTR_VOL bit 0~5 /-57dB to +6dB in 1dB steps
-               wm8994_write(0x0021, (lvol&~0x003f)|earpiece_vol_table[volume]);
+               wm8994_write(0x0021, (rvol&~0x003f)|earpiece_vol_table[volume]);
        }
        else if(wm8994_mode==wm8994_BT_baseband||wm8994_mode==wm8994_BT_baseband_and_record)
        {
@@ -2085,7 +2089,7 @@ void wm8994_set_volume(unsigned char wm8994_mode,unsigned char volume,unsigned c
                //bit 0~4 /-16.5dB to +30dB in 1.5dB steps
                wm8994_write(0x0019, (lvol&~0x000f)|BT_vol_table[volume]);
                //bit 0~4 /-16.5dB to +30dB in 1.5dB steps
-               wm8994_write(0x001b, (lvol&~0x000f)|BT_vol_table[volume]);
+               wm8994_write(0x001b, (rvol&~0x000f)|BT_vol_table[volume]);
        }
 }