SOC_DAPM_SINGLE("Switch", MAX98373_R2043_AMP_EN, 1, 1, 0); static const struct snd_soc_dapm_widget max98373_dapm_widgets[] = { SND_SOC_DAPM_DAC_E("Amp Enable", "HiFi Playback", MAX98373_R202B_PCM_RX_EN, 0, 0, max98373_dac_event, SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_MUX("DAI Sel Mux", SND_SOC_NOPM, 0, 0, &max98373_dai_controls), SND_SOC_DAPM_OUTPUT("BE_OUT"), SND_SOC_DAPM_AIF_OUT("Voltage Sense", "HiFi Capture", 0, MAX98373_R2047_IV_SENSE_ADC_EN, 0, 0), SND_SOC_DAPM_AIF_OUT("Current Sense", "HiFi Capture", 0, MAX98373_R2047_IV_SENSE_ADC_EN, 1, 0), SND_SOC_DAPM_AIF_OUT("Speaker FB Sense", "HiFi Capture", 0, SND_SOC_NOPM, 0, 0), SND_SOC_DAPM_SWITCH("VI Sense", SND_SOC_NOPM, 0, 0, &max98373_vi_control), SND_SOC_DAPM_SWITCH("SpkFB Sense", SND_SOC_NOPM, 0, 0, &max98373_spkfb_control), SND_SOC_DAPM_SIGGEN("VMON"), SND_SOC_DAPM_SIGGEN("IMON"), SND_SOC_DAPM_SIGGEN("FBMON"), }; static DECLARE_TLV_DB_SCALE(max98373_digital_tlv, 0, -50, 0); static const DECLARE_TLV_DB_RANGE(max98373_spk_tlv, 0, 8, TLV_DB_SCALE_ITEM(0, 50, 0), 9, 10, TLV_DB_SCALE_ITEM(500, 100, 0), ); static const DECLARE_TLV_DB_RANGE(max98373_spkgain_max_tlv, 0, 9, TLV_DB_SCALE_ITEM(800, 100, 0), );
SND_SOC_DAPM_PGA("PGA MICA", CS42L52_PWRCTL2, 1, 1, NULL, 0), SND_SOC_DAPM_PGA("PGA MICB", CS42L52_PWRCTL2, 2, 1, NULL, 0), SND_SOC_DAPM_SUPPLY("Mic Bias", CS42L52_PWRCTL2, 0, 1, NULL, 0), SND_SOC_DAPM_SUPPLY("Charge Pump", CS42L52_PWRCTL1, 7, 1, NULL, 0), SND_SOC_DAPM_AIF_IN("AIFINL", NULL, 0, SND_SOC_NOPM, 0, 0), SND_SOC_DAPM_AIF_IN("AIFINR", NULL, 0, SND_SOC_NOPM, 0, 0), SND_SOC_DAPM_DAC("DAC Left", NULL, SND_SOC_NOPM, 0, 0), SND_SOC_DAPM_DAC("DAC Right", NULL, SND_SOC_NOPM, 0, 0), SND_SOC_DAPM_SWITCH("Bypass Left", CS42L52_MISC_CTL, 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"),
/* ak4641 dapm widgets */ static const struct snd_soc_dapm_widget ak4641_dapm_widgets[] = { SND_SOC_DAPM_MIXER("Stereo Mixer", SND_SOC_NOPM, 0, 0, &ak4641_stereo_mixer_controls[0], ARRAY_SIZE(ak4641_stereo_mixer_controls)), SND_SOC_DAPM_MIXER("Mono1 Mixer", SND_SOC_NOPM, 0, 0, &ak4641_mono1_mixer_controls[0], ARRAY_SIZE(ak4641_mono1_mixer_controls)), SND_SOC_DAPM_MIXER("Input Mixer", SND_SOC_NOPM, 0, 0, &ak4641_input_mixer_controls[0], ARRAY_SIZE(ak4641_input_mixer_controls)), SND_SOC_DAPM_MUX("Mic Mux", SND_SOC_NOPM, 0, 0, &ak4641_mic_mux_control), SND_SOC_DAPM_MUX("Input Mux", SND_SOC_NOPM, 0, 0, &ak4641_input_mux_control), SND_SOC_DAPM_SWITCH("Mono 2 Enable", SND_SOC_NOPM, 0, 0, &ak4641_mono2_control), SND_SOC_DAPM_OUTPUT("LOUT"), SND_SOC_DAPM_OUTPUT("ROUT"), SND_SOC_DAPM_OUTPUT("MOUT1"), SND_SOC_DAPM_OUTPUT("MOUT2"), SND_SOC_DAPM_OUTPUT("MICOUT"), 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_OUTPUT("EP"), SND_SOC_DAPM_LINE("AUXOUTL", NULL), SND_SOC_DAPM_LINE("AUXOUTR", NULL), /* Microphone bias */ SND_SOC_DAPM_SUPPLY("MICHS Bias", ES_MICBIAS_CTRL, ES_MBIASHS_MODE_SHIFT, 0, NULL, 0), SND_SOC_DAPM_SUPPLY("MIC0 Bias", ES_MICBIAS_CTRL, ES_MBIAS0_MODE_SHIFT, 0, NULL, 0), SND_SOC_DAPM_SUPPLY("MIC1 Bias", ES_MICBIAS_CTRL, ES_MBIAS1_MODE_SHIFT, 0, NULL, 0), SND_SOC_DAPM_SUPPLY("MIC2 Bias", ES_MICBIAS_CTRL, ES_MBIAS2_MODE_SHIFT, 0, NULL, 0), /* Mic headset Switch ON/OFF */ SND_SOC_DAPM_SWITCH("MICHS ON", SND_SOC_NOPM, 0, 0, &michs_control), /* ADC */ SND_SOC_DAPM_ADC("ADC0", NULL, ES_ADC_CTRL, ES_ADC0_ON_SHIFT, 0), SND_SOC_DAPM_MUX("ADC1 MUX", SND_SOC_NOPM, 0, 0, &adc1_mux), SND_SOC_DAPM_ADC("ADC1", NULL, ES_ADC_CTRL, ES_ADC1_ON_SHIFT, 0), SND_SOC_DAPM_MUX("ADC2 MUX", SND_SOC_NOPM, 0, 0, &adc2_mux), SND_SOC_DAPM_ADC("ADC2", NULL, ES_ADC_CTRL, ES_ADC2_ON_SHIFT, 0), SND_SOC_DAPM_ADC("ADC3", NULL, ES_ADC_CTRL, ES_ADC3_ON_SHIFT, 0), /* DAC */ SND_SOC_DAPM_DAC_E("DAC0L", NULL, ES_DAC_CTRL, ES_DAC0L_ON_SHIFT, 0, es_dac_enable, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_DAC_E("DAC0R", NULL, ES_DAC_CTRL, ES_DAC0R_ON_SHIFT, 0, es_dac_enable, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_DAC_E("DAC1L", NULL, ES_DAC_CTRL, ES_DAC1L_ON_SHIFT,
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_DAC_E("HSDAC Right", "Headset Playback", TWL6040_REG_HSRCTL, 0, 0, twl6040_hs_dac_event, SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_DAC_E("HFDAC Left", "Handsfree Playback", TWL6040_REG_HFLCTL, 0, 0, twl6040_power_mode_event, SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_DAC_E("HFDAC Right", "Handsfree Playback", TWL6040_REG_HFRCTL, 0, 0, twl6040_power_mode_event, SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD), /* Analog playback switches */ SND_SOC_DAPM_SWITCH("HSDAC Left Playback", SND_SOC_NOPM, 0, 0, &hsdacl_switch_controls), SND_SOC_DAPM_SWITCH("HSDAC Right Playback", SND_SOC_NOPM, 0, 0, &hsdacr_switch_controls), SND_SOC_DAPM_SWITCH("HFDAC Left Playback", SND_SOC_NOPM, 0, 0, &hfdacl_switch_controls), SND_SOC_DAPM_SWITCH("HFDAC Right Playback", SND_SOC_NOPM, 0, 0, &hfdacr_switch_controls), /* Analog playback drivers */ SND_SOC_DAPM_PGA_E("Handsfree Left Driver", TWL6040_REG_HFLCTL, 4, 0, NULL, 0, twl6040_power_mode_event, SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_PGA_E("Handsfree Right Driver", TWL6040_REG_HFRCTL, 4, 0, NULL, 0, twl6040_power_mode_event,
static const struct snd_kcontrol_new lramp_ctl = SOC_DAPM_SINGLE("Switch", MC13783_AUDIO_RX0, 15, 1, 0); static const struct snd_soc_dapm_widget mc13783_dapm_widgets[] = { /* Input */ SND_SOC_DAPM_INPUT("MC1LIN"), SND_SOC_DAPM_INPUT("MC1RIN"), SND_SOC_DAPM_INPUT("MC2IN"), SND_SOC_DAPM_INPUT("RXINR"), SND_SOC_DAPM_INPUT("RXINL"), SND_SOC_DAPM_INPUT("TXIN"), SND_SOC_DAPM_SUPPLY("MC1 Bias", MC13783_AUDIO_TX, 0, 0, NULL, 0), SND_SOC_DAPM_SUPPLY("MC2 Bias", MC13783_AUDIO_TX, 1, 0, NULL, 0), SND_SOC_DAPM_SWITCH("MC1L Amp", MC13783_AUDIO_TX, 7, 0, &mc1l_amp_ctl), SND_SOC_DAPM_SWITCH("MC1R Amp", MC13783_AUDIO_TX, 5, 0, &mc1r_amp_ctl), SND_SOC_DAPM_SWITCH("MC2 Amp", MC13783_AUDIO_TX, 9, 0, &mc2_amp_ctl), SND_SOC_DAPM_SWITCH("TXIN Amp", MC13783_AUDIO_TX, 11, 0, &atx_amp_ctl), SND_SOC_DAPM_MUX("PGA Left Input Mux", SND_SOC_NOPM, 0, 0, &left_input_mux), SND_SOC_DAPM_MUX("PGA Right Input Mux", SND_SOC_NOPM, 0, 0, &right_input_mux), SND_SOC_DAPM_MUX("Speaker Amp Source MUX", SND_SOC_NOPM, 0, 0, &speaker_amp_source_mux), SND_SOC_DAPM_MUX("Headset Amp Source MUX", SND_SOC_NOPM, 0, 0, &headset_amp_source_mux),
SOC_DAPM_SINGLE("Switch", ML26124_PW_LOUT_PW_MNG, 1, 1, 0); static const struct snd_soc_dapm_widget ml26124_dapm_widgets[] = { SND_SOC_DAPM_SUPPLY("MCLKEN", ML26124_CLK_EN, 0, 0, NULL, 0), SND_SOC_DAPM_SUPPLY("PLLEN", ML26124_CLK_EN, 1, 0, NULL, 0), SND_SOC_DAPM_SUPPLY("PLLOE", ML26124_CLK_EN, 2, 0, NULL, 0), SND_SOC_DAPM_SUPPLY("MICBIAS", ML26124_PW_REF_PW_MNG, 2, 0, NULL, 0), SND_SOC_DAPM_MIXER("Output Mixer", SND_SOC_NOPM, 0, 0, &ml26124_output_mixer_controls[0], ARRAY_SIZE(ml26124_output_mixer_controls)), SND_SOC_DAPM_DAC("DAC", "Playback", ML26124_PW_DAC_PW_MNG, 1, 0), SND_SOC_DAPM_ADC("ADC", "Capture", ML26124_PW_IN_PW_MNG, 1, 0), SND_SOC_DAPM_PGA("PGA", ML26124_PW_IN_PW_MNG, 3, 0, NULL, 0), SND_SOC_DAPM_MUX("Input Mux", SND_SOC_NOPM, 0, 0, &ml26124_input_mux_controls), SND_SOC_DAPM_SWITCH("Line Out Enable", SND_SOC_NOPM, 0, 0, &ml26124_line_control), SND_SOC_DAPM_INPUT("MDIN"), SND_SOC_DAPM_INPUT("MIN"), SND_SOC_DAPM_INPUT("LIN"), SND_SOC_DAPM_OUTPUT("SPOUT"), SND_SOC_DAPM_OUTPUT("LOUT"), }; static const struct snd_soc_dapm_route ml26124_intercon[] = { /* Supply */ {"DAC", NULL, "MCLKEN"}, {"ADC", NULL, "MCLKEN"}, {"DAC", NULL, "PLLEN"}, {"ADC", NULL, "PLLEN"}, {"DAC", NULL, "PLLOE"}, {"ADC", NULL, "PLLOE"},
static const struct snd_soc_dapm_widget max9867_dapm_widgets[] = { SND_SOC_DAPM_AIF_IN("DAI_OUT", "HiFi Playback", 0, SND_SOC_NOPM, 0, 0), SND_SOC_DAPM_DAC("Left DAC", NULL, MAX9867_PWRMAN, 3, 0), SND_SOC_DAPM_DAC("Right DAC", NULL, MAX9867_PWRMAN, 2, 0), SND_SOC_DAPM_MIXER("Output Mixer", SND_SOC_NOPM, 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"},
SND_SOC_DAPM_INPUT("SE2L"), SND_SOC_DAPM_INPUT("SE2R"), SND_SOC_DAPM_INPUT("SE1L"), SND_SOC_DAPM_INPUT("SE1R"), SND_SOC_DAPM_INPUT("DIFFL"), SND_SOC_DAPM_INPUT("DIFFR"), SND_SOC_DAPM_INPUT("MIX"), SND_SOC_DAPM_MUX("Main Source Select", SND_SOC_NOPM, 0, 0, &soc_mux_main_src_sel), SND_SOC_DAPM_MUX("Second Source Select", SND_SOC_NOPM, 0, 0, &soc_mux_second_src_sel), SND_SOC_DAPM_MUX("Rear Speaker Source", SND_SOC_NOPM, 0, 0, &soc_mux_rear_spkr_src), SND_SOC_DAPM_SWITCH("Mix Enable", SND_SOC_NOPM, 0, 0, &soc_mix_enable_switch_controls[0]), SND_SOC_DAPM_MIXER_NAMED_CTL("LF Output Mixer", SND_SOC_NOPM, 0, 0, &soc_mixer_lf_output_controls[0], ARRAY_SIZE(soc_mixer_lf_output_controls)), SND_SOC_DAPM_MIXER_NAMED_CTL("RF Output Mixer", SND_SOC_NOPM, 0, 0, &soc_mixer_rf_output_controls[0], ARRAY_SIZE(soc_mixer_rf_output_controls)), SND_SOC_DAPM_SWITCH("Subwoofer Enable", SND_SOC_NOPM, 0, 0, &soc_sub_enable_switch_controls[0]), SND_SOC_DAPM_OUTPUT("OUTLF"), SND_SOC_DAPM_OUTPUT("OUTRF"), SND_SOC_DAPM_OUTPUT("OUTLR"), SND_SOC_DAPM_OUTPUT("OUTRR"),
static const struct snd_kcontrol_new lramp_ctl = SOC_DAPM_SINGLE("Switch", MC13783_AUDIO_RX0, 15, 1, 0); static const struct snd_soc_dapm_widget mc13783_dapm_widgets[] = { /* Input */ SND_SOC_DAPM_INPUT("MC1LIN"), SND_SOC_DAPM_INPUT("MC1RIN"), SND_SOC_DAPM_INPUT("MC2IN"), SND_SOC_DAPM_INPUT("RXINR"), SND_SOC_DAPM_INPUT("RXINL"), SND_SOC_DAPM_INPUT("TXIN"), SND_SOC_DAPM_SUPPLY("MC1 Bias", MC13783_AUDIO_TX, 0, 0, NULL, 0), SND_SOC_DAPM_SUPPLY("MC2 Bias", MC13783_AUDIO_TX, 1, 0, NULL, 0), SND_SOC_DAPM_SWITCH("MC1L Amp", MC13783_AUDIO_TX, 7, 0, &mc1l_amp_ctl), SND_SOC_DAPM_SWITCH("MC1R Amp", MC13783_AUDIO_TX, 5, 0, &mc1r_amp_ctl), SND_SOC_DAPM_SWITCH("MC2 Amp", MC13783_AUDIO_TX, 9, 0, &mc2_amp_ctl), SND_SOC_DAPM_SWITCH("TXIN Amp", MC13783_AUDIO_TX, 11, 0, &atx_amp_ctl), SND_SOC_DAPM_VIRT_MUX("PGA Left Input Mux", SND_SOC_NOPM, 0, 0, &left_input_mux), SND_SOC_DAPM_VIRT_MUX("PGA Right Input Mux", SND_SOC_NOPM, 0, 0, &right_input_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),
static const struct snd_kcontrol_new ep_on[] = { SOC_DAPM_SINGLE("EP On", COD3022X_76_CHOP_DA, EN_EP_CHOP_SHIFT, 1, 0), }; static const struct snd_kcontrol_new mic1_on[] = { SOC_DAPM_SINGLE("MIC1 On", COD3022X_75_CHOP_AD, EN_MCB1_CHOP_SHIFT, 1, 0), }; static const struct snd_kcontrol_new mic2_on[] = { SOC_DAPM_SINGLE("MIC2 On", COD3022X_75_CHOP_AD, EN_MCB2_CHOP_SHIFT, 1, 0), }; static const struct snd_soc_dapm_widget cod3022x_dapm_widgets[] = { SND_SOC_DAPM_SWITCH("SPK", SND_SOC_NOPM, 0, 0, spk_on), SND_SOC_DAPM_SWITCH("HP", SND_SOC_NOPM, 0, 0, hp_on), SND_SOC_DAPM_SWITCH("EP", SND_SOC_NOPM, 0, 0, ep_on), SND_SOC_DAPM_SWITCH("MIC1", SND_SOC_NOPM, 0, 0, mic1_on), SND_SOC_DAPM_SWITCH("MIC2", SND_SOC_NOPM, 0, 0, mic2_on), SND_SOC_DAPM_SUPPLY("VMID", SND_SOC_NOPM, 0, 0, vmid_ev, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU), SND_SOC_DAPM_SUPPLY("MIC_VMID", SND_SOC_NOPM, 0, 0, mic_vmid_ev, SND_SOC_DAPM_PRE_PMU), SND_SOC_DAPM_OUT_DRV_E("SPKDRV", SND_SOC_NOPM, 0, 0, NULL, 0, spkdrv_ev, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_PRE_PMD), SND_SOC_DAPM_OUT_DRV_E("EPDRV", SND_SOC_NOPM, 0, 0, NULL, 0, epdrv_ev, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_PRE_PMD), SND_SOC_DAPM_OUT_DRV_E("HPDRV", SND_SOC_NOPM, 0, 0, NULL, 0,
SND_SOC_DAPM_MUX("ESL-ASP Mux", SND_SOC_NOPM, 0, 0, &esl_asp_mixer), SND_SOC_DAPM_MUX("SPK-ASP Mux", SND_SOC_NOPM, 0, 0, &spk_asp_mixer), SND_SOC_DAPM_MUX("SPK-XSP Mux", SND_SOC_NOPM, 0, 0, &spk_xsp_mixer), SND_SOC_DAPM_PGA("HL Left DAC", SND_SOC_NOPM, 0, 0, NULL, 0), 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", CS42L73_PWRCTL3, 0, 1, &hp_amp_ctl), SND_SOC_DAPM_SWITCH("LO Amp", CS42L73_PWRCTL3, 1, 1, &lo_amp_ctl), SND_SOC_DAPM_SWITCH("SPK Amp", CS42L73_PWRCTL3, 2, 1, &spk_amp_ctl), SND_SOC_DAPM_SWITCH("EAR Amp", CS42L73_PWRCTL3, 3, 1, &ear_amp_ctl), SND_SOC_DAPM_SWITCH("SPKLO Amp", CS42L73_PWRCTL3, 4, 1, &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_MUX("ESL-ASP Mux", SND_SOC_NOPM, 0, 0, &esl_asp_mixer), SND_SOC_DAPM_MUX("SPK-ASP Mux", SND_SOC_NOPM, 0, 0, &spk_asp_mixer), SND_SOC_DAPM_MUX("SPK-XSP Mux", SND_SOC_NOPM, 0, 0, &spk_xsp_mixer), SND_SOC_DAPM_PGA("HL Left DAC", SND_SOC_NOPM, 0, 0, NULL, 0), 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"),
SOC_DAPM_SINGLE("Switch", PW_MGMT2, 6, 1, 0); static const struct snd_kcontrol_new ak4642_lout_mixer_controls[] = { SOC_DAPM_SINGLE("DACL", SG_SL1, 4, 1, 0), }; static const struct snd_soc_dapm_widget ak4642_dapm_widgets[] = { /* Outputs */ SND_SOC_DAPM_OUTPUT("HPOUTL"), SND_SOC_DAPM_OUTPUT("HPOUTR"), SND_SOC_DAPM_OUTPUT("LINEOUT"), SND_SOC_DAPM_PGA("HPL Out", PW_MGMT2, 5, 0, NULL, 0), SND_SOC_DAPM_PGA("HPR Out", PW_MGMT2, 4, 0, NULL, 0), SND_SOC_DAPM_SWITCH("Headphone Enable", SND_SOC_NOPM, 0, 0, &ak4642_headphone_control), SND_SOC_DAPM_PGA("DACH", MD_CTL4, 0, 0, NULL, 0), SND_SOC_DAPM_MIXER("LINEOUT Mixer", PW_MGMT1, 3, 0, &ak4642_lout_mixer_controls[0], ARRAY_SIZE(ak4642_lout_mixer_controls)), /* DAC */ SND_SOC_DAPM_DAC("DAC", "HiFi Playback", PW_MGMT1, 2, 0), }; static const struct snd_soc_dapm_route ak4642_intercon[] = { /* Outputs */ {"HPOUTL", NULL, "HPL Out"},
}; static const struct snd_soc_dapm_widget atlas6_codec_clock_dapm_widget = SND_SOC_DAPM_SUPPLY("codecclk", SND_SOC_NOPM, 0, 0, atlas6_codec_enable_and_reset_event, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD); static const struct snd_soc_dapm_widget prima2_codec_clock_dapm_widget = SND_SOC_DAPM_SUPPLY("codecclk", SND_SOC_NOPM, 0, 0, prima2_codec_enable_and_reset_event, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD); static const struct snd_soc_dapm_widget sirf_audio_codec_dapm_widgets[] = { SND_SOC_DAPM_DAC("DAC left", NULL, AUDIO_IC_CODEC_CTRL0, 1, 0), SND_SOC_DAPM_DAC("DAC right", NULL, AUDIO_IC_CODEC_CTRL0, 0, 0), SND_SOC_DAPM_SWITCH("Left dac to hp left amp", SND_SOC_NOPM, 0, 0, &left_dac_to_hp_left_amp_switch_control), SND_SOC_DAPM_SWITCH("Left dac to hp right amp", SND_SOC_NOPM, 0, 0, &left_dac_to_hp_right_amp_switch_control), SND_SOC_DAPM_SWITCH("Right dac to hp left amp", SND_SOC_NOPM, 0, 0, &right_dac_to_hp_left_amp_switch_control), SND_SOC_DAPM_SWITCH("Right dac to hp right amp", SND_SOC_NOPM, 0, 0, &right_dac_to_hp_right_amp_switch_control), SND_SOC_DAPM_OUT_DRV("HP amp left driver", AUDIO_IC_CODEC_CTRL0, 3, 0, NULL, 0), SND_SOC_DAPM_OUT_DRV("HP amp right driver", AUDIO_IC_CODEC_CTRL0, 3, 0, NULL, 0), SND_SOC_DAPM_SWITCH("Left dac to speaker lineout", SND_SOC_NOPM, 0, 0, &left_dac_to_speaker_lineout_switch_control), SND_SOC_DAPM_SWITCH("Right dac to speaker lineout", SND_SOC_NOPM, 0, 0, &right_dac_to_speaker_lineout_switch_control),
SOC_SINGLE("Zero Cross Switch", CS35L32_CLASSD_CTL, 2, 1, 0), SOC_SINGLE("Gain Manager Switch", CS35L32_AUDIO_LED_MNGR, 3, 1, 0), }; static const struct snd_soc_dapm_widget cs35l32_dapm_widgets[] = { SND_SOC_DAPM_SUPPLY("BOOST", CS35L32_PWRCTL1, 2, 1, NULL, 0), SND_SOC_DAPM_OUT_DRV("Speaker", CS35L32_PWRCTL1, 7, 1, NULL, 0), SND_SOC_DAPM_AIF_OUT("SDOUT", NULL, 0, CS35L32_PWRCTL2, 3, 1), SND_SOC_DAPM_INPUT("VP"), SND_SOC_DAPM_INPUT("ISENSE"), SND_SOC_DAPM_INPUT("VSENSE"), SND_SOC_DAPM_SWITCH("VMON ADC", CS35L32_PWRCTL2, 7, 1, &vmon_ctl), SND_SOC_DAPM_SWITCH("IMON ADC", CS35L32_PWRCTL2, 6, 1, &imon_ctl), SND_SOC_DAPM_SWITCH("VPMON ADC", CS35L32_PWRCTL2, 5, 1, &vpmon_ctl), }; static const struct snd_soc_dapm_route cs35l32_audio_map[] = { {"Speaker", NULL, "BOOST"}, {"VMON ADC", NULL, "VSENSE"}, {"IMON ADC", NULL, "ISENSE"}, {"VPMON ADC", NULL, "VP"}, {"SDOUT", "Switch", "VMON ADC"}, {"SDOUT", "Switch", "IMON ADC"}, {"SDOUT", "Switch", "VPMON ADC"},
SND_SOC_DAPM_MIXER("Left Playback Mixer", WM8350_POWER_MGMT_2, 0, 0, &wm8350_left_play_mixer_controls[0], ARRAY_SIZE(wm8350_left_play_mixer_controls)), SND_SOC_DAPM_MIXER("Left Mic Mixer", WM8350_POWER_MGMT_2, 8, 0, &wm8350_left_mic_mixer_controls[0], ARRAY_SIZE(wm8350_left_mic_mixer_controls)), SND_SOC_DAPM_MIXER("Right Mic Mixer", WM8350_POWER_MGMT_2, 9, 0, &wm8350_right_mic_mixer_controls[0], ARRAY_SIZE(wm8350_right_mic_mixer_controls)), /* virtual mixer for Beep and Out2R */ SND_SOC_DAPM_MIXER("Out2 Mixer", SND_SOC_NOPM, 0, 0, NULL, 0), SND_SOC_DAPM_SWITCH("Beep", WM8350_POWER_MGMT_3, 7, 0, &wm8350_beep_switch_controls), SND_SOC_DAPM_ADC("Right ADC", "Right Capture", WM8350_POWER_MGMT_4, 3, 0), SND_SOC_DAPM_ADC("Left ADC", "Left Capture", WM8350_POWER_MGMT_4, 2, 0), SND_SOC_DAPM_DAC("Right DAC", "Right Playback", WM8350_POWER_MGMT_4, 5, 0), SND_SOC_DAPM_DAC("Left DAC", "Left Playback", WM8350_POWER_MGMT_4, 4, 0), SND_SOC_DAPM_MICBIAS("Mic Bias", WM8350_POWER_MGMT_1, 4, 0), SND_SOC_DAPM_MUX("Out4 Capture Channel", SND_SOC_NOPM, 0, 0, &wm8350_out4_capture_controls),
SUN4I_CODEC_DAC_ACTL_MIXEN, 0, NULL, 0), /* VMIC */ SND_SOC_DAPM_SUPPLY("VMIC", SUN4I_CODEC_ADC_ACTL, SUN4I_CODEC_ADC_ACTL_VMICEN, 0, NULL, 0), /* Mic Pre-Amplifiers */ SND_SOC_DAPM_PGA("MIC1 Pre-Amplifier", SUN4I_CODEC_ADC_ACTL, SUN4I_CODEC_ADC_ACTL_PREG1EN, 0, NULL, 0), /* Power Amplifier */ SND_SOC_DAPM_MIXER("Power Amplifier", SUN4I_CODEC_ADC_ACTL, SUN4I_CODEC_ADC_ACTL_PA_EN, 0, sun4i_codec_pa_mixer_controls, ARRAY_SIZE(sun4i_codec_pa_mixer_controls)), SND_SOC_DAPM_SWITCH("Power Amplifier Mute", SND_SOC_NOPM, 0, 0, &sun4i_codec_pa_mute), SND_SOC_DAPM_INPUT("Mic1"), SND_SOC_DAPM_OUTPUT("HP Right"), SND_SOC_DAPM_OUTPUT("HP Left"), }; static const struct snd_soc_dapm_route sun4i_codec_codec_dapm_routes[] = { /* Left ADC / DAC Routes */ { "Left ADC", NULL, "ADC" }, { "Left DAC", NULL, "DAC" }, /* Right ADC / DAC Routes */ { "Right ADC", NULL, "ADC" }, { "Right DAC", NULL, "DAC" },
SND_SOC_DAPM_OUTPUT("HP_L"), SND_SOC_DAPM_OUTPUT("HP_R"), //SND_SOC_DAPM_OUTPUT("AUXOUT"), //SND_SOC_DAPM_INPUT("RXV"), SND_SOC_DAPM_INPUT("LINEINLP"), SND_SOC_DAPM_INPUT("LINEINLN1"), SND_SOC_DAPM_INPUT("LINEINLN2"), SND_SOC_DAPM_INPUT("LINEINRP"), SND_SOC_DAPM_INPUT("LINEINRN1"), SND_SOC_DAPM_INPUT("LINEINRN2"), /* Input */ SND_SOC_DAPM_PGA("PGAIN LEFT", PMU3_BLOCK_ENABLE_1, 5, 0, NULL, 0), SND_SOC_DAPM_PGA("PGAIN RIGHT", PMU3_BLOCK_ENABLE_1, 4, 0, NULL, 0), SND_SOC_DAPM_SWITCH("PGAIN LEFT Pos", SND_SOC_NOPM, 0, 0, &pgain_lp_switch_controls), SND_SOC_DAPM_SWITCH("PGAIN RIGHT Pos", SND_SOC_NOPM, 0, 0, &pgain_rp_switch_controls), SND_SOC_DAPM_MUX("PGAIN LEFT Neg", SND_SOC_NOPM, 0, 0, pgain_ln_mux), SND_SOC_DAPM_MUX("PGAIN RIGHT Neg", SND_SOC_NOPM, 0, 0, pgain_rn_mux), SND_SOC_DAPM_MIXER("MIXINL", PMU3_BLOCK_ENABLE_1, 7, 0, &pmu3_dapm_mixer_in_l_controls[0], ARRAY_SIZE(pmu3_dapm_mixer_in_l_controls)), SND_SOC_DAPM_MIXER("MIXINR", PMU3_BLOCK_ENABLE_1, 6, 0, &pmu3_dapm_mixer_in_r_controls[0], ARRAY_SIZE(pmu3_dapm_mixer_in_r_controls)), SND_SOC_DAPM_MICBIAS("Mic Bias1", PMU3_BLOCK_ENABLE_2, 15, 0), SND_SOC_DAPM_MICBIAS("Mic Bias2", PMU3_BLOCK_ENABLE_2, 14, 0),
/* ak4535 dapm widgets */ static const struct snd_soc_dapm_widget ak4535_dapm_widgets[] = { SND_SOC_DAPM_MIXER("Stereo Mixer", SND_SOC_NOPM, 0, 0, &ak4535_stereo_mixer_controls[0], ARRAY_SIZE(ak4535_stereo_mixer_controls)), SND_SOC_DAPM_MIXER("Mono1 Mixer", SND_SOC_NOPM, 0, 0, &ak4535_mono1_mixer_controls[0], ARRAY_SIZE(ak4535_mono1_mixer_controls)), SND_SOC_DAPM_MIXER("Input Mixer", SND_SOC_NOPM, 0, 0, &ak4535_input_mixer_controls[0], ARRAY_SIZE(ak4535_input_mixer_controls)), SND_SOC_DAPM_MUX("Input Mux", SND_SOC_NOPM, 0, 0, &ak4535_input_mux_control), SND_SOC_DAPM_DAC("DAC", "Playback", AK4535_PM2, 0, 0), SND_SOC_DAPM_SWITCH("Mono 2 Enable", SND_SOC_NOPM, 0, 0, &ak4535_mono2_control), /* speaker powersave bit */ SND_SOC_DAPM_PGA("Speaker Enable", AK4535_MODE2, 0, 0, NULL, 0), SND_SOC_DAPM_SWITCH("Line Out Enable", SND_SOC_NOPM, 0, 0, &ak4535_line_control), SND_SOC_DAPM_SWITCH("Left HP Enable", SND_SOC_NOPM, 0, 0, &ak4535_hpl_control), SND_SOC_DAPM_SWITCH("Right HP Enable", SND_SOC_NOPM, 0, 0, &ak4535_hpr_control), SND_SOC_DAPM_OUTPUT("LOUT"), SND_SOC_DAPM_OUTPUT("HPL"), SND_SOC_DAPM_OUTPUT("ROUT"), SND_SOC_DAPM_OUTPUT("HPR"), SND_SOC_DAPM_OUTPUT("SPP"), SND_SOC_DAPM_OUTPUT("SPN"), SND_SOC_DAPM_OUTPUT("MOUT1"),
SND_SOC_DAPM_PGA("DPGA3L", SND_SOC_NOPM, 0, 0, NULL, 0), SND_SOC_DAPM_PGA("DPGA3R", SND_SOC_NOPM, 0, 0, NULL, 0), /* Analog Playback Mux */ SND_SOC_DAPM_MUX("RX1 Playback", ISABELLE_ALU_RX_EN_REG, 5, 0, &rx1_mux_controls), SND_SOC_DAPM_MUX("RX2 Playback", ISABELLE_ALU_RX_EN_REG, 4, 0, &rx2_mux_controls), /* TX Select */ SND_SOC_DAPM_MUX("ATX Select", ISABELLE_TX_INPUT_CFG_REG, 7, 0, &atx_mux_controls), SND_SOC_DAPM_MUX("VTX Select", ISABELLE_TX_INPUT_CFG_REG, 6, 0, &vtx_mux_controls), SND_SOC_DAPM_SWITCH("Earphone Playback", SND_SOC_NOPM, 0, 0, &ep_path_enable_control), /* Output Drivers */ SND_SOC_DAPM_OUT_DRV("HS Left Driver", ISABELLE_HSDRV_CFG2_REG, 1, 0, NULL, 0), SND_SOC_DAPM_OUT_DRV("HS Right Driver", ISABELLE_HSDRV_CFG2_REG, 0, 0, NULL, 0), SND_SOC_DAPM_OUT_DRV("LINEOUT1 Left Driver", ISABELLE_LINEAMP_CFG_REG, 1, 0, NULL, 0), SND_SOC_DAPM_OUT_DRV("LINEOUT2 Right Driver", ISABELLE_LINEAMP_CFG_REG, 0, 0, NULL, 0), SND_SOC_DAPM_OUT_DRV("Earphone Driver", ISABELLE_EARDRV_CFG2_REG, 1, 0, NULL, 0), SND_SOC_DAPM_OUT_DRV("HF Left Driver", ISABELLE_HFDRV_CFG_REG, 1, 0, NULL, 0),
AIC31XX_DACSETUP, 7, 0, aic31xx_dapm_power_event, SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_DAC_E("DAC Right", "Right Playback", AIC31XX_DACSETUP, 6, 0, aic31xx_dapm_power_event, SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD), /* Output Mixers */ SND_SOC_DAPM_MIXER("Output Left", SND_SOC_NOPM, 0, 0, left_output_switches, ARRAY_SIZE(left_output_switches)), SND_SOC_DAPM_MIXER("Output Right", SND_SOC_NOPM, 0, 0, right_output_switches, ARRAY_SIZE(right_output_switches)), SND_SOC_DAPM_SWITCH("HP Left", SND_SOC_NOPM, 0, 0, &aic31xx_dapm_hpl_switch), SND_SOC_DAPM_SWITCH("HP Right", SND_SOC_NOPM, 0, 0, &aic31xx_dapm_hpr_switch), /* Output drivers */ SND_SOC_DAPM_OUT_DRV_E("HPL Driver", AIC31XX_HPDRIVER, 7, 0, NULL, 0, aic31xx_dapm_power_event, SND_SOC_DAPM_POST_PMD | SND_SOC_DAPM_POST_PMU), SND_SOC_DAPM_OUT_DRV_E("HPR Driver", AIC31XX_HPDRIVER, 6, 0, NULL, 0, aic31xx_dapm_power_event, SND_SOC_DAPM_POST_PMD | SND_SOC_DAPM_POST_PMU), /* ADC */ SND_SOC_DAPM_ADC_E("ADC", "Capture", AIC31XX_ADCSETUP, 7, 0, aic31xx_dapm_power_event, SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD),
static const struct snd_kcontrol_new lramp_ctl = SOC_DAPM_SINGLE("Switch", 36, 15, 1, 0); static const struct snd_soc_dapm_widget mc13783_dapm_widgets[] = { /* Input */ SND_SOC_DAPM_INPUT("MC1LIN"), SND_SOC_DAPM_INPUT("MC1RIN"), SND_SOC_DAPM_INPUT("MC2IN"), SND_SOC_DAPM_INPUT("RXINR"), SND_SOC_DAPM_INPUT("RXINL"), SND_SOC_DAPM_INPUT("TXIN"), SND_SOC_DAPM_SUPPLY("MC1 Bias", 38, 0, 0, NULL, 0), SND_SOC_DAPM_SUPPLY("MC2 Bias", 38, 1, 0, NULL, 0), SND_SOC_DAPM_SWITCH("MC1L Amp", 38, 7, 0, &mc1l_amp_ctl), SND_SOC_DAPM_SWITCH("MC1R Amp", 38, 5, 0, &mc1r_amp_ctl), SND_SOC_DAPM_SWITCH("MC2 Amp", 38, 9, 0, &mc2_amp_ctl), SND_SOC_DAPM_SWITCH("TXIN Amp", 38, 11, 0, &atx_amp_ctl), SND_SOC_DAPM_VIRT_MUX("PGA Left Input Mux", SND_SOC_NOPM, 0, 0, &left_input_mux), SND_SOC_DAPM_VIRT_MUX("PGA Right Input Mux", SND_SOC_NOPM, 0, 0, &right_input_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", 40, 11, 0), SND_SOC_DAPM_SUPPLY("ADC_Reset", 40, 15, 0, NULL, 0),
SND_SOC_DAPM_MUX("SPK-ASP Mux", SND_SOC_NOPM, 0, 0, &spk_asp_mixer), SND_SOC_DAPM_MUX("SPK-XSP Mux", SND_SOC_NOPM, 0, 0, &spk_xsp_mixer), SND_SOC_DAPM_PGA("HL Left DAC", SND_SOC_NOPM, 0, 0, NULL, 0), 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_E("HP Amp", CS42L73_PWRCTL3, 0, 1, &hp_amp_ctl, cs42l73_hp_amp_event, SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_SWITCH("LO Amp", CS42L73_PWRCTL3, 1, 1, &lo_amp_ctl), SND_SOC_DAPM_SWITCH_E("SPK Amp", CS42L73_PWRCTL3, 2, 1, &spk_amp_ctl, cs42l73_spklo_spk_amp_event, SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_SWITCH_E("EAR Amp", CS42L73_PWRCTL3, 3, 1, &ear_amp_ctl, cs42l73_ear_amp_event, SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_SWITCH_E("SPKLO Amp", CS42L73_PWRCTL3, 4, 1, &spklo_amp_ctl, cs42l73_spklo_spk_amp_event, SND_SOC_DAPM_POST_PMD), 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"),
#include "../ssp/mid_ssp.h" #include "ctp_common.h" #include "ctp_comms_common.h" /* As per the codec spec the mic2_sdet debounce delay is 20ms. * But having 20ms delay doesn't work */ #define MIC2SDET_DEBOUNCE_DELAY 50 /* 50 ms */ #define MICBIAS_NAME "MIC2 Bias" /* CDB42L73 widgets */ static const struct snd_soc_dapm_widget ctp_dapm_widgets[] = { SND_SOC_DAPM_HP("Headphone", NULL), SND_SOC_DAPM_MIC("Headset Mic", NULL), SND_SOC_DAPM_SPK("Ext Spk", ctp_amp_event), SND_SOC_DAPM_SPK("Virtual Spk", NULL), SND_SOC_DAPM_SWITCH("IHFAMP_SD_N", SND_SOC_NOPM, 0, 0, &ext_amp_sw), }; /* CDB42L73 Audio Map */ static const struct snd_soc_dapm_route ctp_audio_map[] = { {"MIC2", NULL, "Headset Mic"}, /* Headphone (L+R)-> HPOUTA, HPOUTB */ {"Headphone", NULL, "HPOUTA"}, {"Headphone", NULL, "HPOUTB"}, {"Ext Spk", NULL, "IHFAMP_SD_N"}, {"IHFAMP_SD_N", "Switch", "SPKLINEOUT"}, {"Ext Spk", NULL, "SPKOUT"}, /* For Virtual Device */ {"Virtual Spk", NULL, "SPKLINEOUT"}, };