diff options
Diffstat (limited to 'sound/soc')
-rw-r--r-- | sound/soc/codecs/twl4030.c | 48 |
1 files changed, 12 insertions, 36 deletions
diff --git a/sound/soc/codecs/twl4030.c b/sound/soc/codecs/twl4030.c index d401c597d38f..7b618bbff884 100644 --- a/sound/soc/codecs/twl4030.c +++ b/sound/soc/codecs/twl4030.c | |||
@@ -577,36 +577,6 @@ static const struct snd_kcontrol_new twl4030_dapm_dbypassv_control = | |||
577 | TWL4030_REG_VSTPGA, 0, 0x29, 0, | 577 | TWL4030_REG_VSTPGA, 0, 0x29, 0, |
578 | twl4030_dapm_dbypassv_tlv); | 578 | twl4030_dapm_dbypassv_tlv); |
579 | 579 | ||
580 | static int micpath_event(struct snd_soc_dapm_widget *w, | ||
581 | struct snd_kcontrol *kcontrol, int event) | ||
582 | { | ||
583 | struct soc_enum *e = (struct soc_enum *)w->kcontrols->private_value; | ||
584 | unsigned char adcmicsel, micbias_ctl; | ||
585 | |||
586 | adcmicsel = twl4030_read_reg_cache(w->codec, TWL4030_REG_ADCMICSEL); | ||
587 | micbias_ctl = twl4030_read_reg_cache(w->codec, TWL4030_REG_MICBIAS_CTL); | ||
588 | /* Prepare the bits for the given TX path: | ||
589 | * shift_l == 0: TX1 microphone path | ||
590 | * shift_l == 2: TX2 microphone path */ | ||
591 | if (e->shift_l) { | ||
592 | /* TX2 microphone path */ | ||
593 | if (adcmicsel & TWL4030_TX2IN_SEL) | ||
594 | micbias_ctl |= TWL4030_MICBIAS2_CTL; /* digimic */ | ||
595 | else | ||
596 | micbias_ctl &= ~TWL4030_MICBIAS2_CTL; | ||
597 | } else { | ||
598 | /* TX1 microphone path */ | ||
599 | if (adcmicsel & TWL4030_TX1IN_SEL) | ||
600 | micbias_ctl |= TWL4030_MICBIAS1_CTL; /* digimic */ | ||
601 | else | ||
602 | micbias_ctl &= ~TWL4030_MICBIAS1_CTL; | ||
603 | } | ||
604 | |||
605 | twl4030_write(w->codec, TWL4030_REG_MICBIAS_CTL, micbias_ctl); | ||
606 | |||
607 | return 0; | ||
608 | } | ||
609 | |||
610 | /* | 580 | /* |
611 | * Output PGA builder: | 581 | * Output PGA builder: |
612 | * Handle the muting and unmuting of the given output (turning off the | 582 | * Handle the muting and unmuting of the given output (turning off the |
@@ -1430,12 +1400,10 @@ static const struct snd_soc_dapm_widget twl4030_dapm_widgets[] = { | |||
1430 | /* Analog/Digital mic path selection. | 1400 | /* Analog/Digital mic path selection. |
1431 | TX1 Left/Right: either analog Left/Right or Digimic0 | 1401 | TX1 Left/Right: either analog Left/Right or Digimic0 |
1432 | TX2 Left/Right: either analog Left/Right or Digimic1 */ | 1402 | TX2 Left/Right: either analog Left/Right or Digimic1 */ |
1433 | SND_SOC_DAPM_MUX_E("TX1 Capture Route", SND_SOC_NOPM, 0, 0, | 1403 | SND_SOC_DAPM_MUX("TX1 Capture Route", SND_SOC_NOPM, 0, 0, |
1434 | &twl4030_dapm_micpathtx1_control, micpath_event, | 1404 | &twl4030_dapm_micpathtx1_control), |
1435 | SND_SOC_DAPM_POST_REG), | 1405 | SND_SOC_DAPM_MUX("TX2 Capture Route", SND_SOC_NOPM, 0, 0, |
1436 | SND_SOC_DAPM_MUX_E("TX2 Capture Route", SND_SOC_NOPM, 0, 0, | 1406 | &twl4030_dapm_micpathtx2_control), |
1437 | &twl4030_dapm_micpathtx2_control, micpath_event, | ||
1438 | SND_SOC_DAPM_POST_REG), | ||
1439 | 1407 | ||
1440 | /* Analog input mixers for the capture amplifiers */ | 1408 | /* Analog input mixers for the capture amplifiers */ |
1441 | SND_SOC_DAPM_MIXER("Analog Left", | 1409 | SND_SOC_DAPM_MIXER("Analog Left", |
@@ -1459,6 +1427,11 @@ static const struct snd_soc_dapm_widget twl4030_dapm_widgets[] = { | |||
1459 | TWL4030_REG_ADCMICSEL, 3, 0, NULL, 0, | 1427 | TWL4030_REG_ADCMICSEL, 3, 0, NULL, 0, |
1460 | digimic_event, SND_SOC_DAPM_POST_PMU), | 1428 | digimic_event, SND_SOC_DAPM_POST_PMU), |
1461 | 1429 | ||
1430 | SND_SOC_DAPM_SUPPLY("micbias1 select", TWL4030_REG_MICBIAS_CTL, 5, 0, | ||
1431 | NULL, 0), | ||
1432 | SND_SOC_DAPM_SUPPLY("micbias2 select", TWL4030_REG_MICBIAS_CTL, 6, 0, | ||
1433 | NULL, 0), | ||
1434 | |||
1462 | SND_SOC_DAPM_MICBIAS("Mic Bias 1", TWL4030_REG_MICBIAS_CTL, 0, 0), | 1435 | SND_SOC_DAPM_MICBIAS("Mic Bias 1", TWL4030_REG_MICBIAS_CTL, 0, 0), |
1463 | SND_SOC_DAPM_MICBIAS("Mic Bias 2", TWL4030_REG_MICBIAS_CTL, 1, 0), | 1436 | SND_SOC_DAPM_MICBIAS("Mic Bias 2", TWL4030_REG_MICBIAS_CTL, 1, 0), |
1464 | SND_SOC_DAPM_MICBIAS("Headset Mic Bias", TWL4030_REG_MICBIAS_CTL, 2, 0), | 1437 | SND_SOC_DAPM_MICBIAS("Headset Mic Bias", TWL4030_REG_MICBIAS_CTL, 2, 0), |
@@ -1590,6 +1563,9 @@ static const struct snd_soc_dapm_route intercon[] = { | |||
1590 | {"Digimic0 Enable", NULL, "DIGIMIC0"}, | 1563 | {"Digimic0 Enable", NULL, "DIGIMIC0"}, |
1591 | {"Digimic1 Enable", NULL, "DIGIMIC1"}, | 1564 | {"Digimic1 Enable", NULL, "DIGIMIC1"}, |
1592 | 1565 | ||
1566 | {"DIGIMIC0", NULL, "micbias1 select"}, | ||
1567 | {"DIGIMIC1", NULL, "micbias2 select"}, | ||
1568 | |||
1593 | /* TX1 Left capture path */ | 1569 | /* TX1 Left capture path */ |
1594 | {"TX1 Capture Route", "Analog", "ADC Physical Left"}, | 1570 | {"TX1 Capture Route", "Analog", "ADC Physical Left"}, |
1595 | {"TX1 Capture Route", "Digimic0", "Digimic0 Enable"}, | 1571 | {"TX1 Capture Route", "Digimic0", "Digimic0 Enable"}, |