aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUK KIM <w0806.6.kim@samsung.com>2010-10-14 11:27:48 -0700
committerArve Hjønnevåg <arve@android.com>2011-11-17 17:49:56 -0800
commit22d5f495d5984c46e26cd9c14751b921d5bf745a (patch)
treed0a09e85bbf58ab8eee9547724d93a9f56853792
parenta52b15158207cc554508a4dd6d6506c14f3a620a (diff)
downloadkernel_samsung_crespo-22d5f495d5984c46e26cd9c14751b921d5bf745a.zip
kernel_samsung_crespo-22d5f495d5984c46e26cd9c14751b921d5bf745a.tar.gz
kernel_samsung_crespo-22d5f495d5984c46e26cd9c14751b921d5bf745a.tar.bz2
S5PC11X: SOUND: modified to support bluetooth SCO in VOIP
1. add bluetooth sco path 2. clean up codec driver 3. fix sound mute issue when output device is changed in voip 4. recognition param is added for recognition rate up Change-Id: I89f0c3ab628bc0adaf0fc809ac5745e2912d98bb Signed-off-by: UK KIM <w0806.6.kim@samsung.com>
-rw-r--r--sound/soc/codecs/wm8994_herring.c137
-rwxr-xr-xsound/soc/codecs/wm8994_samsung.c51
-rwxr-xr-xsound/soc/codecs/wm8994_samsung.h8
3 files changed, 132 insertions, 64 deletions
diff --git a/sound/soc/codecs/wm8994_herring.c b/sound/soc/codecs/wm8994_herring.c
index 24957da..b13a8f0 100644
--- a/sound/soc/codecs/wm8994_herring.c
+++ b/sound/soc/codecs/wm8994_herring.c
@@ -492,10 +492,12 @@ static int wm8994_earsel_control(struct wm8994_platform_data *pdata, int en)
}
/* Audio Routing routines for the universal board..wm8994 codec*/
-void wm8994_disable_playback_path(struct snd_soc_codec *codec,
- enum audio_path path)
+void wm8994_disable_path(struct snd_soc_codec *codec)
{
+ struct wm8994_priv *wm8994 = codec->drvdata;
+
u16 val;
+ enum audio_path path = wm8994->cur_path;
DEBUG_LOG("Path = [%d]", path);
@@ -670,7 +672,7 @@ void wm8994_disable_rec_path(struct snd_soc_codec *codec)
wm8994->rec_path = MIC_OFF;
- if (!(wm8994->call_state & DISCONNECT))
+ if (!(wm8994->codec_state & CALL_ACTIVE))
audio_ctrl_mic_bias_gpio(wm8994->pdata, 0);
switch (mic) {
@@ -767,12 +769,87 @@ void wm8994_disable_rec_path(struct snd_soc_codec *codec)
wm8994_write(codec, WM8994_AIF2_DAC_FILTERS_1, val);
break;
+ case MIC_OFF:
+ DEBUG_LOG("Mic is already OFF!\n");
+
default:
DEBUG_LOG_ERR("Path[%d] is not invaild!\n", mic);
break;
}
}
+void wm8994_set_bluetooth_common_setting(struct snd_soc_codec *codec)
+{
+ u32 val;
+
+ wm8994_write(codec, WM8994_GPIO_1, 0xA101);
+ wm8994_write(codec, WM8994_GPIO_2, 0x8100);
+ wm8994_write(codec, WM8994_GPIO_3, 0x0100);
+ wm8994_write(codec, WM8994_GPIO_4, 0x0100);
+ wm8994_write(codec, WM8994_GPIO_5, 0x8100);
+ wm8994_write(codec, WM8994_GPIO_6, 0xA101);
+ wm8994_write(codec, WM8994_GPIO_7, 0x0100);
+ wm8994_write(codec, WM8994_GPIO_8, 0xA101);
+ wm8994_write(codec, WM8994_GPIO_9, 0xA101);
+ wm8994_write(codec, WM8994_GPIO_10, 0xA101);
+ wm8994_write(codec, WM8994_GPIO_11, 0xA101);
+
+ wm8994_write(codec, WM8994_FLL2_CONTROL_2, 0x0700);
+ wm8994_write(codec, WM8994_FLL2_CONTROL_3, 0x3126);
+ wm8994_write(codec, WM8994_FLL2_CONTROL_4, 0x0100);
+ wm8994_write(codec, WM8994_FLL2_CONTROL_5, 0x0C88);
+ wm8994_write(codec, WM8994_FLL2_CONTROL_1,
+ WM8994_FLL2_FRACN_ENA | WM8994_FLL2_ENA);
+
+ val = wm8994_read(codec, WM8994_AIF2_CLOCKING_1);
+ if (!(val & WM8994_AIF2CLK_ENA))
+ wm8994_write(codec, WM8994_AIF2_CLOCKING_1, 0x0018);
+
+ wm8994_write(codec, WM8994_AIF2_RATE, 0x9 << WM8994_AIF2CLK_RATE_SHIFT);
+
+ /* AIF2 Interface - PCM Stereo mode */
+ /* Left Justified, BCLK invert, LRCLK Invert */
+ wm8994_write(codec, WM8994_AIF2_CONTROL_1,
+ WM8994_AIF2ADCR_SRC | WM8994_AIF2_BCLK_INV | 0x18);
+
+ wm8994_write(codec, WM8994_AIF2_BCLK, 0x70);
+ wm8994_write(codec, WM8994_AIF2_CONTROL_2, 0x0000);
+ wm8994_write(codec, WM8994_AIF2_MASTER_SLAVE, WM8994_AIF2_MSTR |
+ WM8994_AIF2_CLK_FRC | WM8994_AIF2_LRCLK_FRC);
+
+ val = wm8994_read(codec, WM8994_POWER_MANAGEMENT_5);
+ val &= ~(WM8994_AIF2DACL_ENA_MASK | WM8994_AIF2DACR_ENA_MASK |
+ WM8994_AIF1DAC1L_ENA_MASK | WM8994_AIF1DAC1R_ENA_MASK |
+ WM8994_DAC1L_ENA_MASK | WM8994_DAC1R_ENA_MASK);
+ val |= (WM8994_AIF2DACL_ENA | WM8994_AIF2DACR_ENA |
+ WM8994_AIF1DAC1L_ENA | WM8994_AIF1DAC1R_ENA |
+ WM8994_DAC1L_ENA | WM8994_DAC1R_ENA);
+ wm8994_write(codec, WM8994_POWER_MANAGEMENT_5, val);
+
+ /* Clocking */
+ val = wm8994_read(codec, WM8994_CLOCKING_1);
+ val |= (WM8994_DSP_FS2CLK_ENA | WM8994_SYSCLK_SRC);
+ wm8994_write(codec, WM8994_CLOCKING_1, val);
+
+ wm8994_write(codec, WM8994_POWER_MANAGEMENT_6, 0x0);
+
+ /* AIF1 & AIF2 Output is connected to DAC1 */
+ val = wm8994_read(codec, WM8994_DAC1_LEFT_MIXER_ROUTING);
+ val &= ~(WM8994_AIF1DAC1L_TO_DAC1L_MASK |
+ WM8994_AIF2DACL_TO_DAC1L_MASK);
+ val |= (WM8994_AIF1DAC1L_TO_DAC1L | WM8994_AIF2DACL_TO_DAC1L);
+ wm8994_write(codec, WM8994_DAC1_LEFT_MIXER_ROUTING, val);
+
+ val = wm8994_read(codec, WM8994_DAC1_RIGHT_MIXER_ROUTING);
+ val &= ~(WM8994_AIF1DAC1R_TO_DAC1R_MASK |
+ WM8994_AIF2DACR_TO_DAC1R_MASK);
+ val |= (WM8994_AIF1DAC1R_TO_DAC1R | WM8994_AIF2DACR_TO_DAC1R);
+ wm8994_write(codec, WM8994_DAC1_RIGHT_MIXER_ROUTING, val);
+
+ wm8994_write(codec, 0x6, 0x0);
+
+}
+
void wm8994_record_headset_mic(struct snd_soc_codec *codec)
{
struct wm8994_priv *wm8994 = codec->drvdata;
@@ -888,6 +965,7 @@ void wm8994_record_main_mic(struct snd_soc_codec *codec)
val = wm8994_read(codec, WM8994_AIF1_CONTROL_1);
val &= ~(WM8994_AIF1ADCL_SRC_MASK | WM8994_AIF1ADCR_SRC_MASK);
+ val |= (WM8994_AIF1ADCR_SRC);
wm8994_write(codec, WM8994_AIF1_CONTROL_1, val);
/* Main mic volume issue fix: requested H/W */
@@ -952,7 +1030,7 @@ void wm8994_record_bluetooth(struct snd_soc_codec *codec)
DEBUG_LOG("BT Record Path for Voice Command\n");
- wm8994_set_voicecall_common_setting(codec);
+ wm8994_set_bluetooth_common_setting(codec);
val = wm8994_read(codec, WM8994_DAC2_LEFT_MIXER_ROUTING);
val &= ~(WM8994_ADC1_TO_DAC2L_MASK);
@@ -1055,6 +1133,8 @@ void wm8994_set_playback_receiver(struct snd_soc_codec *codec)
val |= (WM8994_MIXOUTRVOL_TO_HPOUT2 | WM8994_MIXOUTLVOL_TO_HPOUT2);
wm8994_write(codec, WM8994_HPOUT2_MIXER, val);
+ wm8994_set_codec_gain(codec, PLAYBACK_MODE, PLAYBACK_RCV);
+
val = wm8994_read(codec, WM8994_POWER_MANAGEMENT_5);
val &= ~(WM8994_DAC1R_ENA_MASK | WM8994_DAC1L_ENA_MASK |
WM8994_AIF1DAC1R_ENA_MASK | WM8994_AIF1DAC1L_ENA_MASK);
@@ -1062,11 +1142,6 @@ void wm8994_set_playback_receiver(struct snd_soc_codec *codec)
WM8994_DAC1L_ENA | WM8994_DAC1R_ENA);
wm8994_write(codec, WM8994_POWER_MANAGEMENT_5, val);
- val = wm8994_read(codec, WM8994_AIF1_DAC1_FILTERS_1);
- val &= ~(WM8994_AIF1DAC1_MUTE_MASK | WM8994_AIF1DAC1_MONO_MASK);
- val |= (WM8994_AIF1DAC1_UNMUTE | WM8994_AIF1DAC1_MONO);
- wm8994_write(codec, WM8994_AIF1_DAC1_FILTERS_1, val);
-
val = wm8994_read(codec, WM8994_DAC1_LEFT_MIXER_ROUTING);
val &= ~(WM8994_AIF1DAC1L_TO_DAC1L_MASK);
val |= (WM8994_AIF1DAC1L_TO_DAC1L);
@@ -1091,10 +1166,16 @@ void wm8994_set_playback_receiver(struct snd_soc_codec *codec)
val = wm8994_read(codec, WM8994_POWER_MANAGEMENT_1);
val &= ~(WM8994_BIAS_ENA_MASK | WM8994_VMID_SEL_MASK |
- WM8994_HPOUT2_ENA_MASK);
+ WM8994_HPOUT2_ENA_MASK | WM8994_HPOUT1L_ENA_MASK |
+ WM8994_HPOUT1R_ENA_MASK | WM8994_SPKOUTL_ENA_MASK);
val |= (WM8994_BIAS_ENA | WM8994_VMID_SEL_NORMAL | WM8994_HPOUT2_ENA);
wm8994_write(codec, WM8994_POWER_MANAGEMENT_1, val);
+ val = wm8994_read(codec, WM8994_AIF1_DAC1_FILTERS_1);
+ val &= ~(WM8994_AIF1DAC1_MUTE_MASK | WM8994_AIF1DAC1_MONO_MASK);
+ val |= (WM8994_AIF1DAC1_UNMUTE | WM8994_AIF1DAC1_MONO);
+ wm8994_write(codec, WM8994_AIF1_DAC1_FILTERS_1, val);
+
}
void wm8994_set_playback_headset(struct snd_soc_codec *codec)
@@ -1365,12 +1446,6 @@ void wm8994_set_playback_speaker(struct snd_soc_codec *codec)
else
wm8994_set_codec_gain(codec, PLAYBACK_MODE, PLAYBACK_SPK);
- /* Unmute */
- val = wm8994_read(codec, WM8994_AIF1_DAC1_FILTERS_1);
- val &= ~(WM8994_AIF1DAC1_MUTE_MASK | WM8994_AIF1DAC1_MONO_MASK);
- val |= (WM8994_AIF1DAC1_UNMUTE | WM8994_AIF1DAC1_MONO);
- wm8994_write(codec, WM8994_AIF1_DAC1_FILTERS_1, val);
-
/* enable timeslot0 to left dac */
val = wm8994_read(codec, WM8994_DAC1_LEFT_MIXER_ROUTING);
val &= ~(WM8994_AIF1DAC1L_TO_DAC1L_MASK);
@@ -1385,6 +1460,12 @@ void wm8994_set_playback_speaker(struct snd_soc_codec *codec)
val |= (WM8994_BIAS_ENA | WM8994_VMID_SEL_NORMAL | WM8994_SPKOUTL_ENA);
wm8994_write(codec, WM8994_POWER_MANAGEMENT_1, val);
+ /* Unmute */
+ val = wm8994_read(codec, WM8994_AIF1_DAC1_FILTERS_1);
+ val &= ~(WM8994_AIF1DAC1_MUTE_MASK | WM8994_AIF1DAC1_MONO_MASK);
+ val |= (WM8994_AIF1DAC1_UNMUTE | WM8994_AIF1DAC1_MONO);
+ wm8994_write(codec, WM8994_AIF1_DAC1_FILTERS_1, val);
+
}
void wm8994_set_playback_speaker_headset(struct snd_soc_codec *codec)
@@ -1577,9 +1658,9 @@ void wm8994_set_playback_bluetooth(struct snd_soc_codec *codec)
{
u16 val;
- DEBUG_LOG("BT Playback Path for Voice Command\n");
+ DEBUG_LOG("BT Playback Path for SCO\n");
- wm8994_set_voicecall_common_setting(codec);
+ wm8994_set_bluetooth_common_setting(codec);
val = wm8994_read(codec, WM8994_POWER_MANAGEMENT_1);
val &= ~(WM8994_BIAS_ENA_MASK | WM8994_VMID_SEL_MASK);
@@ -1609,12 +1690,6 @@ void wm8994_set_playback_bluetooth(struct snd_soc_codec *codec)
val |= (0x0001 << WM8994_AIF3_ADCDAT_SRC_SHIFT);
wm8994_write(codec, WM8994_POWER_MANAGEMENT_6, val);
- /* Un-Mute*/
- val = wm8994_read(codec, WM8994_AIF1_DAC1_FILTERS_1);
- val &= ~(WM8994_AIF1DAC1_MUTE_MASK | WM8994_AIF1DAC1_MONO_MASK);
- val |= (WM8994_AIF1DAC1_UNMUTE);
- wm8994_write(codec, WM8994_AIF1_DAC1_FILTERS_1, val);
-
/* Mixer Routing*/
val = wm8994_read(codec, WM8994_DAC2_LEFT_MIXER_ROUTING);
val &= ~(WM8994_AIF1DAC1L_TO_DAC2L_MASK);
@@ -1639,6 +1714,13 @@ void wm8994_set_playback_bluetooth(struct snd_soc_codec *codec)
wm8994_write(codec, WM8994_GPIO_9, WM8994_GP9_DB);
wm8994_write(codec, WM8994_GPIO_10, WM8994_GP10_DB);
wm8994_write(codec, WM8994_GPIO_11, WM8994_GP11_DB);
+
+ /* Un-Mute*/
+ val = wm8994_read(codec, WM8994_AIF1_DAC1_FILTERS_1);
+ val &= ~(WM8994_AIF1DAC1_MUTE_MASK | WM8994_AIF1DAC1_MONO_MASK);
+ val |= (WM8994_AIF1DAC1_UNMUTE);
+ wm8994_write(codec, WM8994_AIF1_DAC1_FILTERS_1, val);
+
}
void wm8994_set_voicecall_common_setting(struct snd_soc_codec *codec)
@@ -1738,9 +1820,6 @@ void wm8994_set_voicecall_receiver(struct snd_soc_codec *codec)
wm8994_write(codec, WM8994_POWER_MANAGEMENT_4,
WM8994_AIF2ADCL_ENA | WM8994_ADCL_ENA);
- wm8994_write(codec, WM8994_AIF1_DAC1_FILTERS_1, 0x0000);
- wm8994_write(codec, WM8994_AIF2_DAC_FILTERS_1, 0x0000);
-
wm8994_write(codec, WM8994_DAC2_MIXER_VOLUMES, 0x000C);
wm8994_write(codec, WM8994_DAC2_LEFT_VOLUME, 0x01C0);
wm8994_write(codec, WM8994_DAC2_RIGHT_VOLUME, 0x01C0);
@@ -1803,6 +1882,10 @@ void wm8994_set_voicecall_receiver(struct snd_soc_codec *codec)
WM8994_MIXOUTRVOL_TO_HPOUT2);
wm8994_write(codec, WM8994_POWER_MANAGEMENT_1,
WM8994_HPOUT2_ENA | WM8994_VMID_SEL_NORMAL | WM8994_BIAS_ENA);
+
+ wm8994_write(codec, WM8994_AIF1_DAC1_FILTERS_1, 0x0000);
+ wm8994_write(codec, WM8994_AIF2_DAC_FILTERS_1, 0x0000);
+
}
void wm8994_set_voicecall_headset(struct snd_soc_codec *codec)
diff --git a/sound/soc/codecs/wm8994_samsung.c b/sound/soc/codecs/wm8994_samsung.c
index 00a9e6a..c872249 100755
--- a/sound/soc/codecs/wm8994_samsung.c
+++ b/sound/soc/codecs/wm8994_samsung.c
@@ -110,20 +110,17 @@ EXPORT_SYMBOL_GPL(soc_codec_dev_pcm_wm8994);
struct snd_soc_codec_device soc_codec_dev_wm8994;
EXPORT_SYMBOL_GPL(soc_codec_dev_wm8994);
-
-static void wm8994_set_off(struct snd_soc_codec *codec);
-
/*
* Definitions of sound path
*/
select_route universal_wm8994_playback_paths[] = {
- wm8994_set_off, wm8994_set_playback_receiver,
+ wm8994_disable_path, wm8994_set_playback_receiver,
wm8994_set_playback_speaker, wm8994_set_playback_headset,
- wm8994_set_off, wm8994_set_playback_speaker_headset
+ wm8994_set_playback_bluetooth, wm8994_set_playback_speaker_headset
};
select_route universal_wm8994_voicecall_paths[] = {
- wm8994_set_off, wm8994_set_voicecall_receiver,
+ wm8994_disable_path, wm8994_set_voicecall_receiver,
wm8994_set_voicecall_speaker, wm8994_set_voicecall_headset,
wm8994_set_voicecall_bluetooth
};
@@ -272,8 +269,10 @@ static const char *playback_path[] = {
"RING_SPK", "RING_HP", "RING_SPK_HP"
};
static const char *voicecall_path[] = { "OFF", "RCV", "SPK", "HP", "BT" };
-static const char *mic_path[] = { "Main Mic", "Hands Free Mic" };
-static const char *mic_state[] = { "MIC_NO_USE", "MIC_USE" };
+static const char *mic_path[] = { "Main Mic", "Hands Free Mic",
+ "BT Sco Mic", "MIC OFF" };
+static const char *recognition_state[] = { "RECOGNITION_OFF",
+ "RECOGNITION_ON" };
static int wm8994_get_mic_path(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol)
@@ -444,18 +443,18 @@ static int wm8994_set_voice_path(struct snd_kcontrol *kcontrol,
return 0;
}
-static int wm8994_get_mic_status(struct snd_kcontrol *kcontrol,
+static int wm8994_get_recognition_status(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol)
{
struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
struct wm8994_priv *wm8994 = codec->drvdata;
- DEBUG_LOG("mic_state = [%d]", wm8994->mic_state);
+ DEBUG_LOG("recognition_state = [%d]", wm8994->recognition_active);
- return wm8994->mic_state;
+ return wm8994->recognition_active;
}
-static int wm8994_set_mic_status(struct snd_kcontrol *kcontrol,
+static int wm8994_set_recognition_status(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol)
{
struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
@@ -463,25 +462,14 @@ static int wm8994_set_mic_status(struct snd_kcontrol *kcontrol,
int control_flag = ucontrol->value.integer.value[0];
- DEBUG_LOG("Changed mic state [%d] => [%d]",
- wm8994->mic_state, control_flag);
+ DEBUG_LOG("Changed recognition state [%d] => [%d]",
+ wm8994->recognition_active, control_flag);
- wm8994->mic_state = control_flag;
+ wm8994->recognition_active = control_flag;
return 0;
}
-static void wm8994_set_off(struct snd_soc_codec *codec)
-{
- struct wm8994_priv *wm8994 = codec->drvdata;
-
- DEBUG_LOG("");
-
- wm8994_ldo_control(wm8994->pdata, 0);
-
- wm8994->universal_clock_control(codec, CODEC_OFF);
-}
-
#define SOC_WM899X_OUTPGA_DOUBLE_R_TLV(xname, reg_left, reg_right,\
xshift, xmax, xinvert, tlv_array) \
{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\
@@ -514,7 +502,7 @@ static const struct soc_enum path_control_enum[] = {
SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(playback_path), playback_path),
SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(voicecall_path), voicecall_path),
SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(mic_path), mic_path),
- SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(mic_state), mic_state),
+ SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(recognition_state), recognition_state),
};
static const struct snd_kcontrol_new wm8994_snd_controls[] = {
@@ -547,8 +535,9 @@ static const struct snd_kcontrol_new wm8994_snd_controls[] = {
SOC_ENUM_EXT("Clock Control", clock_control_enum[0],
s3c_pcmdev_get_clock, s3c_pcmdev_set_clock),
#endif
- SOC_ENUM_EXT("Mic Status", path_control_enum[3],
- wm8994_get_mic_status, wm8994_set_mic_status),
+ SOC_ENUM_EXT("Recognition Control", path_control_enum[3],
+ wm8994_get_recognition_status,
+ wm8994_set_recognition_status),
};
@@ -1160,7 +1149,8 @@ static void wm8994_shutdown(struct snd_pcm_substream *substream,
val &= ~(WM8994_AIF1DAC1_MUTE_MASK);
val |= (WM8994_AIF1DAC1_MUTE);
wm8994_write(codec, WM8994_AIF1_DAC1_FILTERS_1, val);
- }
+ } else
+ wm8994_disable_path(codec);
}
}
@@ -1237,7 +1227,6 @@ static int wm8994_init(struct wm8994_priv *wm8994_private,
wm8994->power_state = CODEC_OFF;
wm8994->recognition_active = REC_OFF;
wm8994->ringtone_active = RING_OFF;
- wm8994->mic_state = MIC_NO_USE;
wm8994->pdata = pdata;
wm8994->universal_clock_control(codec, CODEC_ON);
diff --git a/sound/soc/codecs/wm8994_samsung.h b/sound/soc/codecs/wm8994_samsung.h
index bd67510..0967f5b 100755
--- a/sound/soc/codecs/wm8994_samsung.h
+++ b/sound/soc/codecs/wm8994_samsung.h
@@ -83,9 +83,7 @@ enum audio_path {
RING_SPK, RING_HP, RING_SPK_HP
};
enum mic_path {MAIN, SUB, BT_REC, MIC_OFF};
-enum call_state {DISCONNECT, CONNECT};
enum power_state {CODEC_OFF, CODEC_ON };
-enum mic_state {MIC_NO_USE, MIC_USE};
enum ringtone_state {RING_OFF, RING_ON};
enum recognition {REC_OFF, REC_ON};
@@ -112,9 +110,7 @@ struct wm8994_priv {
unsigned int stream_state;
enum audio_path cur_path;
enum mic_path rec_path;
- enum call_state call_state;
enum power_state power_state;
- enum mic_state mic_state;
enum recognition recognition_active;
enum ringtone_state ringtone_active;
select_route *universal_playback_path;
@@ -149,8 +145,7 @@ inline unsigned int wm8994_read(struct snd_soc_codec *codec, unsigned int reg);
int wm8994_write(struct snd_soc_codec *codec,
unsigned int reg, unsigned int value);
int wm8994_configure_clock(struct snd_soc_codec *codec, int en);
-void wm8994_disable_playback_path(struct snd_soc_codec *codec,
- enum audio_path path);
+void wm8994_disable_path(struct snd_soc_codec *codec);
void wm8994_disable_rec_path(struct snd_soc_codec *codec);
void wm8994_record_main_mic(struct snd_soc_codec *codec);
void wm8994_record_headset_mic(struct snd_soc_codec *codec);
@@ -158,6 +153,7 @@ void wm8994_record_bluetooth(struct snd_soc_codec *codec);
void wm8994_set_playback_receiver(struct snd_soc_codec *codec);
void wm8994_set_playback_headset(struct snd_soc_codec *codec);
void wm8994_set_playback_speaker(struct snd_soc_codec *codec);
+void wm8994_set_playback_bluetooth(struct snd_soc_codec *codec);
void wm8994_set_playback_speaker_headset(struct snd_soc_codec *codec);
void wm8994_set_voicecall_common_setting(struct snd_soc_codec *codec);
void wm8994_set_voicecall_receiver(struct snd_soc_codec *codec);