diff options
| -rw-r--r-- | sound/soc/codecs/twl6040.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/sound/soc/codecs/twl6040.c b/sound/soc/codecs/twl6040.c index 2ae442edeb9a..af36346ff336 100644 --- a/sound/soc/codecs/twl6040.c +++ b/sound/soc/codecs/twl6040.c | |||
| @@ -432,6 +432,12 @@ static DECLARE_TLV_DB_SCALE(hs_tlv, -3000, 200, 0); | |||
| 432 | */ | 432 | */ |
| 433 | static DECLARE_TLV_DB_SCALE(hf_tlv, -5200, 200, 0); | 433 | static DECLARE_TLV_DB_SCALE(hf_tlv, -5200, 200, 0); |
| 434 | 434 | ||
| 435 | /* | ||
| 436 | * EPGAIN volume control: | ||
| 437 | * from -24 to 6 dB in 2 dB steps | ||
| 438 | */ | ||
| 439 | static DECLARE_TLV_DB_SCALE(ep_tlv, -2400, 200, 0); | ||
| 440 | |||
| 435 | /* Left analog microphone selection */ | 441 | /* Left analog microphone selection */ |
| 436 | static const char *twl6040_amicl_texts[] = | 442 | static const char *twl6040_amicl_texts[] = |
| 437 | {"Headset Mic", "Main Mic", "Aux/FM Left", "Off"}; | 443 | {"Headset Mic", "Main Mic", "Aux/FM Left", "Off"}; |
| @@ -479,6 +485,9 @@ static const struct snd_kcontrol_new hfl_driver_switch_controls = | |||
| 479 | static const struct snd_kcontrol_new hfr_driver_switch_controls = | 485 | static const struct snd_kcontrol_new hfr_driver_switch_controls = |
| 480 | SOC_DAPM_SINGLE("Switch", TWL6040_REG_HFRCTL, 4, 1, 0); | 486 | SOC_DAPM_SINGLE("Switch", TWL6040_REG_HFRCTL, 4, 1, 0); |
| 481 | 487 | ||
| 488 | static const struct snd_kcontrol_new ep_driver_switch_controls = | ||
| 489 | SOC_DAPM_SINGLE("Switch", TWL6040_REG_EARCTL, 0, 1, 0); | ||
| 490 | |||
| 482 | static const struct snd_kcontrol_new twl6040_snd_controls[] = { | 491 | static const struct snd_kcontrol_new twl6040_snd_controls[] = { |
| 483 | /* Capture gains */ | 492 | /* Capture gains */ |
| 484 | SOC_DOUBLE_TLV("Capture Preamplifier Volume", | 493 | SOC_DOUBLE_TLV("Capture Preamplifier Volume", |
| @@ -491,7 +500,8 @@ static const struct snd_kcontrol_new twl6040_snd_controls[] = { | |||
| 491 | TWL6040_REG_HSGAIN, 0, 4, 0xF, 1, hs_tlv), | 500 | TWL6040_REG_HSGAIN, 0, 4, 0xF, 1, hs_tlv), |
| 492 | SOC_DOUBLE_R_TLV("Handsfree Playback Volume", | 501 | SOC_DOUBLE_R_TLV("Handsfree Playback Volume", |
| 493 | TWL6040_REG_HFLGAIN, TWL6040_REG_HFRGAIN, 0, 0x1D, 1, hf_tlv), | 502 | TWL6040_REG_HFLGAIN, TWL6040_REG_HFRGAIN, 0, 0x1D, 1, hf_tlv), |
| 494 | 503 | SOC_SINGLE_TLV("Earphone Playback Volume", | |
| 504 | TWL6040_REG_EARCTL, 1, 0xF, 1, ep_tlv), | ||
| 495 | }; | 505 | }; |
| 496 | 506 | ||
| 497 | static const struct snd_soc_dapm_widget twl6040_dapm_widgets[] = { | 507 | static const struct snd_soc_dapm_widget twl6040_dapm_widgets[] = { |
| @@ -507,6 +517,7 @@ static const struct snd_soc_dapm_widget twl6040_dapm_widgets[] = { | |||
| 507 | SND_SOC_DAPM_OUTPUT("HSOR"), | 517 | SND_SOC_DAPM_OUTPUT("HSOR"), |
| 508 | SND_SOC_DAPM_OUTPUT("HFL"), | 518 | SND_SOC_DAPM_OUTPUT("HFL"), |
| 509 | SND_SOC_DAPM_OUTPUT("HFR"), | 519 | SND_SOC_DAPM_OUTPUT("HFR"), |
| 520 | SND_SOC_DAPM_OUTPUT("EP"), | ||
| 510 | 521 | ||
| 511 | /* Analog input muxes for the capture amplifiers */ | 522 | /* Analog input muxes for the capture amplifiers */ |
| 512 | SND_SOC_DAPM_MUX("Analog Left Capture Route", | 523 | SND_SOC_DAPM_MUX("Analog Left Capture Route", |
| @@ -572,6 +583,10 @@ static const struct snd_soc_dapm_widget twl6040_dapm_widgets[] = { | |||
| 572 | SND_SOC_NOPM, 0, 0, &hfr_driver_switch_controls, | 583 | SND_SOC_NOPM, 0, 0, &hfr_driver_switch_controls, |
| 573 | twl6040_power_mode_event, | 584 | twl6040_power_mode_event, |
| 574 | SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD), | 585 | SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD), |
| 586 | SND_SOC_DAPM_SWITCH_E("Earphone Driver", | ||
| 587 | SND_SOC_NOPM, 0, 0, &ep_driver_switch_controls, | ||
| 588 | twl6040_power_mode_event, | ||
| 589 | SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD), | ||
| 575 | 590 | ||
| 576 | /* Analog playback PGAs */ | 591 | /* Analog playback PGAs */ |
| 577 | SND_SOC_DAPM_PGA("HFDAC Left PGA", | 592 | SND_SOC_DAPM_PGA("HFDAC Left PGA", |
| @@ -607,6 +622,10 @@ static const struct snd_soc_dapm_route intercon[] = { | |||
| 607 | {"HSOL", NULL, "Headset Left Driver"}, | 622 | {"HSOL", NULL, "Headset Left Driver"}, |
| 608 | {"HSOR", NULL, "Headset Right Driver"}, | 623 | {"HSOR", NULL, "Headset Right Driver"}, |
| 609 | 624 | ||
| 625 | /* Earphone playback path */ | ||
| 626 | {"Earphone Driver", "Switch", "HSDAC Left"}, | ||
| 627 | {"EP", NULL, "Earphone Driver"}, | ||
| 628 | |||
| 610 | /* Handsfree playback path */ | 629 | /* Handsfree playback path */ |
| 611 | {"HFDAC Left Playback", "Switch", "HFDAC Left"}, | 630 | {"HFDAC Left Playback", "Switch", "HFDAC Left"}, |
| 612 | {"HFDAC Right Playback", "Switch", "HFDAC Right"}, | 631 | {"HFDAC Right Playback", "Switch", "HFDAC Right"}, |
