SOC_DAPM_SINGLE("IN2R Switch", WM8993_LINE_MIXER2, 2, 1, 0), SOC_DAPM_SINGLE("IN2L Switch", WM8993_LINE_MIXER2, 1, 1, 0), SOC_DAPM_SINGLE("Output Switch", WM8993_LINE_MIXER2, 0, 1, 0), }; static const struct snd_kcontrol_new line2n_mix[] = { SOC_DAPM_SINGLE("Left Output Switch", WM8993_LINE_MIXER2, 6, 1, 0), SOC_DAPM_SINGLE("Right Output Switch", WM8993_LINE_MIXER2, 5, 1, 0), }; static const struct snd_kcontrol_new line2p_mix[] = { SOC_DAPM_SINGLE("Right Output Switch", WM8993_LINE_MIXER2, 0, 1, 0), }; static const struct snd_soc_dapm_widget analogue_dapm_widgets[] = { SND_SOC_DAPM_INPUT("IN1LN"), SND_SOC_DAPM_INPUT("IN1LP"), SND_SOC_DAPM_INPUT("IN2LN"), SND_SOC_DAPM_INPUT("IN2LP:VXRN"), SND_SOC_DAPM_INPUT("IN1RN"), SND_SOC_DAPM_INPUT("IN1RP"), SND_SOC_DAPM_INPUT("IN2RN"), SND_SOC_DAPM_INPUT("IN2RP:VXRP"), SND_SOC_DAPM_MICBIAS("MICBIAS2", WM8993_POWER_MANAGEMENT_1, 5, 0), SND_SOC_DAPM_MICBIAS("MICBIAS1", WM8993_POWER_MANAGEMENT_1, 4, 0), SND_SOC_DAPM_MIXER("IN1L PGA", WM8993_POWER_MANAGEMENT_2, 6, 0, in1l_pga, ARRAY_SIZE(in1l_pga)), SND_SOC_DAPM_MIXER("IN1R PGA", WM8993_POWER_MANAGEMENT_2, 4, 0, in1r_pga, ARRAY_SIZE(in1r_pga)),
static const char * const ana_text[] = { "Low", "12V", "13V", "14V", "15V", "16V", "17V", "18V", "19V", "20V" }; static const struct soc_enum ana_enum = SOC_ENUM_SINGLE(SND_SOC_NOPM, 0, 9, ana_text); static const struct snd_kcontrol_new out = SOC_DAPM_ENUM_EXT("ANA", ana_enum, tse850_get_ana, tse850_put_ana); static const struct snd_soc_dapm_widget tse850_dapm_widgets[] = { SND_SOC_DAPM_LINE("OUT1", NULL), SND_SOC_DAPM_LINE("OUT2", NULL), SND_SOC_DAPM_LINE("IN1", NULL), SND_SOC_DAPM_LINE("IN2", NULL), SND_SOC_DAPM_INPUT("DAC"), SND_SOC_DAPM_AIF_IN("AIFINL", "Playback", 0, SND_SOC_NOPM, 0, 0), SND_SOC_DAPM_AIF_IN("AIFINR", "Playback", 1, SND_SOC_NOPM, 0, 0), SOC_MIXER_ARRAY("MIX", SND_SOC_NOPM, 0, 0, mix), SND_SOC_DAPM_MUX("MUX1", SND_SOC_NOPM, 0, 0, &mux1), SND_SOC_DAPM_MUX("MUX2", SND_SOC_NOPM, 0, 0, &mux2), SND_SOC_DAPM_OUT_DRV("OUT", SND_SOC_NOPM, 0, 0, &out, 1), }; /* * These connections are not entirely correct, since both IN1 and IN2 * are always fed to MIX (if the "IN switch" is set so), i.e. without * regard to the loop1 and loop2 relays that according to this only * control MUX1 and MUX2 but in fact also control how the input signals * are routed. * But, 1) I don't know how to do it right, and 2) it doesn't seem to
unsigned int mclk; bool master; bool deemph; struct regmap *regmap; /* Current sample rate for de-emphasis control */ int rate; /* GPIO driving Reset pin, if any */ int gpio_nreset; /* GPIO that disable serial bus, if any */ int gpio_disable; /* enable soft reset workaround */ bool enable_soft_reset; }; static const struct snd_soc_dapm_widget cs4271_dapm_widgets[] = { SND_SOC_DAPM_INPUT("AINA"), SND_SOC_DAPM_INPUT("AINB"), SND_SOC_DAPM_OUTPUT("AOUTA+"), SND_SOC_DAPM_OUTPUT("AOUTA-"), SND_SOC_DAPM_OUTPUT("AOUTB+"), SND_SOC_DAPM_OUTPUT("AOUTB-"), }; static const struct snd_soc_dapm_route cs4271_dapm_routes[] = { { "Capture", NULL, "AINA" }, { "Capture", NULL, "AINB" }, { "AOUTA+", NULL, "Playback" }, { "AOUTA-", NULL, "Playback" }, { "AOUTB+", NULL, "Playback" },
SOC_DAPM_SINGLE("SPKMIX Left DAC Switch", WM8990_SPEAKER_MIXER, WM8990_LDSPK_BIT, 1, 0), SOC_DAPM_SINGLE("SPKMIX Right DAC Switch", WM8990_SPEAKER_MIXER, WM8990_RDSPK_BIT, 1, 0), SOC_DAPM_SINGLE("SPKMIX Right Mixer PGA Switch", WM8990_SPEAKER_MIXER, WM8990_ROPGASPK_BIT, 1, 0), SOC_DAPM_SINGLE("SPKMIX RADC Bypass Switch", WM8990_SPEAKER_MIXER, WM8990_RL12ROP_BIT, 1, 0), SOC_DAPM_SINGLE("SPKMIX RIN2 Bypass Switch", WM8990_SPEAKER_MIXER, WM8990_RI2SPK_BIT, 1, 0), }; static const struct snd_soc_dapm_widget wm8990_dapm_widgets[] = { /* Input Side */ /* Input Lines */ SND_SOC_DAPM_INPUT("LIN1"), SND_SOC_DAPM_INPUT("LIN2"), SND_SOC_DAPM_INPUT("LIN3"), SND_SOC_DAPM_INPUT("LIN4/RXN"), SND_SOC_DAPM_INPUT("RIN3"), SND_SOC_DAPM_INPUT("RIN4/RXP"), SND_SOC_DAPM_INPUT("RIN1"), SND_SOC_DAPM_INPUT("RIN2"), SND_SOC_DAPM_INPUT("Internal ADC Source"), /* DACs */ SND_SOC_DAPM_ADC("Left ADC", "Left Capture", WM8990_POWER_MANAGEMENT_2, WM8990_ADCL_ENA_BIT, 0), SND_SOC_DAPM_ADC("Right ADC", "Right Capture", WM8990_POWER_MANAGEMENT_2, WM8990_ADCR_ENA_BIT, 0),
SND_SOC_DAPM_PGA("Left Headphone Out", WM8978_POWER_MANAGEMENT_2, 7, 0, NULL, 0), SND_SOC_DAPM_PGA("Right Headphone Out", WM8978_POWER_MANAGEMENT_2, 8, 0, NULL, 0), SND_SOC_DAPM_PGA("Left Speaker Out", WM8978_POWER_MANAGEMENT_3, 6, 0, NULL, 0), SND_SOC_DAPM_PGA("Right Speaker Out", WM8978_POWER_MANAGEMENT_3, 5, 0, NULL, 0), SND_SOC_DAPM_MIXER("OUT4 VMID", WM8978_POWER_MANAGEMENT_3, 8, 0, NULL, 0), SND_SOC_DAPM_MICBIAS("Mic Bias", WM8978_POWER_MANAGEMENT_1, 4, 0), SND_SOC_DAPM_INPUT("LMICN"), SND_SOC_DAPM_INPUT("LMICP"), SND_SOC_DAPM_INPUT("RMICN"), SND_SOC_DAPM_INPUT("RMICP"), SND_SOC_DAPM_INPUT("LAUX"), SND_SOC_DAPM_INPUT("RAUX"), SND_SOC_DAPM_INPUT("L2"), SND_SOC_DAPM_INPUT("R2"), SND_SOC_DAPM_OUTPUT("LHP"), SND_SOC_DAPM_OUTPUT("RHP"), SND_SOC_DAPM_OUTPUT("LSPK"), SND_SOC_DAPM_OUTPUT("RSPK"), }; static const struct snd_soc_dapm_route wm8978_dapm_routes[] = { /* Output mixer */
ARIZONA_OPCLK_ENA_SHIFT, 0, NULL, 0), SND_SOC_DAPM_SUPPLY("ASYNCOPCLK", ARIZONA_OUTPUT_ASYNC_CLOCK, ARIZONA_OPCLK_ASYNC_ENA_SHIFT, 0, NULL, 0), SND_SOC_DAPM_REGULATOR_SUPPLY("DBVDD2", 0, 0), SND_SOC_DAPM_REGULATOR_SUPPLY("DBVDD3", 0, 0), SND_SOC_DAPM_REGULATOR_SUPPLY("CPVDD", 20, 0), SND_SOC_DAPM_REGULATOR_SUPPLY("MICVDD", 0, SND_SOC_DAPM_REGULATOR_BYPASS), SND_SOC_DAPM_REGULATOR_SUPPLY("SPKVDDL", 0, 0), SND_SOC_DAPM_REGULATOR_SUPPLY("SPKVDDR", 0, 0), SND_SOC_DAPM_SIGGEN("TONE"), SND_SOC_DAPM_SIGGEN("NOISE"), SND_SOC_DAPM_SIGGEN("HAPTICS"), SND_SOC_DAPM_INPUT("IN1L"), SND_SOC_DAPM_INPUT("IN1R"), SND_SOC_DAPM_INPUT("IN2L"), SND_SOC_DAPM_INPUT("IN2R"), SND_SOC_DAPM_INPUT("IN3L"), SND_SOC_DAPM_INPUT("IN3R"), SND_SOC_DAPM_INPUT("IN4L"), SND_SOC_DAPM_INPUT("IN4R"), SND_SOC_DAPM_PGA_E("IN1L PGA", ARIZONA_INPUT_ENABLES, ARIZONA_IN1L_ENA_SHIFT, 0, NULL, 0, arizona_in_ev, SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD | SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU), SND_SOC_DAPM_PGA_E("IN1R PGA", ARIZONA_INPUT_ENABLES, ARIZONA_IN1R_ENA_SHIFT, 0, NULL, 0, arizona_in_ev, SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
* * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or (at your * option) any later version. * */ #include <linux/init.h> #include <linux/module.h> #include <linux/platform_device.h> #include <sound/soc.h> static const struct snd_soc_dapm_widget bt_sco_widgets[] = { SND_SOC_DAPM_INPUT("RX"), SND_SOC_DAPM_OUTPUT("TX"), }; static const struct snd_soc_dapm_route bt_sco_routes[] = { { "Capture", NULL, "RX" }, { "TX", NULL, "Playback" }, }; static struct snd_soc_dai_driver bt_sco_dai = { .name = "bt-sco-pcm", .playback = { .stream_name = "Playback", .channels_min = 1, .channels_max = 1, .rates = SNDRV_PCM_RATE_8000,
SND_SOC_DAPM_PGA("Right LineIn", ALC5623_PWR_MANAG_ADD3, 6, 0, NULL, 0), SND_SOC_DAPM_PGA("Left AuxI", ALC5623_PWR_MANAG_ADD3, 5, 0, NULL, 0), SND_SOC_DAPM_PGA("Right AuxI", ALC5623_PWR_MANAG_ADD3, 4, 0, NULL, 0), SND_SOC_DAPM_PGA("MIC1 PGA", ALC5623_PWR_MANAG_ADD3, 3, 0, NULL, 0), SND_SOC_DAPM_PGA("MIC2 PGA", ALC5623_PWR_MANAG_ADD3, 2, 0, NULL, 0), SND_SOC_DAPM_PGA("MIC1 Pre Amp", ALC5623_PWR_MANAG_ADD3, 1, 0, NULL, 0), SND_SOC_DAPM_PGA("MIC2 Pre Amp", ALC5623_PWR_MANAG_ADD3, 0, 0, NULL, 0), SND_SOC_DAPM_MICBIAS("Mic Bias1", ALC5623_PWR_MANAG_ADD1, 11, 0), SND_SOC_DAPM_OUTPUT("AUXOUTL"), SND_SOC_DAPM_OUTPUT("AUXOUTR"), SND_SOC_DAPM_OUTPUT("HPL"), SND_SOC_DAPM_OUTPUT("HPR"), SND_SOC_DAPM_OUTPUT("SPKOUT"), SND_SOC_DAPM_OUTPUT("SPKOUTN"), SND_SOC_DAPM_INPUT("LINEINL"), SND_SOC_DAPM_INPUT("LINEINR"), SND_SOC_DAPM_INPUT("AUXINL"), SND_SOC_DAPM_INPUT("AUXINR"), SND_SOC_DAPM_INPUT("MIC1"), SND_SOC_DAPM_INPUT("MIC2"), SND_SOC_DAPM_VMID("Vmid"), }; static const char *alc5623_amp_names[] = {"AB Amp", "D Amp"}; static SOC_ENUM_SINGLE_DECL(alc5623_amp_enum, ALC5623_OUTPUT_MIXER_CTRL, 13, alc5623_amp_names); static const struct snd_kcontrol_new alc5623_amp_mux_controls = SOC_DAPM_ENUM("Route", alc5623_amp_enum);
0, 0, adau1761_left_mixer_controls), SOC_MIXER_ARRAY("Right Playback Mixer", ADAU1761_PLAY_MIXER_RIGHT0, 0, 0, adau1761_right_mixer_controls), SOC_MIXER_ARRAY("Left LR Playback Mixer", ADAU1761_PLAY_LR_MIXER_LEFT, 0, 0, adau1761_left_lr_mixer_controls), SOC_MIXER_ARRAY("Right LR Playback Mixer", ADAU1761_PLAY_LR_MIXER_RIGHT, 0, 0, adau1761_right_lr_mixer_controls), SND_SOC_DAPM_SUPPLY("Headphone", ADAU1761_PLAY_HP_LEFT_VOL, 0, 0, NULL, 0), SND_SOC_DAPM_SUPPLY_S("SYSCLK", 2, SND_SOC_NOPM, 0, 0, NULL, 0), SND_SOC_DAPM_POST("Dejitter fixup", adau1761_dejitter_fixup), SND_SOC_DAPM_INPUT("LAUX"), SND_SOC_DAPM_INPUT("RAUX"), SND_SOC_DAPM_INPUT("LINP"), SND_SOC_DAPM_INPUT("LINN"), SND_SOC_DAPM_INPUT("RINP"), SND_SOC_DAPM_INPUT("RINN"), SND_SOC_DAPM_OUTPUT("LOUT"), SND_SOC_DAPM_OUTPUT("ROUT"), SND_SOC_DAPM_OUTPUT("LHP"), SND_SOC_DAPM_OUTPUT("RHP"), }; static const struct snd_soc_dapm_widget adau1761_mono_dapm_widgets[] = { SND_SOC_DAPM_MIXER("Mono Playback Mixer", ADAU1761_PLAY_MIXER_MONO, 0, 0, NULL, 0),
SND_SOC_DAPM_OUTPUT("HPOUT"), SND_SOC_DAPM_AIF_IN("DAI_IN", "HiFi Capture", 0, SND_SOC_NOPM, 0, 0), SND_SOC_DAPM_ADC("Left ADC", "HiFi Capture", MAX9867_PWRMAN, 1, 0), SND_SOC_DAPM_ADC("Right ADC", "HiFi Capture", MAX9867_PWRMAN, 0, 0), SND_SOC_DAPM_MUX("Input Mux", SND_SOC_NOPM, 0, 0, &max9867_dapm_mux_controls), SND_SOC_DAPM_MIXER("Input Mixer", SND_SOC_NOPM, 0, 0, NULL, 0), SND_SOC_DAPM_SWITCH("Left Line", MAX9867_LEFTLINELVL, 6, 1, &max9867_left_dapm_control), SND_SOC_DAPM_SWITCH("Right Line", MAX9867_RIGTHLINELVL, 6, 1, &max9867_right_dapm_control), SND_SOC_DAPM_SWITCH("Line Mixer", SND_SOC_NOPM, 0, 0, &max9867_line_dapm_control), SND_SOC_DAPM_INPUT("LINE_IN"), }; static const struct snd_soc_dapm_route max9867_audio_map[] = { {"Left DAC", NULL, "DAI_OUT"}, {"Right DAC", NULL, "DAI_OUT"}, {"Output Mixer", NULL, "Left DAC"}, {"Output Mixer", NULL, "Right DAC"}, {"HPOUT", NULL, "Output Mixer"}, {"Left ADC", NULL, "DAI_IN"}, {"Right ADC", NULL, "DAI_IN"}, {"Input Mixer", NULL, "Left ADC"}, {"Input Mixer", NULL, "Right ADC"}, {"Input Mux", "Line", "Input Mixer"}, {"Input Mux", "Mic", "Input Mixer"},
return 0; } static const struct snd_soc_dapm_widget cs35l34_dapm_widgets[] = { SND_SOC_DAPM_AIF_IN_E("SDIN", NULL, 0, CS35L34_PWRCTL3, 1, 1, cs35l34_sdin_event, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_AIF_OUT("SDOUT", NULL, 0, CS35L34_PWRCTL3, 2, 1), SND_SOC_DAPM_SUPPLY("EXTCLK", CS35L34_PWRCTL3, 7, 1, cs35l34_mclk_event, SND_SOC_DAPM_PRE_PMD), SND_SOC_DAPM_OUTPUT("SPK"), SND_SOC_DAPM_INPUT("VP"), SND_SOC_DAPM_INPUT("VPST"), SND_SOC_DAPM_INPUT("ISENSE"), SND_SOC_DAPM_INPUT("VSENSE"), SND_SOC_DAPM_ADC("VMON ADC", NULL, CS35L34_PWRCTL2, 7, 1), SND_SOC_DAPM_ADC("IMON ADC", NULL, CS35L34_PWRCTL2, 6, 1), SND_SOC_DAPM_ADC("VPMON ADC", NULL, CS35L34_PWRCTL3, 3, 1), SND_SOC_DAPM_ADC("VBSTMON ADC", NULL, CS35L34_PWRCTL3, 4, 1), SND_SOC_DAPM_ADC("CLASS H", NULL, CS35L34_PWRCTL2, 5, 1), SND_SOC_DAPM_ADC("BOOST", NULL, CS35L34_PWRCTL2, 2, 1), SND_SOC_DAPM_OUT_DRV_E("Main AMP", CS35L34_PWRCTL2, 0, 1, NULL, 0, cs35l34_main_amp_event, SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD), };
if (SND_SOC_DAPM_EVENT_ON(event)) wm2000->anc_eng_ena = 1; if (SND_SOC_DAPM_EVENT_OFF(event)) wm2000->anc_eng_ena = 0; return wm2000_anc_set_mode(wm2000); } static const struct snd_soc_dapm_widget wm2000_dapm_widgets[] = { /* Externally visible pins */ SND_SOC_DAPM_OUTPUT("SPKN"), SND_SOC_DAPM_OUTPUT("SPKP"), SND_SOC_DAPM_INPUT("LINN"), SND_SOC_DAPM_INPUT("LINP"), SND_SOC_DAPM_PGA_E("ANC Engine", SND_SOC_NOPM, 0, 0, NULL, 0, wm2000_anc_power_event, SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD), }; /* Target, Path, Source */ static const struct snd_soc_dapm_route wm2000_audio_map[] = { { "SPKN", NULL, "ANC Engine" }, { "SPKP", NULL, "ANC Engine" }, { "ANC Engine", NULL, "LINN" }, { "ANC Engine", NULL, "LINP" }, };
/* UDA1341 has the DAC/ADC power down in STATUS1 */ static const struct snd_soc_dapm_widget uda1341_dapm_widgets[] = { SND_SOC_DAPM_DAC("DAC", "Playback", UDA134X_STATUS1, 0, 0), SND_SOC_DAPM_ADC("ADC", "Capture", UDA134X_STATUS1, 1, 0), }; /* UDA1340/4/5 has the DAC/ADC pwoer down in DATA0 11 */ static const struct snd_soc_dapm_widget uda1340_dapm_widgets[] = { SND_SOC_DAPM_DAC("DAC", "Playback", UDA134X_DATA011, 0, 0), SND_SOC_DAPM_ADC("ADC", "Capture", UDA134X_DATA011, 1, 0), }; /* Common DAPM widgets */ static const struct snd_soc_dapm_widget uda134x_dapm_widgets[] = { SND_SOC_DAPM_INPUT("VINL1"), SND_SOC_DAPM_INPUT("VINR1"), SND_SOC_DAPM_INPUT("VINL2"), SND_SOC_DAPM_INPUT("VINR2"), SND_SOC_DAPM_OUTPUT("VOUTL"), SND_SOC_DAPM_OUTPUT("VOUTR"), }; static const struct snd_soc_dapm_route uda134x_dapm_routes[] = { { "ADC", NULL, "VINL1" }, { "ADC", NULL, "VINR1" }, { "ADC", NULL, "VINL2" }, { "ADC", NULL, "VINR2" }, { "VOUTL", NULL, "DAC" }, { "VOUTR", NULL, "DAC" }, };
SND_SOC_DAPM_PGA("Left Line In", AC97_EXTENDED_MSTATUS, 6, 1, NULL, 0), SND_SOC_DAPM_PGA("Right Line In", AC97_EXTENDED_MSTATUS, 5, 1, NULL, 0), SND_SOC_DAPM_PGA("Mono In", AC97_EXTENDED_MSTATUS, 4, 1, NULL, 0), SND_SOC_DAPM_PGA("Mic A PGA", AC97_EXTENDED_MSTATUS, 3, 1, NULL, 0), SND_SOC_DAPM_PGA("Mic B PGA", AC97_EXTENDED_MSTATUS, 2, 1, NULL, 0), SND_SOC_DAPM_PGA("Mic A Pre Amp", AC97_EXTENDED_MSTATUS, 1, 1, NULL, 0), SND_SOC_DAPM_PGA("Mic B Pre Amp", AC97_EXTENDED_MSTATUS, 0, 1, NULL, 0), SND_SOC_DAPM_MICBIAS("Mic Bias", AC97_EXTENDED_MSTATUS, 14, 1), SND_SOC_DAPM_OUTPUT("MONO"), SND_SOC_DAPM_OUTPUT("HPL"), SND_SOC_DAPM_OUTPUT("HPR"), SND_SOC_DAPM_OUTPUT("SPKL"), SND_SOC_DAPM_OUTPUT("SPKR"), SND_SOC_DAPM_OUTPUT("OUT3"), SND_SOC_DAPM_OUTPUT("OUT4"), SND_SOC_DAPM_INPUT("LINEL"), SND_SOC_DAPM_INPUT("LINER"), SND_SOC_DAPM_INPUT("MONOIN"), SND_SOC_DAPM_INPUT("PCBEEP"), SND_SOC_DAPM_INPUT("MIC1"), SND_SOC_DAPM_INPUT("MIC2A"), SND_SOC_DAPM_INPUT("MIC2B"), SND_SOC_DAPM_VMID("VMID"), }; static const struct snd_soc_dapm_route wm9713_audio_map[] = { /* */ {"Left HP Mixer", "Beep Playback Switch", "PCBEEP"}, {"Left HP Mixer", "Voice Playback Switch", "Voice DAC"}, {"Left HP Mixer", "Aux Playback Switch", "Aux DAC"}, {"Left HP Mixer", "Bypass Playback Switch", "Left Line In"},
for (i = 0; i < ARRAY_SIZE(jzcodec_snd_controls); i++) { if ((err = snd_ctl_add(codec->card, snd_soc_cnew(&jzcodec_snd_controls[i], codec, NULL))) < 0) return err; } return 0; } static const struct snd_soc_dapm_widget jzcodec_dapm_widgets[] = { SND_SOC_DAPM_OUTPUT("LOUT"), SND_SOC_DAPM_OUTPUT("LHPOUT"), SND_SOC_DAPM_OUTPUT("ROUT"), SND_SOC_DAPM_OUTPUT("RHPOUT"), SND_SOC_DAPM_INPUT("MICIN"), SND_SOC_DAPM_INPUT("RLINEIN"), SND_SOC_DAPM_INPUT("LLINEIN"), }; static const char *intercon[][3] = { /* output mixer */ {"Output Mixer", "Line Bypass Switch", "Line Input"}, {"Output Mixer", "HiFi Playback Switch", "DAC"}, {"Output Mixer", "Mic Sidetone Switch", "Mic Bias"}, /* outputs */ {"RHPOUT", NULL, "Output Mixer"}, {"ROUT", NULL, "Output Mixer"}, {"LHPOUT", NULL, "Output Mixer"}, {"LOUT", NULL, "Output Mixer"},
ak4671_lin_mux_texts); static const struct snd_kcontrol_new ak4671_lin_mux_control = SOC_DAPM_ENUM("Route", ak4671_lin_mux_enum); static const char *ak4671_rin_mux_texts[] = {"RIN1", "RIN2", "RIN3", "RIN4"}; static const struct soc_enum ak4671_rin_mux_enum = SOC_ENUM_SINGLE(AK4671_MIC_SIGNAL_SELECT, 2, ARRAY_SIZE(ak4671_rin_mux_texts), ak4671_rin_mux_texts); static const struct snd_kcontrol_new ak4671_rin_mux_control = SOC_DAPM_ENUM("Route", ak4671_rin_mux_enum); static const struct snd_soc_dapm_widget ak4671_dapm_widgets[] = { /* Inputs */ SND_SOC_DAPM_INPUT("LIN1"), SND_SOC_DAPM_INPUT("RIN1"), SND_SOC_DAPM_INPUT("LIN2"), SND_SOC_DAPM_INPUT("RIN2"), SND_SOC_DAPM_INPUT("LIN3"), SND_SOC_DAPM_INPUT("RIN3"), SND_SOC_DAPM_INPUT("LIN4"), SND_SOC_DAPM_INPUT("RIN4"), /* Outputs */ SND_SOC_DAPM_OUTPUT("LOUT1"), SND_SOC_DAPM_OUTPUT("ROUT1"), SND_SOC_DAPM_OUTPUT("LOUT2"), SND_SOC_DAPM_OUTPUT("ROUT2"), SND_SOC_DAPM_OUTPUT("LOUT3"), SND_SOC_DAPM_OUTPUT("ROUT3"),
SOC_SINGLE("PGA AIN2R Switch", CS42L52_ADC_PGA_B, 1, 1, 0), SOC_SINGLE("PGA AIN3L Switch", CS42L52_ADC_PGA_A, 2, 1, 0), SOC_SINGLE("PGA AIN3R Switch", CS42L52_ADC_PGA_B, 2, 1, 0), SOC_SINGLE("PGA AIN4L Switch", CS42L52_ADC_PGA_A, 3, 1, 0), SOC_SINGLE("PGA AIN4R Switch", CS42L52_ADC_PGA_B, 3, 1, 0), SOC_SINGLE("PGA MICA Switch", CS42L52_ADC_PGA_A, 4, 1, 0), SOC_SINGLE("PGA MICB Switch", CS42L52_ADC_PGA_B, 4, 1, 0), }; static const struct snd_soc_dapm_widget cs42l52_dapm_widgets[] = { SND_SOC_DAPM_INPUT("AIN1L"), SND_SOC_DAPM_INPUT("AIN1R"), SND_SOC_DAPM_INPUT("AIN2L"), SND_SOC_DAPM_INPUT("AIN2R"), SND_SOC_DAPM_INPUT("AIN3L"), SND_SOC_DAPM_INPUT("AIN3R"), SND_SOC_DAPM_INPUT("AIN4L"), SND_SOC_DAPM_INPUT("AIN4R"), SND_SOC_DAPM_INPUT("MICA"), SND_SOC_DAPM_INPUT("MICB"), SND_SOC_DAPM_SIGGEN("Beep"), SND_SOC_DAPM_AIF_OUT("AIFOUTL", NULL, 0, SND_SOC_NOPM, 0, 0), SND_SOC_DAPM_AIF_OUT("AIFOUTR", NULL, 0, SND_SOC_NOPM, 0, 0),
static const char * const lm4857_mode_texts[] = { "Off", "Earpiece", "Loudspeaker", "Loudspeaker + Headphone", "Headphone", }; static SOC_VALUE_ENUM_SINGLE_AUTODISABLE_DECL(lm4857_mode_enum, LM4857_CTRL, 0, 0xf, lm4857_mode_texts, lm4857_mode_values); static const struct snd_kcontrol_new lm4857_mode_ctrl = SOC_DAPM_ENUM("Mode", lm4857_mode_enum); static const struct snd_soc_dapm_widget lm4857_dapm_widgets[] = { SND_SOC_DAPM_INPUT("IN"), SND_SOC_DAPM_DEMUX("Mode", SND_SOC_NOPM, 0, 0, &lm4857_mode_ctrl), SND_SOC_DAPM_OUTPUT("LS"), SND_SOC_DAPM_OUTPUT("HP"), SND_SOC_DAPM_OUTPUT("EP"), }; static const DECLARE_TLV_DB_SCALE(stereo_tlv, -4050, 150, 0); static const DECLARE_TLV_DB_SCALE(mono_tlv, -3450, 150, 0); static const struct snd_kcontrol_new lm4857_controls[] = { SOC_SINGLE_TLV("Left Playback Volume", LM4857_LVOL, 0, 31, 0, stereo_tlv), SOC_SINGLE_TLV("Right Playback Volume", LM4857_RVOL, 0, 31, 0,
SOC_ENUM_SINGLE_EXT(2, power_texts), }; static const struct snd_kcontrol_new sdp4430_controls[] = { SOC_ENUM_EXT("TWL6040 Power Mode", sdp4430_enum[0], sdp4430_get_power_mode, sdp4430_set_power_mode), }; /* SDP4430 machine DAPM */ static const struct snd_soc_dapm_widget sdp4430_twl6040_dapm_widgets[] = { SND_SOC_DAPM_MIC("Ext Mic", NULL), SND_SOC_DAPM_SPK("Ext Spk", NULL), SND_SOC_DAPM_MIC("Headset Mic", NULL), SND_SOC_DAPM_HP("Headset Stereophone", NULL), SND_SOC_DAPM_SPK("Earphone Spk", NULL), SND_SOC_DAPM_INPUT("Aux/FM Stereo In"), }; static const struct snd_soc_dapm_route audio_map[] = { /* External Mics: MAINMIC, SUBMIC with bias*/ {"MAINMIC", NULL, "Main Mic Bias"}, {"SUBMIC", NULL, "Main Mic Bias"}, {"Main Mic Bias", NULL, "Ext Mic"}, /* External Speakers: HFL, HFR */ {"Ext Spk", NULL, "HFL"}, {"Ext Spk", NULL, "HFR"}, /* Headset Mic: HSMIC with bias */ {"HSMIC", NULL, "Headset Mic Bias"}, {"Headset Mic Bias", NULL, "Headset Mic"},
static const struct snd_soc_dapm_widget adau1977_micbias_dapm_widgets[] = { SND_SOC_DAPM_SUPPLY("MICBIAS", ADAU1977_REG_MICBIAS, 3, 0, NULL, 0) }; static const struct snd_soc_dapm_widget adau1977_dapm_widgets[] = { SND_SOC_DAPM_SUPPLY("Vref", ADAU1977_REG_BLOCK_POWER_SAI, 4, 0, NULL, 0), SND_SOC_DAPM_ADC("ADC1", "Capture", ADAU1977_REG_BLOCK_POWER_SAI, 0, 0), SND_SOC_DAPM_ADC("ADC2", "Capture", ADAU1977_REG_BLOCK_POWER_SAI, 1, 0), SND_SOC_DAPM_ADC("ADC3", "Capture", ADAU1977_REG_BLOCK_POWER_SAI, 2, 0), SND_SOC_DAPM_ADC("ADC4", "Capture", ADAU1977_REG_BLOCK_POWER_SAI, 3, 0), SND_SOC_DAPM_INPUT("AIN1"), SND_SOC_DAPM_INPUT("AIN2"), SND_SOC_DAPM_INPUT("AIN3"), SND_SOC_DAPM_INPUT("AIN4"), SND_SOC_DAPM_OUTPUT("VREF"), }; static const struct snd_soc_dapm_route adau1977_dapm_routes[] = { { "ADC1", NULL, "AIN1" }, { "ADC2", NULL, "AIN2" }, { "ADC3", NULL, "AIN3" }, { "ADC4", NULL, "AIN4" }, { "ADC1", NULL, "Vref" }, { "ADC2", NULL, "Vref" },
SOC_ENUM("ADCB Right Source", ak5702_enum[5]), SOC_ENUM("ADCA Left Type", ak5702_enum[6]), SOC_ENUM("ADCA Right Type", ak5702_enum[7]), SOC_ENUM("ADCB Left Type", ak5702_enum[8]), SOC_ENUM("ADCB Right Type", ak5702_enum[9]), }; /* ak5702 dapm widgets */ static const struct snd_soc_dapm_widget ak5702_dapm_widgets[] = { SND_SOC_DAPM_ADC("ADCA Left", "Capture", AK5702_PM1, 0, 0), SND_SOC_DAPM_ADC("ADCA Right", "Capture", AK5702_PM1, 1, 0), SND_SOC_DAPM_ADC("ADCB Left", "Capture", AK5702_PM2, 0, 0), SND_SOC_DAPM_ADC("ADCB Right", "Capture", AK5702_PM2, 1, 0), SND_SOC_DAPM_INPUT("ADCA Left Input"), SND_SOC_DAPM_INPUT("ADCA Right Input"), SND_SOC_DAPM_INPUT("ADCB Left Input"), SND_SOC_DAPM_INPUT("ADCB Right Input"), }; static const struct snd_soc_dapm_route audio_map[] = { {"ADCA Left", NULL, "ADCA Left Input"}, {"ADCA Right", NULL, "ADCA Right Input"}, {"ADCB Left", NULL, "ADCB Left Input"}, {"ADCB Right", NULL, "ADCB Right Input"}, }; static int ak5702_add_widgets(struct snd_soc_codec *codec) { snd_soc_dapm_new_controls(codec, ak5702_dapm_widgets,
SND_SOC_DAPM_PGA("TELOUT Amp", CX20442_PM, CX20442_TELOUT, 0, NULL, 0), SND_SOC_DAPM_PGA("SPKOUT Amp", CX20442_PM, CX20442_SPKOUT, 0, NULL, 0), SND_SOC_DAPM_PGA("SPKOUT AGC", CX20442_PM, CX20442_AGC, 0, NULL, 0), SND_SOC_DAPM_DAC("DAC", "Playback", SND_SOC_NOPM, 0, 0), SND_SOC_DAPM_ADC("ADC", "Capture", SND_SOC_NOPM, 0, 0), SND_SOC_DAPM_MIXER("Input Mixer", SND_SOC_NOPM, 0, 0, NULL, 0), SND_SOC_DAPM_MICBIAS("TELIN Bias", CX20442_PM, CX20442_TELIN, 0), SND_SOC_DAPM_MICBIAS("MIC Bias", CX20442_PM, CX20442_MIC, 0), SND_SOC_DAPM_PGA("MIC AGC", CX20442_PM, CX20442_AGC, 0, NULL, 0), SND_SOC_DAPM_INPUT("TELIN"), SND_SOC_DAPM_INPUT("MIC"), SND_SOC_DAPM_INPUT("AGCIN"), }; static const struct snd_soc_dapm_route cx20442_audio_map[] = { {"TELOUT", NULL, "TELOUT Amp"}, {"SPKOUT", NULL, "SPKOUT Mixer"}, {"SPKOUT Mixer", NULL, "SPKOUT Amp"}, {"TELOUT Amp", NULL, "DAC"}, {"SPKOUT Amp", NULL, "DAC"}, {"SPKOUT Mixer", NULL, "SPKOUT AGC"}, {"SPKOUT AGC", NULL, "AGCIN"},
SND_SOC_DAPM_ADC("ADC", "HiFi Capture", AK4641_PM1, 0, 0), SND_SOC_DAPM_PGA("Mic", AK4641_PM1, 1, 0, NULL, 0), SND_SOC_DAPM_PGA("AUX In", AK4641_PM1, 2, 0, NULL, 0), SND_SOC_DAPM_PGA("Mono Out", AK4641_PM1, 3, 0, NULL, 0), SND_SOC_DAPM_PGA("Line Out", AK4641_PM1, 4, 0, NULL, 0), SND_SOC_DAPM_DAC("DAC", "HiFi Playback", AK4641_PM2, 0, 0), SND_SOC_DAPM_PGA("Mono Out 2", AK4641_PM2, 3, 0, NULL, 0), SND_SOC_DAPM_ADC("Voice ADC", "Voice Capture", AK4641_BTIF, 0, 0), SND_SOC_DAPM_DAC("Voice DAC", "Voice Playback", AK4641_BTIF, 1, 0), SND_SOC_DAPM_MICBIAS("Mic Int Bias", AK4641_MIC, 3, 0), SND_SOC_DAPM_MICBIAS("Mic Ext Bias", AK4641_MIC, 4, 0), SND_SOC_DAPM_INPUT("MICIN"), SND_SOC_DAPM_INPUT("MICEXT"), SND_SOC_DAPM_INPUT("AUX"), SND_SOC_DAPM_INPUT("AIN"), }; static const struct snd_soc_dapm_route ak4641_audio_map[] = { /* Stereo Mixer */ {"Stereo Mixer", "Playback Switch", "DAC"}, {"Stereo Mixer", "Mic Sidetone Switch", "Input Mux"}, {"Stereo Mixer", "Aux Bypass Switch", "AUX In"}, /* Mono 1 Mixer */ {"Mono1 Mixer", "Mic Mono Sidetone Switch", "Input Mux"}, {"Mono1 Mixer", "Mono Playback Switch", "DAC"},
6, 1, NULL, 0), SND_SOC_DAPM_PGA("Left Headphone Out", WM8985_POWER_MANAGEMENT_2, 7, 0, NULL, 0), SND_SOC_DAPM_PGA("Right Headphone Out", WM8985_POWER_MANAGEMENT_2, 8, 0, NULL, 0), SND_SOC_DAPM_PGA("Left Speaker Out", WM8985_POWER_MANAGEMENT_3, 5, 0, NULL, 0), SND_SOC_DAPM_PGA("Right Speaker Out", WM8985_POWER_MANAGEMENT_3, 6, 0, NULL, 0), SND_SOC_DAPM_SUPPLY("Mic Bias", WM8985_POWER_MANAGEMENT_1, 4, 0, NULL, 0), SND_SOC_DAPM_INPUT("LIN"), SND_SOC_DAPM_INPUT("LIP"), SND_SOC_DAPM_INPUT("RIN"), SND_SOC_DAPM_INPUT("RIP"), SND_SOC_DAPM_INPUT("AUXL"), SND_SOC_DAPM_INPUT("AUXR"), SND_SOC_DAPM_INPUT("L2"), SND_SOC_DAPM_INPUT("R2"), SND_SOC_DAPM_OUTPUT("HPL"), SND_SOC_DAPM_OUTPUT("HPR"), SND_SOC_DAPM_OUTPUT("SPKL"), SND_SOC_DAPM_OUTPUT("SPKR") }; static const struct snd_soc_dapm_route wm8985_dapm_routes[] = { { "Right Output Mixer", "PCM Switch", "Right DAC" },
return 0; } /* OUT bypass */ static const char *max9877_out_bypass_texts[] = {"OUT Amp", "RXIN"}; SOC_ENUM_SINGLE_DECL(max9877_out_bypass_enum, MAX9877_OUTPUT_MODE, MAX9877_BYPASS_SHIFT, max9877_out_bypass_texts); static const struct snd_kcontrol_new max9877_out_bypass_control = SOC_DAPM_ENUM("Route", max9877_out_bypass_enum); /* DAPM widgets */ static const struct snd_soc_dapm_widget max9877_dapm_widgets[] = { /* INPUTS */ SND_SOC_DAPM_INPUT("INA1"), SND_SOC_DAPM_INPUT("INA2"), SND_SOC_DAPM_INPUT("INB1"), SND_SOC_DAPM_INPUT("INB2"), SND_SOC_DAPM_INPUT("RXIN"), /* OUTPUTS */ SND_SOC_DAPM_OUTPUT("HPL"), SND_SOC_DAPM_OUTPUT("HPR"), SND_SOC_DAPM_OUTPUT("OUT"), /* MUXES */ SND_SOC_DAPM_MUX("OUT Bypass", SND_SOC_NOPM, 0, 0, &max9877_out_bypass_control), /* MIXERS */
if (!(machine->gpio_requested & GPIO_HP_MUTE)) return 0; gpio_set_value_cansleep(pdata->gpio_hp_mute, !SND_SOC_DAPM_EVENT_ON(event)); return 0; } static const struct snd_soc_dapm_widget tegra_aic326x_dapm_widgets[] = { SND_SOC_DAPM_SPK("Int Spk", tegra_aic326x_event_int_spk), SND_SOC_DAPM_HP("Earpiece", NULL), SND_SOC_DAPM_HP("Headphone Jack", tegra_aic326x_event_hp), SND_SOC_DAPM_MIC("Mic Jack", NULL), SND_SOC_DAPM_INPUT("Ext Mic"), SND_SOC_DAPM_LINE("Linein", NULL), SND_SOC_DAPM_MIC("Int Mic", NULL), }; static const struct snd_soc_dapm_route aic326x_audio_map[] = { {"Int Spk", NULL, "SPKL"}, {"Int Spk", NULL, "SPKR"}, {"Earpiece", NULL, "RECP"}, {"Earpiece", NULL, "RECM"}, {"Headphone Jack", NULL, "HPL"}, {"Headphone Jack", NULL, "HPR"}, /* internal (IN2L/IN2R) mic is stero */ {"Mic Bias Int" ,NULL, "Int Mic"}, {"IN2L", NULL, "Mic Bias Int"}, {"Mic Bias Int" ,NULL, "Int Mic"},
SOC_ENUM_SINGLE(WM8900_REG_LOUTMIXCTL1, 1, 2, wm9700_lp_mux); static const struct snd_kcontrol_new wm8900_lineout2_lp = SOC_DAPM_ENUM("Route", wm8900_lineout2_lp_mux); static const struct snd_soc_dapm_widget wm8900_dapm_widgets[] = { /* Externally visible pins */ SND_SOC_DAPM_OUTPUT("LINEOUT1L"), SND_SOC_DAPM_OUTPUT("LINEOUT1R"), SND_SOC_DAPM_OUTPUT("LINEOUT2L"), SND_SOC_DAPM_OUTPUT("LINEOUT2R"), SND_SOC_DAPM_OUTPUT("HP_L"), SND_SOC_DAPM_OUTPUT("HP_R"), SND_SOC_DAPM_INPUT("RINPUT1"), SND_SOC_DAPM_INPUT("LINPUT1"), SND_SOC_DAPM_INPUT("RINPUT2"), SND_SOC_DAPM_INPUT("LINPUT2"), SND_SOC_DAPM_INPUT("RINPUT3"), SND_SOC_DAPM_INPUT("LINPUT3"), SND_SOC_DAPM_INPUT("AUX"), SND_SOC_DAPM_VMID("VMID"), /* Input */ SND_SOC_DAPM_MIXER("Left Input PGA", WM8900_REG_POWER2, 3, 0, wm8900_linpga_controls, ARRAY_SIZE(wm8900_linpga_controls)), SND_SOC_DAPM_MIXER("Right Input PGA", WM8900_REG_POWER2, 2, 0, wm8900_rinpga_controls,
}; const struct snd_soc_dapm_widget midas_dapm_widgets[] = { SND_SOC_DAPM_HP("HP", NULL), SND_SOC_DAPM_SPK("SPK", midas_ext_spkmode), SND_SOC_DAPM_SPK("RCV", NULL), SND_SOC_DAPM_LINE("LINE", midas_lineout_switch), SND_SOC_DAPM_LINE("HDMI", NULL), SND_SOC_DAPM_MIC("Headset Mic", NULL), SND_SOC_DAPM_MIC("Main Mic", midas_ext_micbias), SND_SOC_DAPM_MIC("Sub Mic", midas_ext_submicbias), SND_SOC_DAPM_MIC("Third Mic", midas_ext_thirdmicbias), SND_SOC_DAPM_LINE("FM In", NULL), SND_SOC_DAPM_INPUT("S5P RP"), }; const struct snd_soc_dapm_route midas_dapm_routes[] = { { "HP", NULL, "HPOUT1L" }, { "HP", NULL, "HPOUT1R" }, { "SPK", NULL, "SPKOUTLN" }, { "SPK", NULL, "SPKOUTLP" }, { "SPK", NULL, "SPKOUTRN" }, { "SPK", NULL, "SPKOUTRP" }, { "RCV", NULL, "HPOUT2N" }, { "RCV", NULL, "HPOUT2P" }, { "LINE", NULL, "LINEOUT2N" },
static const struct snd_soc_dapm_widget ad193x_dapm_widgets[] = { SND_SOC_DAPM_DAC("DAC", "Playback", SND_SOC_NOPM, 0, 0), SND_SOC_DAPM_PGA("DAC Output", AD193X_DAC_CTRL0, 0, 1, NULL, 0), SND_SOC_DAPM_SUPPLY("PLL_PWR", AD193X_PLL_CLK_CTRL0, 0, 1, NULL, 0), SND_SOC_DAPM_SUPPLY("SYSCLK", AD193X_PLL_CLK_CTRL0, 7, 0, NULL, 0), SND_SOC_DAPM_VMID("VMID"), SND_SOC_DAPM_OUTPUT("DAC1OUT"), SND_SOC_DAPM_OUTPUT("DAC2OUT"), SND_SOC_DAPM_OUTPUT("DAC3OUT"), SND_SOC_DAPM_OUTPUT("DAC4OUT"), }; static const struct snd_soc_dapm_widget ad193x_adc_widgets[] = { SND_SOC_DAPM_ADC("ADC", "Capture", SND_SOC_NOPM, 0, 0), SND_SOC_DAPM_SUPPLY("ADC_PWR", AD193X_ADC_CTRL0, 0, 1, NULL, 0), SND_SOC_DAPM_INPUT("ADC1IN"), SND_SOC_DAPM_INPUT("ADC2IN"), }; static const struct snd_soc_dapm_route audio_paths[] = { { "DAC", NULL, "SYSCLK" }, { "DAC Output", NULL, "DAC" }, { "DAC Output", NULL, "VMID" }, { "DAC1OUT", NULL, "DAC Output" }, { "DAC2OUT", NULL, "DAC Output" }, { "DAC3OUT", NULL, "DAC Output" }, { "DAC4OUT", NULL, "DAC Output" }, { "SYSCLK", NULL, "PLL_PWR" }, }; static const struct snd_soc_dapm_route ad193x_adc_audio_paths[] = {
7, 1, 0), SOC_SINGLE("DL12 Playback Switch", ISABELLE_DL12_INTF_CFG_REG, 7, 1, 0), SOC_SINGLE("DL34 Playback Switch", ISABELLE_DL34_INTF_CFG_REG, 7, 1, 0), SOC_SINGLE("DL56 Playback Switch", ISABELLE_DL56_INTF_CFG_REG, 7, 1, 0), /* DMIC Switch */ SOC_SINGLE("DMIC Switch", ISABELLE_DMIC_CFG_REG, 0, 1, 0), }; static const struct snd_soc_dapm_widget isabelle_dapm_widgets[] = { /* Inputs */ SND_SOC_DAPM_INPUT("MAINMIC"), SND_SOC_DAPM_INPUT("HSMIC"), SND_SOC_DAPM_INPUT("SUBMIC"), SND_SOC_DAPM_INPUT("LINEIN1"), SND_SOC_DAPM_INPUT("LINEIN2"), SND_SOC_DAPM_INPUT("DMICDAT"), /* Outputs */ SND_SOC_DAPM_OUTPUT("HSOL"), SND_SOC_DAPM_OUTPUT("HSOR"), SND_SOC_DAPM_OUTPUT("HFL"), SND_SOC_DAPM_OUTPUT("HFR"), SND_SOC_DAPM_OUTPUT("EP"), SND_SOC_DAPM_OUTPUT("LINEOUT1"), SND_SOC_DAPM_OUTPUT("LINEOUT2"),