summaryrefslogtreecommitdiff
path: root/sound/soc/tegra/tegra_soc_wm8903.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/soc/tegra/tegra_soc_wm8903.c')
-rw-r--r--sound/soc/tegra/tegra_soc_wm8903.c37
1 files changed, 21 insertions, 16 deletions
diff --git a/sound/soc/tegra/tegra_soc_wm8903.c b/sound/soc/tegra/tegra_soc_wm8903.c
index efad1e607e9d..1c3ed544ddd5 100644
--- a/sound/soc/tegra/tegra_soc_wm8903.c
+++ b/sound/soc/tegra/tegra_soc_wm8903.c
@@ -179,7 +179,6 @@ static int tegra_hifi_hw_params(struct snd_pcm_substream *substream,
if (substream->stream != SNDRV_PCM_STREAM_PLAYBACK) {
int CtrlReg = 0;
int VolumeCtrlReg = 0;
- int SidetoneCtrlReg = 0;
snd_soc_write(codec, WM8903_ANALOGUE_LEFT_INPUT_0, 0X7);
snd_soc_write(codec, WM8903_ANALOGUE_RIGHT_INPUT_0, 0X7);
@@ -203,23 +202,24 @@ static int tegra_hifi_hw_params(struct snd_pcm_substream *substream,
VolumeCtrlReg);
snd_soc_write(codec, WM8903_ANALOGUE_RIGHT_INPUT_0,
VolumeCtrlReg);
- /* replicate mic setting on both channels */
+ /* Left ADC data on both channels */
CtrlReg = snd_soc_read(codec, WM8903_AUDIO_INTERFACE_0);
CtrlReg = SET_REG_VAL(CtrlReg, 0x1, B06_AIF_ADCR, 0x0);
CtrlReg = SET_REG_VAL(CtrlReg, 0x1, B06_AIF_ADCL, 0x0);
snd_soc_write(codec, WM8903_AUDIO_INTERFACE_0, CtrlReg);
/* Enable analog inputs */
- CtrlReg = (0x1<<B01_INL_ENA) | (0x1<<B00_INR_ENA);
+ CtrlReg = (0x1<<B01_INL_ENA);
snd_soc_write(codec, WM8903_POWER_MANAGEMENT_0, CtrlReg);
/* ADC Settings */
CtrlReg = snd_soc_read(codec, WM8903_ADC_DIGITAL_0);
CtrlReg |= (0x1<<B04_ADC_HPF_ENA);
snd_soc_write(codec, WM8903_ADC_DIGITAL_0, CtrlReg);
- SidetoneCtrlReg = 0;
- snd_soc_write(codec, R20_SIDETONE_CTRL, SidetoneCtrlReg);
+ /* Disable sidetone */
+ CtrlReg = 0;
+ snd_soc_write(codec, R20_SIDETONE_CTRL, CtrlReg);
/* Enable ADC */
CtrlReg = snd_soc_read(codec, WM8903_POWER_MANAGEMENT_6);
- CtrlReg |= (0x1<<B00_ADCR_ENA)|(0x1<<B01_ADCL_ENA);
+ CtrlReg |= (0x1<<B01_ADCL_ENA);
snd_soc_write(codec, WM8903_POWER_MANAGEMENT_6, CtrlReg);
CtrlReg = snd_soc_read(codec, R29_DRC_1);
CtrlReg |= 0x3; /*mic volume 18 db */
@@ -383,10 +383,15 @@ void tegra_ext_control(struct snd_soc_codec *codec, int new_con)
else
snd_soc_dapm_disable_pin(codec, "Linein");
- if (new_con & TEGRA_HEADSET)
- snd_soc_dapm_enable_pin(codec, "Headset");
+ if (new_con & TEGRA_HEADSET_OUT)
+ snd_soc_dapm_enable_pin(codec, "Headset Out");
else
- snd_soc_dapm_disable_pin(codec, "Headset");
+ snd_soc_dapm_disable_pin(codec, "Headset Out");
+
+ if (new_con & TEGRA_HEADSET_IN)
+ snd_soc_dapm_enable_pin(codec, "Headset In");
+ else
+ snd_soc_dapm_disable_pin(codec, "Headset In");
/* signal a DAPM event */
snd_soc_dapm_sync(codec);
@@ -448,7 +453,8 @@ static int tegra_dapm_event_ext_mic(struct snd_soc_dapm_widget* w,
/*tegra machine dapm widgets */
static const struct snd_soc_dapm_widget tegra_dapm_widgets[] = {
SND_SOC_DAPM_HP("Headphone", NULL),
- SND_SOC_DAPM_HP("Headset", NULL),
+ SND_SOC_DAPM_HP("Headset Out", NULL),
+ SND_SOC_DAPM_MIC("Headset In", NULL),
SND_SOC_DAPM_SPK("Lineout", NULL),
SND_SOC_DAPM_SPK("Int Spk", tegra_dapm_event_int_spk),
SND_SOC_DAPM_MIC("Ext Mic", tegra_dapm_event_ext_mic),
@@ -464,10 +470,9 @@ static const struct snd_soc_dapm_route audio_map[] = {
{"Headphone", NULL, "HPOUTL"},
/* headset Jack - in = micin, out = HPOUT*/
- {"Headset", NULL, "HPOUTR"},
- {"Headset", NULL, "HPOUTL"},
- {"IN1L", NULL, "Headset"},
- {"IN1R", NULL, "Headset"},
+ {"Headset Out", NULL, "HPOUTR"},
+ {"Headset Out", NULL, "HPOUTL"},
+ {"IN1L", NULL, "Headset In"},
/* lineout connected to LINEOUTR and LINEOUTL */
{"Lineout", NULL, "LINEOUTR"},
@@ -480,9 +485,9 @@ static const struct snd_soc_dapm_route audio_map[] = {
{"Int Spk", NULL, "LOP"},
/* internal mic is mono */
- {"IN1R", NULL, "Int Mic"},
+ {"IN1L", NULL, "Int Mic"},
- /* external mic is stero */
+ /* external mic is stereo */
{"IN1L", NULL, "Ext Mic"},
{"IN1R", NULL, "Ext Mic"},