/* Stereo Mixer for Line out*/ static const struct snd_kcontrol_new ak4647_line_stereo_mixer_controls[] = { SOC_DAPM_SINGLE("Playback Switch", AK4647_SIG1, 4, 1, 0), SOC_DAPM_SINGLE("Mic Sidetone Switch", AK4647_SIG2, 2, 1, 0), }; /* ak4647 dapm widgets */ static const struct snd_soc_dapm_widget ak4647_dapm_widgets[] = { SND_SOC_DAPM_MIXER("Headphone Mixer", SND_SOC_NOPM, 0, 0, &ak4647_hp_stereo_mixer_controls[0], ARRAY_SIZE(ak4647_hp_stereo_mixer_controls)), SND_SOC_DAPM_MIXER("Lineout Mixer", SND_SOC_NOPM, 0, 0, &ak4647_line_stereo_mixer_controls[0], ARRAY_SIZE(ak4647_line_stereo_mixer_controls)), SND_SOC_DAPM_DAC("DAC", "Playback", AK4647_PM1, 2, 0), SND_SOC_DAPM_OUTPUT("HPL"), SND_SOC_DAPM_OUTPUT("HPR"), SND_SOC_DAPM_OUTPUT("LOUT"), SND_SOC_DAPM_ADC("Left ADC", "Capture", AK4647_PM1, 0, 0), SND_SOC_DAPM_ADC("Right ADC", "Capture", AK4647_PM3, 0, 0), SND_SOC_DAPM_PGA("HP R Amp", AK4647_PM2, 4, 0, NULL, 0), SND_SOC_DAPM_PGA("HP L Amp", AK4647_PM2, 5, 0, NULL, 0), SND_SOC_DAPM_PGA("Mic", AK4647_PM1, 5, 0, NULL, 0), SND_SOC_DAPM_PGA("Line Out Amp", AK4647_PM1, 3, 0, NULL, 0), SND_SOC_DAPM_MICBIAS("Mic Bias", AK4647_SIG1, 2, 0), SND_SOC_DAPM_INPUT("Left Input"), SND_SOC_DAPM_INPUT("Right Input"), };
6, 0, &passthrul_ctl), SND_SOC_DAPM_SWITCH("Bypass Right", CS42L52_MISC_CTL, 7, 0, &passthrur_ctl), SND_SOC_DAPM_MUX("PCM Left Swap", SND_SOC_NOPM, 0, 0, &pcma_mixer), SND_SOC_DAPM_MUX("PCM Right Swap", SND_SOC_NOPM, 0, 0, &pcmb_mixer), SND_SOC_DAPM_SWITCH("HP Left Amp", SND_SOC_NOPM, 0, 0, &hpl_ctl), SND_SOC_DAPM_SWITCH("HP Right Amp", SND_SOC_NOPM, 0, 0, &hpr_ctl), SND_SOC_DAPM_SWITCH("SPK Left Amp", SND_SOC_NOPM, 0, 0, &spkl_ctl), SND_SOC_DAPM_SWITCH("SPK Right Amp", SND_SOC_NOPM, 0, 0, &spkr_ctl), SND_SOC_DAPM_OUTPUT("HPOUTA"), SND_SOC_DAPM_OUTPUT("HPOUTB"), SND_SOC_DAPM_OUTPUT("SPKOUTA"), SND_SOC_DAPM_OUTPUT("SPKOUTB"), }; static const struct snd_soc_dapm_route cs42l52_audio_map[] = { {"Capture", NULL, "AIFOUTL"}, {"Capture", NULL, "AIFOUTL"}, {"AIFOUTL", NULL, "Output Mux"}, {"AIFOUTR", NULL, "Output Mux"}, {"Output Mux", "ADC", "ADC Left"},
SND_SOC_DAPM_PGA("Left Headphone", AC97_EXTENDED_MSTATUS, 10, 1, NULL, 0), SND_SOC_DAPM_PGA("Right Headphone", AC97_EXTENDED_MSTATUS, 9, 1, NULL, 0), SND_SOC_DAPM_PGA("Left Speaker", AC97_EXTENDED_MSTATUS, 8, 1, NULL, 0), SND_SOC_DAPM_PGA("Right Speaker", AC97_EXTENDED_MSTATUS, 7, 1, NULL, 0), SND_SOC_DAPM_PGA("Out 3", AC97_EXTENDED_MSTATUS, 11, 1, NULL, 0), SND_SOC_DAPM_PGA("Out 4", AC97_EXTENDED_MSTATUS, 12, 1, NULL, 0), SND_SOC_DAPM_PGA("Mono Out", AC97_EXTENDED_MSTATUS, 13, 1, NULL, 0), 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"), };
/* ADC high-pass filter */ SOC_SINGLE("ADC High Pass Filter Switch", AD1836_ADC_CTRL1, AD1836_ADC_HIGHPASS_FILTER, 1, 0), /* DAC de-emphasis */ SOC_ENUM("Playback Deemphasis", ad1836_deemp_enum), }; static const struct snd_soc_dapm_widget ad1836_dapm_widgets[] = { SND_SOC_DAPM_DAC("DAC", "Playback", AD1836_DAC_CTRL1, AD1836_DAC_POWERDOWN, 1), SND_SOC_DAPM_ADC("ADC", "Capture", SND_SOC_NOPM, 0, 0), SND_SOC_DAPM_SUPPLY("ADC_PWR", AD1836_ADC_CTRL1, AD1836_ADC_POWERDOWN, 1, NULL, 0), SND_SOC_DAPM_OUTPUT("DAC1OUT"), SND_SOC_DAPM_OUTPUT("DAC2OUT"), SND_SOC_DAPM_OUTPUT("DAC3OUT"), SND_SOC_DAPM_INPUT("ADC1IN"), SND_SOC_DAPM_INPUT("ADC2IN"), }; static const struct snd_soc_dapm_route audio_paths[] = { { "DAC", NULL, "ADC_PWR" }, { "ADC", NULL, "ADC_PWR" }, { "DAC1OUT", "DAC1 Switch", "DAC" }, { "DAC2OUT", "DAC2 Switch", "DAC" }, { "DAC3OUT", "DAC3 Switch", "DAC" }, { "ADC", "ADC1 Switch", "ADC1IN" }, { "ADC", "ADC2 Switch", "ADC2IN" }, };
SI476X_DAUDIO_MODE_LEFT_J = (0x8 << 1), SI476X_DAUDIO_MODE_RIGHT_J = (0x9 << 1), SI476X_DAUDIO_MODE_IB = (1 << 5), SI476X_DAUDIO_MODE_IF = (1 << 6), }; enum si476x_pcm_format { SI476X_PCM_FORMAT_S8 = 2, SI476X_PCM_FORMAT_S16_LE = 4, SI476X_PCM_FORMAT_S20_3LE = 5, SI476X_PCM_FORMAT_S24_LE = 6, }; static const struct snd_soc_dapm_widget si476x_dapm_widgets[] = { SND_SOC_DAPM_OUTPUT("LOUT"), SND_SOC_DAPM_OUTPUT("ROUT"), }; static const struct snd_soc_dapm_route si476x_dapm_routes[] = { { "Capture", NULL, "LOUT" }, { "Capture", NULL, "ROUT" }, }; static int si476x_codec_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt) { struct si476x_core *core = i2c_mfd_cell_to_core(codec_dai->dev); int err; u16 format = 0;
SOC_ENUM("Mic1Mode Capture Route", sn95031_micmode1_enum), SOC_ENUM("Mic2Mode Capture Route", sn95031_micmode2_enum), SOC_ENUM("DMIC12 Capture Route", sn95031_dmic12_cfg_enum), SOC_ENUM("DMIC34 Capture Route", sn95031_dmic34_cfg_enum), SOC_ENUM("DMIC56 Capture Route", sn95031_dmic56_cfg_enum), SOC_SINGLE_TLV("Mic1 Capture Volume", SN95031_MICAMP1, 2, 4, 0, mic_tlv), SOC_SINGLE_TLV("Mic2 Capture Volume", SN95031_MICAMP2, 2, 4, 0, mic_tlv), }; /* DAPM widgets */ static const struct snd_soc_dapm_widget sn95031_dapm_widgets[] = { /* all end points mic, hs etc */ SND_SOC_DAPM_OUTPUT("HPOUTL"), SND_SOC_DAPM_OUTPUT("HPOUTR"), SND_SOC_DAPM_OUTPUT("EPOUT"), SND_SOC_DAPM_OUTPUT("IHFOUTL"), SND_SOC_DAPM_OUTPUT("IHFOUTR"), SND_SOC_DAPM_OUTPUT("LINEOUTL"), SND_SOC_DAPM_OUTPUT("LINEOUTR"), SND_SOC_DAPM_OUTPUT("VIB1OUT"), SND_SOC_DAPM_OUTPUT("VIB2OUT"), SND_SOC_DAPM_INPUT("AMIC1"), /* headset mic */ SND_SOC_DAPM_INPUT("AMIC2"), SND_SOC_DAPM_INPUT("DMIC1"), SND_SOC_DAPM_INPUT("DMIC2"), SND_SOC_DAPM_INPUT("DMIC3"), SND_SOC_DAPM_INPUT("DMIC4"),
ssm2518_drc_peak_detector_attack_time_enum), SOC_ENUM("DRC Peak Detector Release Time", ssm2518_drc_peak_detector_release_time_enum), SOC_ENUM("DRC Attack Time", ssm2518_drc_attack_time_enum), SOC_ENUM("DRC Decay Time", ssm2518_drc_decay_time_enum), SOC_ENUM("DRC Hold Time", ssm2518_drc_hold_time_enum), SOC_ENUM("DRC Noise Gate Hold Time", ssm2518_drc_noise_gate_hold_time_enum), SOC_ENUM("DRC RMS Averaging Time", ssm2518_drc_rms_averaging_time_enum), }; static const struct snd_soc_dapm_widget ssm2518_dapm_widgets[] = { SND_SOC_DAPM_DAC("DACL", "HiFi Playback", SSM2518_REG_POWER2, 1, 1), SND_SOC_DAPM_DAC("DACR", "HiFi Playback", SSM2518_REG_POWER2, 2, 1), SND_SOC_DAPM_OUTPUT("OUTL"), SND_SOC_DAPM_OUTPUT("OUTR"), }; static const struct snd_soc_dapm_route ssm2518_routes[] = { { "OUTL", NULL, "DACL" }, { "OUTR", NULL, "DACR" }, }; struct ssm2518_mcs_lut { unsigned int rate; const unsigned int *sysclks; }; static const unsigned int ssm2518_sysclks_2048000[] = { 2048000, 4096000, 8192000, 12288000, 16384000, 24576000,
SND_SOC_DAPM_MIXER("Left Mixer", SND_SOC_NOPM, 0, 0, &es8323_left_mixer_controls[0], ARRAY_SIZE(es8323_left_mixer_controls)), SND_SOC_DAPM_MIXER("Right Mixer", SND_SOC_NOPM, 0, 0, &es8323_right_mixer_controls[0], ARRAY_SIZE(es8323_right_mixer_controls)), SND_SOC_DAPM_PGA("Right Out 2", ES8323_DACPOWER, 2, 0, NULL, 0), SND_SOC_DAPM_PGA("Left Out 2", ES8323_DACPOWER, 3, 0, NULL, 0), SND_SOC_DAPM_PGA("Right Out 1", ES8323_DACPOWER, 4, 0, NULL, 0), SND_SOC_DAPM_PGA("Left Out 1", ES8323_DACPOWER, 5, 0, NULL, 0), SND_SOC_DAPM_PGA("LAMP", ES8323_ADCCONTROL1, 4, 0, NULL, 0), SND_SOC_DAPM_PGA("RAMP", ES8323_ADCCONTROL1, 0, 0, NULL, 0), SND_SOC_DAPM_OUTPUT("LOUT1"), SND_SOC_DAPM_OUTPUT("ROUT1"), SND_SOC_DAPM_OUTPUT("LOUT2"), SND_SOC_DAPM_OUTPUT("ROUT2"), SND_SOC_DAPM_OUTPUT("VREF"), SND_SOC_DAPM_PRE("PRE", es8323_dapm_pre_event), SND_SOC_DAPM_POST("POST", es8323_dapm_post_event), #endif }; static const struct snd_soc_dapm_route audio_map[] = { { "Left Line Mux", "NULL", "LINPUT1" }, { "Left Line Mux", "NULL", "LINPUT2" }, { "Left Line Mux", "NULL", "Left PGA Mux" },
SND_SOC_DAPM_PGA("Phone", ALC5632_PWR_MANAG_ADD3, 5, 0, NULL, 0), SND_SOC_DAPM_PGA("Phone ADMix", ALC5632_PWR_MANAG_ADD3, 4, 0, NULL, 0), SND_SOC_DAPM_PGA("MIC1 PGA", ALC5632_PWR_MANAG_ADD3, 3, 0, NULL, 0), SND_SOC_DAPM_PGA("MIC2 PGA", ALC5632_PWR_MANAG_ADD3, 2, 0, NULL, 0), SND_SOC_DAPM_PGA("MIC1 Pre Amp", ALC5632_PWR_MANAG_ADD3, 1, 0, NULL, 0), SND_SOC_DAPM_PGA("MIC2 Pre Amp", ALC5632_PWR_MANAG_ADD3, 0, 0, NULL, 0), SND_SOC_DAPM_SUPPLY("MICBIAS1", ALC5632_PWR_MANAG_ADD1, 3, 0, NULL, 0), SND_SOC_DAPM_SUPPLY("MICBIAS2", ALC5632_PWR_MANAG_ADD1, 2, 0, NULL, 0), SND_SOC_DAPM_PGA_E("D Amp", ALC5632_PWR_MANAG_ADD2, 14, 0, NULL, 0, amp_mixer_event, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_PGA("AB Amp", ALC5632_PWR_MANAG_ADD2, 15, 0, NULL, 0), SND_SOC_DAPM_MUX("AB-D Amp Mux", ALC5632_PWR_MANAG_ADD1, 10, 0, &alc5632_amp_mux_controls), SND_SOC_DAPM_OUTPUT("AUXOUT"), 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("PHONEP"), SND_SOC_DAPM_INPUT("PHONEN"), SND_SOC_DAPM_INPUT("DMICDAT"), SND_SOC_DAPM_INPUT("MIC1"), SND_SOC_DAPM_INPUT("MIC2"), SND_SOC_DAPM_VMID("Vmid"), };
SND_SOC_DAPM_PGA("HL Right DAC", SND_SOC_NOPM, 0, 0, NULL, 0), SND_SOC_DAPM_PGA("SPK DAC", SND_SOC_NOPM, 0, 0, NULL, 0), SND_SOC_DAPM_PGA("ESL DAC", SND_SOC_NOPM, 0, 0, NULL, 0), SND_SOC_DAPM_SWITCH("HP Amp", SND_SOC_NOPM, 0, 0, &hp_amp_ctl), SND_SOC_DAPM_SWITCH("LO Amp", SND_SOC_NOPM, 0, 0, &lo_amp_ctl), SND_SOC_DAPM_SWITCH("SPK Amp", SND_SOC_NOPM, 0, 0, &spk_amp_ctl), SND_SOC_DAPM_SWITCH("EAR Amp", SND_SOC_NOPM, 0, 0, &ear_amp_ctl), SND_SOC_DAPM_SWITCH("SPKLO Amp", SND_SOC_NOPM, 0, 0, &spklo_amp_ctl), SND_SOC_DAPM_OUTPUT("HPOUTA"), SND_SOC_DAPM_OUTPUT("HPOUTB"), SND_SOC_DAPM_OUTPUT("LINEOUTA"), SND_SOC_DAPM_OUTPUT("LINEOUTB"), SND_SOC_DAPM_OUTPUT("EAROUT"), SND_SOC_DAPM_OUTPUT("SPKOUT"), SND_SOC_DAPM_OUTPUT("SPKLINEOUT"), }; static const struct snd_soc_dapm_route cs42l73_audio_map[] = { /* SPKLO EARSPK Paths */ {"EAROUT", NULL, "EAR Amp"}, {"SPKLINEOUT", NULL, "SPKLO Amp"}, {"EAR Amp", "Switch", "ESL DAC"},
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 audio_map[] = { /* Output mixer */ {"Right Output Mixer", "PCM Playback Switch", "Right DAC"}, {"Right Output Mixer", "Aux Playback Switch", "RAUX"}, {"Right Output Mixer", "Line Bypass Switch", "Right Boost Mixer"}, {"Left Output Mixer", "PCM Playback Switch", "Left DAC"}, {"Left Output Mixer", "Aux Playback Switch", "LAUX"}, {"Left Output Mixer", "Line Bypass Switch", "Left Boost Mixer"},
.hw_params = pcm1792a_hw_params, .digital_mute = pcm1792a_digital_mute, }; static const DECLARE_TLV_DB_SCALE(pcm1792a_dac_tlv, -12000, 50, 1); static const struct snd_kcontrol_new pcm1792a_controls[] = { SOC_DOUBLE_R_RANGE_TLV("DAC Playback Volume", PCM1792A_DAC_VOL_LEFT, PCM1792A_DAC_VOL_RIGHT, 0, 0xf, 0xff, 0, pcm1792a_dac_tlv), SOC_SINGLE("DAC Invert Output Switch", PCM1792A_MODE_CONTROL, 7, 1, 0), SOC_SINGLE("DAC Rolloff Filter Switch", PCM1792A_MODE_CONTROL, 1, 1, 0), }; static const struct snd_soc_dapm_widget pcm1792a_dapm_widgets[] = { SND_SOC_DAPM_OUTPUT("IOUTL+"), SND_SOC_DAPM_OUTPUT("IOUTL-"), SND_SOC_DAPM_OUTPUT("IOUTR+"), SND_SOC_DAPM_OUTPUT("IOUTR-"), }; static const struct snd_soc_dapm_route pcm1792a_dapm_routes[] = { { "IOUTL+", NULL, "Playback" }, { "IOUTL-", NULL, "Playback" }, { "IOUTR+", NULL, "Playback" }, { "IOUTR-", NULL, "Playback" }, }; static struct snd_soc_dai_driver pcm1792a_dai = { .name = "pcm1792a-hifi", .playback = {
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("MONOOUT"), }; static const struct snd_soc_dapm_widget adau1761_capless_dapm_widgets[] = { SND_SOC_DAPM_SUPPLY_S("Headphone VGND", 1, ADAU1761_PLAY_MIXER_MONO, 0, 0, NULL, 0),
SND_SOC_DAPM_PGA("Aux Input", WM8974_POWER1, 6, 0, NULL, 0), SND_SOC_DAPM_PGA("SpkN Out", WM8974_POWER3, 5, 0, NULL, 0), SND_SOC_DAPM_PGA("SpkP Out", WM8974_POWER3, 6, 0, NULL, 0), SND_SOC_DAPM_PGA("Mono Out", WM8974_POWER3, 7, 0, NULL, 0), SND_SOC_DAPM_MIXER("Input PGA", WM8974_POWER2, 2, 0, wm8974_inpga, ARRAY_SIZE(wm8974_inpga)), SND_SOC_DAPM_MIXER("Boost Mixer", WM8974_POWER2, 4, 0, wm8974_boost_mixer, ARRAY_SIZE(wm8974_boost_mixer)), SND_SOC_DAPM_MICBIAS("Mic Bias", WM8974_POWER1, 4, 0), SND_SOC_DAPM_INPUT("MICN"), SND_SOC_DAPM_INPUT("MICP"), SND_SOC_DAPM_INPUT("AUX"), SND_SOC_DAPM_OUTPUT("MONOOUT"), SND_SOC_DAPM_OUTPUT("SPKOUTP"), SND_SOC_DAPM_OUTPUT("SPKOUTN"), }; static const struct snd_soc_dapm_route audio_map[] = { {"Mono Mixer", "PCM Playback Switch", "DAC"}, {"Mono Mixer", "Aux Playback Switch", "Aux Input"}, {"Mono Mixer", "Line Bypass Switch", "Boost Mixer"}, {"Speaker Mixer", "PCM Playback Switch", "DAC"}, {"Speaker Mixer", "Aux Playback Switch", "Aux Input"}, {"Speaker Mixer", "Line Bypass Switch", "Boost Mixer"},
&headset_amp_source_mux), SND_SOC_DAPM_PGA("PGA Left Input", SND_SOC_NOPM, 0, 0, NULL, 0), SND_SOC_DAPM_PGA("PGA Right Input", SND_SOC_NOPM, 0, 0, NULL, 0), SND_SOC_DAPM_ADC("ADC", "Capture", MC13783_AUDIO_CODEC, 11, 0), SND_SOC_DAPM_SUPPLY("ADC_Reset", MC13783_AUDIO_CODEC, 15, 0, NULL, 0), SND_SOC_DAPM_PGA("Voice CODEC PGA", MC13783_AUDIO_RX1, 0, 0, NULL, 0), SND_SOC_DAPM_SWITCH("Voice CODEC Bypass", MC13783_AUDIO_CODEC, 16, 0, &adc_bypass_ctl), /* Output */ SND_SOC_DAPM_SUPPLY("DAC_E", MC13783_AUDIO_DAC, 11, 0, NULL, 0), SND_SOC_DAPM_SUPPLY("DAC_Reset", MC13783_AUDIO_DAC, 15, 0, NULL, 0), SND_SOC_DAPM_OUTPUT("RXOUTL"), SND_SOC_DAPM_OUTPUT("RXOUTR"), SND_SOC_DAPM_OUTPUT("HSL"), SND_SOC_DAPM_OUTPUT("HSR"), SND_SOC_DAPM_OUTPUT("LSPL"), SND_SOC_DAPM_OUTPUT("LSP"), SND_SOC_DAPM_OUTPUT("SP"), SND_SOC_DAPM_OUTPUT("CDCOUT"), SND_SOC_DAPM_SWITCH("CDCOUT Switch", MC13783_AUDIO_RX0, 18, 0, &cdcout_ctl), SND_SOC_DAPM_SWITCH("Speaker Amp Switch", MC13783_AUDIO_RX0, 3, 0, &samp_ctl), SND_SOC_DAPM_SWITCH("Loudspeaker Amp", SND_SOC_NOPM, 0, 0, &lamp_ctl), SND_SOC_DAPM_SWITCH("Headset Amp Left", MC13783_AUDIO_RX0, 10, 0, &hlamp_ctl),
SINGLE_COEF("Ch2 - Prescale", 51), SINGLE_COEF("Ch1 - Postscale", 52), SINGLE_COEF("Ch2 - Postscale", 53), SINGLE_COEF("Ch3 - Postscale", 54), SINGLE_COEF("Thermal warning - Postscale", 55), SINGLE_COEF("Ch1 - Mix 1", 56), SINGLE_COEF("Ch1 - Mix 2", 57), SINGLE_COEF("Ch2 - Mix 1", 58), SINGLE_COEF("Ch2 - Mix 2", 59), SINGLE_COEF("Ch3 - Mix 1", 60), SINGLE_COEF("Ch3 - Mix 2", 61), }; static const struct snd_soc_dapm_widget sta32x_dapm_widgets[] = { SND_SOC_DAPM_DAC("DAC", "Playback", SND_SOC_NOPM, 0, 0), SND_SOC_DAPM_OUTPUT("LEFT"), SND_SOC_DAPM_OUTPUT("RIGHT"), SND_SOC_DAPM_OUTPUT("SUB"), }; static const struct snd_soc_dapm_route sta32x_dapm_routes[] = { { "LEFT", NULL, "DAC" }, { "RIGHT", NULL, "DAC" }, { "SUB", NULL, "DAC" }, }; /* MCLK interpolation ratio per fs */ static struct { int fs; int ir; } interpolation_ratios[] = {
line1p_mix, ARRAY_SIZE(line1p_mix)), SND_SOC_DAPM_MIXER("LINEOUT2N Mixer", SND_SOC_NOPM, 0, 0, line2n_mix, ARRAY_SIZE(line2n_mix)), SND_SOC_DAPM_MIXER("LINEOUT2P Mixer", SND_SOC_NOPM, 0, 0, line2p_mix, ARRAY_SIZE(line2p_mix)), SND_SOC_DAPM_PGA("LINEOUT1N Driver", WM8993_POWER_MANAGEMENT_3, 13, 0, NULL, 0), SND_SOC_DAPM_PGA("LINEOUT1P Driver", WM8993_POWER_MANAGEMENT_3, 12, 0, NULL, 0), SND_SOC_DAPM_PGA("LINEOUT2N Driver", WM8993_POWER_MANAGEMENT_3, 11, 0, NULL, 0), SND_SOC_DAPM_PGA("LINEOUT2P Driver", WM8993_POWER_MANAGEMENT_3, 10, 0, NULL, 0), SND_SOC_DAPM_OUTPUT("SPKOUTLP"), SND_SOC_DAPM_OUTPUT("SPKOUTLN"), SND_SOC_DAPM_OUTPUT("SPKOUTRP"), SND_SOC_DAPM_OUTPUT("SPKOUTRN"), SND_SOC_DAPM_OUTPUT("HPOUT1L"), SND_SOC_DAPM_OUTPUT("HPOUT1R"), SND_SOC_DAPM_OUTPUT("HPOUT2P"), SND_SOC_DAPM_OUTPUT("HPOUT2N"), SND_SOC_DAPM_OUTPUT("LINEOUT1P"), SND_SOC_DAPM_OUTPUT("LINEOUT1N"), SND_SOC_DAPM_OUTPUT("LINEOUT2P"), SND_SOC_DAPM_OUTPUT("LINEOUT2N"), }; static const struct snd_soc_dapm_route analogue_routes[] = { { "MICBIAS1", NULL, "CLK_SYS" },
static const struct snd_soc_dapm_widget wm9081_dapm_widgets[] = { SND_SOC_DAPM_INPUT("IN1"), SND_SOC_DAPM_INPUT("IN2"), SND_SOC_DAPM_DAC("DAC", "HiFi Playback", WM9081_POWER_MANAGEMENT, 0, 0), SND_SOC_DAPM_MIXER_NAMED_CTL("Mixer", SND_SOC_NOPM, 0, 0, mixer, ARRAY_SIZE(mixer)), SND_SOC_DAPM_PGA("LINEOUT PGA", WM9081_POWER_MANAGEMENT, 4, 0, NULL, 0), SND_SOC_DAPM_PGA("Speaker PGA", WM9081_POWER_MANAGEMENT, 2, 0, NULL, 0), SND_SOC_DAPM_OUT_DRV("Speaker", WM9081_POWER_MANAGEMENT, 1, 0, NULL, 0), SND_SOC_DAPM_OUTPUT("LINEOUT"), SND_SOC_DAPM_OUTPUT("SPKN"), SND_SOC_DAPM_OUTPUT("SPKP"), SND_SOC_DAPM_SUPPLY("CLK_SYS", WM9081_CLOCK_CONTROL_3, 0, 0, clk_sys_event, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_SUPPLY("CLK_DSP", WM9081_CLOCK_CONTROL_3, 1, 0, NULL, 0), SND_SOC_DAPM_SUPPLY("TOCLK", WM9081_CLOCK_CONTROL_3, 2, 0, NULL, 0), SND_SOC_DAPM_SUPPLY("TSENSE", WM9081_POWER_MANAGEMENT, 7, 0, NULL, 0), }; static const struct snd_soc_dapm_route wm9081_audio_paths[] = { { "DAC", NULL, "CLK_SYS" }, { "DAC", NULL, "CLK_DSP" },
SND_SOC_DAPM_PGA("ROUT PGA", WM8991_POWER_MANAGEMENT_1, WM8991_ROUT_ENA_BIT, 0, NULL, 0), /* */ SND_SOC_DAPM_PGA("LOPGA", WM8991_POWER_MANAGEMENT_3, WM8991_LOPGA_ENA_BIT, 0, NULL, 0), /* */ SND_SOC_DAPM_PGA("ROPGA", WM8991_POWER_MANAGEMENT_3, WM8991_ROPGA_ENA_BIT, 0, NULL, 0), /* */ SND_SOC_DAPM_SUPPLY("MICBIAS", WM8991_POWER_MANAGEMENT_1, WM8991_MICBIAS_ENA_BIT, 0, NULL, 0), SND_SOC_DAPM_OUTPUT("LON"), SND_SOC_DAPM_OUTPUT("LOP"), SND_SOC_DAPM_OUTPUT("OUT3"), SND_SOC_DAPM_OUTPUT("LOUT"), SND_SOC_DAPM_OUTPUT("SPKN"), SND_SOC_DAPM_OUTPUT("SPKP"), SND_SOC_DAPM_OUTPUT("ROUT"), SND_SOC_DAPM_OUTPUT("OUT4"), SND_SOC_DAPM_OUTPUT("ROP"), SND_SOC_DAPM_OUTPUT("RON"), SND_SOC_DAPM_OUTPUT("OUT"), SND_SOC_DAPM_OUTPUT("Internal DAC Sink"), }; static const struct snd_soc_dapm_route audio_map[] = {
SOC_DAPM_SINGLE("RINPUT2 Switch", WM8900_REG_INCTL, 1, 1, 0), SOC_DAPM_SINGLE("RINPUT3 Switch", WM8900_REG_INCTL, 0, 1, 0), }; static const char *wm9700_lp_mux[] = { "Disabled", "Enabled" }; static const struct soc_enum wm8900_lineout2_lp_mux = 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"),
ARIZONA_MIXER_WIDGETS(AIF1TX6, "AIF1TX6"), ARIZONA_MIXER_WIDGETS(AIF1TX7, "AIF1TX7"), ARIZONA_MIXER_WIDGETS(AIF1TX8, "AIF1TX8"), ARIZONA_MIXER_WIDGETS(AIF2TX1, "AIF2TX1"), ARIZONA_MIXER_WIDGETS(AIF2TX2, "AIF2TX2"), ARIZONA_MIXER_WIDGETS(AIF3TX1, "AIF3TX1"), ARIZONA_MIXER_WIDGETS(AIF3TX2, "AIF3TX2"), ARIZONA_MUX_WIDGETS(ASRC1L, "ASRC1L"), ARIZONA_MUX_WIDGETS(ASRC1R, "ASRC1R"), ARIZONA_MUX_WIDGETS(ASRC2L, "ASRC2L"), ARIZONA_MUX_WIDGETS(ASRC2R, "ASRC2R"), SND_SOC_DAPM_OUTPUT("HPOUT1L"), SND_SOC_DAPM_OUTPUT("HPOUT1R"), SND_SOC_DAPM_OUTPUT("HPOUT2L"), SND_SOC_DAPM_OUTPUT("HPOUT2R"), SND_SOC_DAPM_OUTPUT("HPOUT3L"), SND_SOC_DAPM_OUTPUT("HPOUT3R"), SND_SOC_DAPM_OUTPUT("SPKOUTLN"), SND_SOC_DAPM_OUTPUT("SPKOUTLP"), SND_SOC_DAPM_OUTPUT("SPKOUTRN"), SND_SOC_DAPM_OUTPUT("SPKOUTRP"), SND_SOC_DAPM_OUTPUT("SPKDAT1L"), SND_SOC_DAPM_OUTPUT("SPKDAT1R"), SND_SOC_DAPM_OUTPUT("SPKDAT2L"), SND_SOC_DAPM_OUTPUT("SPKDAT2R"), SND_SOC_DAPM_OUTPUT("MICSUPP"),
return 0; \ } WM8804_REGULATOR_EVENT(0) WM8804_REGULATOR_EVENT(1) static const char *txsrc_text[] = { "S/PDIF RX", "AIF" }; static SOC_ENUM_SINGLE_DECL(txsrc, WM8804_SPDTX4, 6, txsrc_text); static const struct snd_kcontrol_new wm8804_tx_source_mux[] = { SOC_DAPM_ENUM_EXT("Input Source", txsrc, snd_soc_dapm_get_enum_double, txsrc_put), }; static const struct snd_soc_dapm_widget wm8804_dapm_widgets[] = { SND_SOC_DAPM_OUTPUT("SPDIF Out"), SND_SOC_DAPM_INPUT("SPDIF In"), SND_SOC_DAPM_PGA("SPDIFTX", WM8804_PWRDN, 2, 1, NULL, 0), SND_SOC_DAPM_PGA("SPDIFRX", WM8804_PWRDN, 1, 1, NULL, 0), SND_SOC_DAPM_MUX("Tx Source", SND_SOC_NOPM, 6, 0, wm8804_tx_source_mux), SND_SOC_DAPM_AIF_OUT_E("AIFTX", NULL, 0, SND_SOC_NOPM, 0, 0, wm8804_aif_event, SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_AIF_IN_E("AIFRX", NULL, 0, SND_SOC_NOPM, 0, 0, wm8804_aif_event, SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD), }; static const struct snd_soc_dapm_route wm8804_dapm_routes[] = { { "AIFRX", NULL, "Playback" },
SND_SOC_DAPM_MUX("DACL Sidetone", SND_SOC_NOPM, 0, 0, &dacl_mux), SND_SOC_DAPM_MUX("DACR Sidetone", SND_SOC_NOPM, 0, 0, &dacr_mux), SND_SOC_DAPM_DAC("DACL", "HiFi Playback", WM8961_PWR_MGMT_2, 8, 0), SND_SOC_DAPM_DAC("DACR", "HiFi Playback", WM8961_PWR_MGMT_2, 7, 0), /* Handle as a mono path for DCS */ SND_SOC_DAPM_PGA_E("Headphone Output", SND_SOC_NOPM, 4, 0, NULL, 0, wm8961_hp_event, SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD), SND_SOC_DAPM_PGA_E("Speaker Output", SND_SOC_NOPM, 4, 0, NULL, 0, wm8961_spk_event, SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD), SND_SOC_DAPM_OUTPUT("HP_L"), SND_SOC_DAPM_OUTPUT("HP_R"), SND_SOC_DAPM_OUTPUT("SPK_LN"), SND_SOC_DAPM_OUTPUT("SPK_LP"), SND_SOC_DAPM_OUTPUT("SPK_RN"), SND_SOC_DAPM_OUTPUT("SPK_RP"), }; static const struct snd_soc_dapm_route audio_paths[] = { { "DACL", NULL, "CLK_DSP" }, { "DACL", NULL, "DACL Sidetone" }, { "DACR", NULL, "CLK_DSP" }, { "DACR", NULL, "DACR Sidetone" }, { "DACL Sidetone", "Left", "ADCL" },
} static const DECLARE_TLV_DB_SCALE(dac_tlv_fine, -12700, 13, 0); static const DECLARE_TLV_DB_SCALE(dac_tlv, -12700, 400, 0); static const struct snd_kcontrol_new wm8741_snd_controls[] = { SOC_DOUBLE_R_TLV("Fine Playback Volume", WM8741_DACLLSB_ATTENUATION, WM8741_DACRLSB_ATTENUATION, 1, 255, 1, dac_tlv_fine), SOC_DOUBLE_R_TLV("Playback Volume", WM8741_DACLMSB_ATTENUATION, WM8741_DACRMSB_ATTENUATION, 0, 511, 1, dac_tlv), }; static const struct snd_soc_dapm_widget wm8741_dapm_widgets[] = { SND_SOC_DAPM_DAC("DACL", "Playback", SND_SOC_NOPM, 0, 0), SND_SOC_DAPM_DAC("DACR", "Playback", SND_SOC_NOPM, 0, 0), SND_SOC_DAPM_OUTPUT("VOUTLP"), SND_SOC_DAPM_OUTPUT("VOUTLN"), SND_SOC_DAPM_OUTPUT("VOUTRP"), SND_SOC_DAPM_OUTPUT("VOUTRN"), }; static const struct snd_soc_dapm_route intercon[] = { { "VOUTLP", NULL, "DACL" }, { "VOUTLN", NULL, "DACL" }, { "VOUTRP", NULL, "DACR" }, { "VOUTRN", NULL, "DACR" }, }; static int wm8741_add_widgets(struct snd_soc_codec *codec) { snd_soc_dapm_new_controls(codec, wm8741_dapm_widgets,
* You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA * */ #include <linux/module.h> #include <sound/soc.h> #include <linux/of.h> #include <linux/of_device.h> #define DRV_NAME "hdmi-audio-codec" static const struct snd_soc_dapm_widget hdmi_widgets[] = { SND_SOC_DAPM_INPUT("RX"), SND_SOC_DAPM_OUTPUT("TX"), }; static const struct snd_soc_dapm_route hdmi_routes[] = { { "Capture", NULL, "RX" }, { "TX", NULL, "Playback" }, }; static struct snd_soc_dai_driver hdmi_codec_dai = { .name = "hdmi-hifi", .playback = { .stream_name = "Playback", .channels_min = 2, .channels_max = 8, .rates = SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 |
SND_SOC_DAPM_MIXER("LOUT MIX", SND_SOC_NOPM, 0, 0, rt5616_lout_mix, ARRAY_SIZE(rt5616_lout_mix)), SND_SOC_DAPM_PGA_S("HP amp", 1, SND_SOC_NOPM, 0, 0, rt5616_hp_event, SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU), SND_SOC_DAPM_PGA_S("LOUT amp", 1, SND_SOC_NOPM, 0, 0, rt5616_lout_event, SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU), SND_SOC_DAPM_SUPPLY_S("Charge Pump", 1, SND_SOC_NOPM, 0, 0, rt5616_charge_pump_event, SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD), /* Output Lines */ SND_SOC_DAPM_OUTPUT("HPOL"), SND_SOC_DAPM_OUTPUT("HPOR"), SND_SOC_DAPM_OUTPUT("LOUTL"), SND_SOC_DAPM_OUTPUT("LOUTR"), }; static const struct snd_soc_dapm_route rt5616_dapm_routes[] = { {"IN1P", NULL, "LDO"}, {"IN2P", NULL, "LDO"}, {"IN1P", NULL, "MIC1"}, {"IN2P", NULL, "MIC2"}, {"IN2N", NULL, "MIC2"}, {"BST1", NULL, "IN1P"}, {"BST2", NULL, "IN2P"},
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" }, { "Right Output Mixer", "Aux Switch", "AUXR" }, { "Right Output Mixer", "Line Switch", "Right Boost Mixer" }, { "Left Output Mixer", "PCM Switch", "Left DAC" }, { "Left Output Mixer", "Aux Switch", "AUXL" }, { "Left Output Mixer", "Line Switch", "Left Boost Mixer" }, { "Right Headphone Out", NULL, "Right Output Mixer" },
59, 62, TLV_DB_SCALE_ITEM(700, 60, 0), 63, 63, TLV_DB_SCALE_ITEM(950, 0, 0), }; static const struct snd_kcontrol_new max9768_volume[] = { SOC_SINGLE_TLV("Playback Volume", MAX9768_VOL, 0, 63, 0, volume_tlv), }; static const struct snd_kcontrol_new max9768_mute[] = { SOC_SINGLE_BOOL_EXT("Playback Switch", 0, max9768_get_gpio, max9768_set_gpio), }; static const struct snd_soc_dapm_widget max9768_dapm_widgets[] = { SND_SOC_DAPM_INPUT("IN"), SND_SOC_DAPM_OUTPUT("OUT+"), SND_SOC_DAPM_OUTPUT("OUT-"), }; static const struct snd_soc_dapm_route max9768_dapm_routes[] = { { "OUT+", NULL, "IN" }, { "OUT-", NULL, "IN" }, }; static int max9768_probe(struct snd_soc_codec *codec) { struct max9768 *max9768 = snd_soc_codec_get_drvdata(codec); int ret; if (max9768->flags & MAX9768_FLAG_CLASSIC_PWM) { ret = snd_soc_write(codec, MAX9768_CTRL, MAX9768_CTRL_PWM);
return -EINVAL; } /* enabling both the RX channels*/ regmap_update_bits(max98371->regmap, MAX98371_MONOMIX_SRC, MAX98371_MONOMIX_SRC_MASK, MONOMIX_RX_0_1); regmap_update_bits(max98371->regmap, MAX98371_DAI_CHANNEL, MAX98371_CHANNEL_MASK, MAX98371_CHANNEL_MASK); return 0; } static const struct snd_soc_dapm_widget max98371_dapm_widgets[] = { SND_SOC_DAPM_DAC("DAC", NULL, MAX98371_SPK_ENABLE, 0, 0), SND_SOC_DAPM_SUPPLY("Global Enable", MAX98371_GLOBAL_ENABLE, 0, 0, NULL, 0), SND_SOC_DAPM_OUTPUT("SPK_OUT"), }; static const struct snd_soc_dapm_route max98371_audio_map[] = { {"DAC", NULL, "HiFi Playback"}, {"SPK_OUT", NULL, "DAC"}, {"SPK_OUT", NULL, "Global Enable"}, }; #define MAX98371_RATES SNDRV_PCM_RATE_8000_48000 #define MAX98371_FORMATS (SNDRV_PCM_FMTBIT_S8 | SNDRV_PCM_FMTBIT_S16_BE | \ SNDRV_PCM_FMTBIT_S24_BE | SNDRV_PCM_FMTBIT_S32_BE) static const struct snd_soc_dai_ops max98371_dai_ops = { .set_fmt = max98371_dai_set_fmt, .hw_params = max98371_dai_hw_params,
SND_SOC_DAPM_SUPPLY("VOUT12 Supply", SND_SOC_NOPM, 0, 0, vout12supply_event, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_SUPPLY("VOUT34 Supply", SND_SOC_NOPM, 0, 0, vout34supply_event, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_MIXER("VOUT1 Mixer", SND_SOC_NOPM, 0, 0, vout1_mix_controls, ARRAY_SIZE(vout1_mix_controls)), SND_SOC_DAPM_MIXER("VOUT2 Mixer", SND_SOC_NOPM, 0, 0, vout2_mix_controls, ARRAY_SIZE(vout2_mix_controls)), SND_SOC_DAPM_MIXER("VOUT3 Mixer", SND_SOC_NOPM, 0, 0, vout3_mix_controls, ARRAY_SIZE(vout3_mix_controls)), SND_SOC_DAPM_MIXER("VOUT4 Mixer", SND_SOC_NOPM, 0, 0, vout4_mix_controls, ARRAY_SIZE(vout4_mix_controls)), SND_SOC_DAPM_OUTPUT("VOUT1"), SND_SOC_DAPM_OUTPUT("VOUT2"), SND_SOC_DAPM_OUTPUT("VOUT3"), SND_SOC_DAPM_OUTPUT("VOUT4") }; static const struct snd_soc_dapm_route wm8770_intercon[] = { { "Capture Mux", "AIN1", "AIN1" }, { "Capture Mux", "AIN2", "AIN2" }, { "Capture Mux", "AIN3", "AIN3" }, { "Capture Mux", "AIN4", "AIN4" }, { "Capture Mux", "AIN5", "AIN5" }, { "Capture Mux", "AIN6", "AIN6" }, { "Capture Mux", "AIN7", "AIN7" }, { "Capture Mux", "AIN8", "AIN8" },