From: ChenJQ Date: Tue, 28 Sep 2010 02:20:41 +0000 (-0700) Subject: 在wm8994中修改蓝牙通话配置和耳机通话配置,修改蓝牙通话音量 X-Git-Tag: firefly_0821_release~11100 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=a809d9a5212ba467b4295da6cb347dca3cd79746;p=firefly-linux-kernel-4.4.55.git 在wm8994中修改蓝牙通话配置和耳机通话配置,修改蓝牙通话音量 --- diff --git a/arch/arm/configs/rk2818_raho_defconfig b/arch/arm/configs/rk2818_raho_defconfig index 875b00585e15..4c5d11cf9bb1 100755 --- a/arch/arm/configs/rk2818_raho_defconfig +++ b/arch/arm/configs/rk2818_raho_defconfig @@ -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 diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c index 1d5870fc0abd..11b2d4aea71e 100755 --- a/sound/soc/codecs/wm8994.c +++ b/sound/soc/codecs/wm8994.c @@ -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]); } }