static struct snd_soc_jack broadwell_headset; /* Headset jack detection DAPM pins */ static struct snd_soc_jack_pin broadwell_headset_pins[] = { { .pin = "Mic Jack", .mask = SND_JACK_MICROPHONE, }, { .pin = "Headphone Jack", .mask = SND_JACK_HEADPHONE, }, }; static const struct snd_kcontrol_new broadwell_controls[] = { SOC_DAPM_PIN_SWITCH("Speaker"), SOC_DAPM_PIN_SWITCH("Headphone Jack"), }; static const struct snd_soc_dapm_widget broadwell_widgets[] = { SND_SOC_DAPM_HP("Headphone Jack", NULL), SND_SOC_DAPM_SPK("Speaker", NULL), SND_SOC_DAPM_MIC("Mic Jack", NULL), SND_SOC_DAPM_MIC("DMIC1", NULL), SND_SOC_DAPM_MIC("DMIC2", NULL), SND_SOC_DAPM_LINE("Line Jack", NULL), }; static const struct snd_soc_dapm_route broadwell_rt286_map[] = { /* speaker */
// HP MIC {"micbias1", NULL, "Headset Jack"}, {"MIC3", NULL, "micbias1"}, {"Ext Spk", NULL, "SPOLP"}, {"Ext Spk", NULL, "SPOLN"}, {"Ext Spk", NULL, "SPORP"}, {"Ext Spk", NULL, "SPORN"}, {"Headphone Jack", NULL, "HPOL"}, {"Headphone Jack", NULL, "HPOR"}, } ; static const struct snd_kcontrol_new rockchip_rt3261_controls[] = { SOC_DAPM_PIN_SWITCH("Mic Jack"), SOC_DAPM_PIN_SWITCH("Headset Jack"), SOC_DAPM_PIN_SWITCH("Ext Spk"), SOC_DAPM_PIN_SWITCH("Headphone Jack"), }; /* * Logic for a rt3261 as connected on a rockchip board. */ static int rockchip_rt3261_init(struct snd_soc_pcm_runtime *rtd) { struct snd_soc_codec *codec = rtd->codec; struct snd_soc_dapm_context *dapm = &codec->dapm; DBG("Enter::%s----%d\n",__FUNCTION__,__LINE__);
return 0; drvdata->mclk_sel = val; return 1; } /* * Controls */ static struct snd_kcontrol_new mop500_ab8500_ctrls[] = { SOC_ENUM_EXT("Master Clock Select", soc_enum_mclk, mclk_input_control_get, mclk_input_control_put), SOC_DAPM_PIN_SWITCH("Headset Left"), SOC_DAPM_PIN_SWITCH("Headset Right"), SOC_DAPM_PIN_SWITCH("Earpiece"), SOC_DAPM_PIN_SWITCH("Speaker Left"), SOC_DAPM_PIN_SWITCH("Speaker Right"), SOC_DAPM_PIN_SWITCH("LineOut Left"), SOC_DAPM_PIN_SWITCH("LineOut Right"), SOC_DAPM_PIN_SWITCH("Vibra 1"), SOC_DAPM_PIN_SWITCH("Vibra 2"), SOC_DAPM_PIN_SWITCH("Mic 1"), SOC_DAPM_PIN_SWITCH("Mic 2"), SOC_DAPM_PIN_SWITCH("LineIn Left"), SOC_DAPM_PIN_SWITCH("LineIn Right"), SOC_DAPM_PIN_SWITCH("DMic 1"), SOC_DAPM_PIN_SWITCH("DMic 2"), SOC_DAPM_PIN_SWITCH("DMic 3"),
/* */ {"MIC1", NULL, "Mic Bias"}, {"Mic Bias", NULL, "Headset Mic"}, /* */ {"MIC2", NULL, "Mic Bias"}, {"MIC2N", NULL, "Mic Bias"}, {"Mic Bias", NULL, "Handset Mic"}, /* */ {"ACIN", NULL, "ACOP"}, }; static const struct snd_kcontrol_new neo1973_wm8753_controls[] = { SOC_DAPM_PIN_SWITCH("GSM Line Out"), SOC_DAPM_PIN_SWITCH("GSM Line In"), SOC_DAPM_PIN_SWITCH("Headset Mic"), SOC_DAPM_PIN_SWITCH("Handset Mic"), }; /* */ static int gta02_speaker_enabled; static int lm4853_set_spk(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { gta02_speaker_enabled = ucontrol->value.integer.value[0]; gpio_set_value(GTA02_GPIO_HP_IN, !gta02_speaker_enabled);
SND_SOC_DAIFMT_CBM_CFM, .ignore_suspend = 1, .params = &sub_params, .init = lowland_wm9081_init, }, }; static struct snd_soc_codec_conf lowland_codec_conf[] = { { .dev_name = "wm9081.1-006c", .name_prefix = "Sub", }, }; static const struct snd_kcontrol_new controls[] = { SOC_DAPM_PIN_SWITCH("Main Speaker"), SOC_DAPM_PIN_SWITCH("Main DMIC"), SOC_DAPM_PIN_SWITCH("Main AMIC"), SOC_DAPM_PIN_SWITCH("WM1250 Input"), SOC_DAPM_PIN_SWITCH("WM1250 Output"), SOC_DAPM_PIN_SWITCH("Headphone"), }; static struct snd_soc_dapm_widget widgets[] = { SND_SOC_DAPM_HP("Headphone", NULL), SND_SOC_DAPM_MIC("Headset Mic", NULL), SND_SOC_DAPM_SPK("Main Speaker", NULL), SND_SOC_DAPM_MIC("Main AMIC", NULL), SND_SOC_DAPM_MIC("Main DMIC", NULL),
* the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * */ #include <linux/module.h> #include <sound/core.h> #include <sound/pcm.h> #include <sound/soc.h> #include <sound/jack.h> #include "../codecs/wm8994.h" #include "mmp-sspa.h" static const struct snd_kcontrol_new brownstone_dapm_control[] = { SOC_DAPM_PIN_SWITCH("Ext Spk"), }; static const struct snd_soc_dapm_widget brownstone_dapm_widgets[] = { SND_SOC_DAPM_SPK("Ext Spk", NULL), SND_SOC_DAPM_HP("Headset Stereophone", NULL), SND_SOC_DAPM_MIC("Headset Mic", NULL), SND_SOC_DAPM_MIC("Main Mic", NULL), }; static const struct snd_soc_dapm_route brownstone_audio_map[] = { {"Ext Spk", NULL, "SPKOUTLP"}, {"Ext Spk", NULL, "SPKOUTLN"}, {"Ext Spk", NULL, "SPKOUTRP"}, {"Ext Spk", NULL, "SPKOUTRN"},
.hw_params = midas_wm1811_aif2_hw_params, }; static int midas_wm1811_aif3_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params) { pr_err("%s: enter\n", __func__); return 0; } static struct snd_soc_ops midas_wm1811_aif3_ops = { .hw_params = midas_wm1811_aif3_hw_params, }; static const struct snd_kcontrol_new midas_controls[] = { SOC_DAPM_PIN_SWITCH("HP"), SOC_DAPM_PIN_SWITCH("SPK"), SOC_DAPM_PIN_SWITCH("RCV"), SOC_DAPM_PIN_SWITCH("FM In"), SOC_DAPM_PIN_SWITCH("LINE"), SOC_DAPM_PIN_SWITCH("HDMI"), SOC_DAPM_PIN_SWITCH("Main Mic"), SOC_DAPM_PIN_SWITCH("Sub Mic"), SOC_DAPM_PIN_SWITCH("Third Mic"), SOC_DAPM_PIN_SWITCH("Headset Mic"), SOC_ENUM_EXT("AIF2 Mode", aif2_mode_enum[0], get_aif2_mode, set_aif2_mode), SOC_ENUM_EXT("KPCS Mode", kpcs_mode_enum[0], get_kpcs_mode, set_kpcs_mode),
.name = "Headset Mic detection", .report = SND_JACK_MICROPHONE, .debounce_time = 150, .invert = 1 }; static const struct snd_soc_dapm_widget tegra_rt5677_dapm_widgets[] = { SND_SOC_DAPM_SPK("Speaker", NULL), SND_SOC_DAPM_HP("Headphone", tegra_rt5677_event_hp), SND_SOC_DAPM_MIC("Headset Mic", NULL), SND_SOC_DAPM_MIC("Internal Mic 1", NULL), SND_SOC_DAPM_MIC("Internal Mic 2", NULL), }; static const struct snd_kcontrol_new tegra_rt5677_controls[] = { SOC_DAPM_PIN_SWITCH("Speaker"), SOC_DAPM_PIN_SWITCH("Headphone"), SOC_DAPM_PIN_SWITCH("Headset Mic"), SOC_DAPM_PIN_SWITCH("Internal Mic 1"), SOC_DAPM_PIN_SWITCH("Internal Mic 2"), }; static int tegra_rt5677_asoc_init(struct snd_soc_pcm_runtime *rtd) { struct tegra_rt5677 *machine = snd_soc_card_get_drvdata(rtd->card); snd_soc_card_jack_new(rtd->card, "Headphone Jack", SND_JACK_HEADPHONE, &tegra_rt5677_hp_jack, &tegra_rt5677_hp_jack_pins, 1); if (gpio_is_valid(machine->gpio_hp_det)) {
.pin = "Internal Speaker", .mask = SND_JACK_HEADPHONE, }, }; static struct snd_soc_jack_gpio smartq_jack_gpios[] = { { .gpio = S3C64XX_GPL(12), .name = "headphone detect", .report = SND_JACK_HEADPHONE, .debounce_time = 200, }, }; static const struct snd_kcontrol_new wm8987_smartq_controls[] = { SOC_DAPM_PIN_SWITCH("Internal Speaker"), SOC_DAPM_PIN_SWITCH("Headphone Jack"), SOC_DAPM_PIN_SWITCH("Internal Mic"), }; static int smartq_speaker_event(struct snd_soc_dapm_widget *w, struct snd_kcontrol *k, int event) { gpio_set_value(S3C64XX_GPK(12), SND_SOC_DAPM_EVENT_OFF(event)); return 0; } static const struct snd_soc_dapm_widget wm8987_dapm_widgets[] = { SND_SOC_DAPM_SPK("Internal Speaker", smartq_speaker_event),
switch (reg) { case MX27VIS_AMP_GAIN: ucontrol->value.integer.value[0] = mx27vis_amp_gain; break; case MX27VIS_AMP_MUTE: ucontrol->value.integer.value[0] = mx27vis_amp_mute; break; } return 0; } /* From 6dB to 24dB in steps of 6dB */ static const DECLARE_TLV_DB_SCALE(mx27vis_amp_tlv, 600, 600, 0); static const struct snd_kcontrol_new mx27vis_aic32x4_controls[] = { SOC_DAPM_PIN_SWITCH("External Mic"), SOC_SINGLE_EXT_TLV("LO Ext Boost", MX27VIS_AMP_GAIN, 0, 3, 0, mx27vis_amp_get, mx27vis_amp_set, mx27vis_amp_tlv), SOC_DOUBLE_EXT("LO Ext Mute Switch", MX27VIS_AMP_MUTE, 0, 1, 1, 0, mx27vis_amp_get, mx27vis_amp_set), }; static const struct snd_soc_dapm_widget aic32x4_dapm_widgets[] = { SND_SOC_DAPM_MIC("External Mic", NULL), }; static const struct snd_soc_dapm_route aic32x4_dapm_routes[] = { {"Mic Bias", NULL, "External Mic"}, {"IN1_R", NULL, "Mic Bias"}, {"IN2_R", NULL, "Mic Bias"}, {"IN3_R", NULL, "Mic Bias"},
MAX9877_INPUT_MODE, 0, 2, 0, max9877_pgain_tlv), SOC_SINGLE_TLV("MAX9877 PGAINB Playback Volume", MAX9877_INPUT_MODE, 2, 2, 0, max9877_pgain_tlv), SOC_SINGLE_TLV("MAX9877 Amp Speaker Playback Volume", MAX9877_SPK_VOLUME, 0, 31, 0, max9877_output_tlv), SOC_DOUBLE_R_TLV("MAX9877 Amp HP Playback Volume", MAX9877_HPL_VOLUME, MAX9877_HPR_VOLUME, 0, 31, 0, max9877_output_tlv), SOC_SINGLE("MAX9877 INB Stereo Switch", MAX9877_INPUT_MODE, MAX9877_INB, 1, 1), SOC_SINGLE("MAX9877 INA Stereo Switch", MAX9877_INPUT_MODE, MAX9877_INA, 1, 1), SOC_SINGLE("MAX9877 Zero-crossing detection Switch", MAX9877_INPUT_MODE, MAX9877_ZCD, 1, 0), SOC_ENUM("MAX9877 Oscillator Mode", max9877_osc_mode_enum), SOC_DAPM_PIN_SWITCH("INA PGA"), SOC_DAPM_PIN_SWITCH("INB PGA"), }; /* Output MIX */ #define MIX_OUT_POWER (1 << 0) #define MIX_HP_POWER (1 << 1) #define MIX_INA (1 << 0) #define MIX_INB (1 << 1) /* Called with mux_mutex held. */ static void max9877_update_mux(struct snd_soc_codec *codec) { struct max9877_priv *max9877 = snd_soc_codec_get_drvdata(codec); unsigned int mode = max9877->mix_mode; unsigned int power = max9877->mix_power;
static struct snd_soc_jack_gpio tegra_rt5640_hp_jack_gpio = { .name = "Headphone detection", .report = SND_JACK_HEADPHONE, .debounce_time = 150, .invert = 1, }; static const struct snd_soc_dapm_widget tegra_rt5640_dapm_widgets[] = { SND_SOC_DAPM_HP("Headphones", NULL), SND_SOC_DAPM_SPK("Speakers", NULL), SND_SOC_DAPM_MIC("Mic Jack", NULL), }; static const struct snd_kcontrol_new tegra_rt5640_controls[] = { SOC_DAPM_PIN_SWITCH("Speakers"), }; static int tegra_rt5640_asoc_init(struct snd_soc_pcm_runtime *rtd) { struct tegra_rt5640 *machine = snd_soc_card_get_drvdata(rtd->card); snd_soc_card_jack_new(rtd->card, "Headphones", SND_JACK_HEADPHONE, &tegra_rt5640_hp_jack, tegra_rt5640_hp_jack_pins, ARRAY_SIZE(tegra_rt5640_hp_jack_pins)); if (gpio_is_valid(machine->gpio_hp_det)) { tegra_rt5640_hp_jack_gpio.gpio = machine->gpio_hp_det; tegra_rt5640_hp_jack_gpio.invert = !!(machine->gpio_hp_det_flags & OF_GPIO_ACTIVE_LOW); snd_soc_jack_add_gpios(&tegra_rt5640_hp_jack,
ret = snd_soc_dai_set_pll(aif2_dai, WM8994_FLL2, 0, 0, 0); if (ret < 0) { pr_err("Failed to stop FLL2: %d\n", ret); return ret; } break; default: return -EINVAL; } return 0; } static const struct snd_kcontrol_new controls[] = { SOC_DAPM_PIN_SWITCH("WM1250 Input"), SOC_DAPM_PIN_SWITCH("WM1250 Output"), }; static struct snd_soc_dapm_widget widgets[] = { SND_SOC_DAPM_HP("Headphone", NULL), SND_SOC_DAPM_MIC("AMIC", NULL), SND_SOC_DAPM_MIC("DMIC", NULL), SND_SOC_DAPM_SUPPLY_S("Baseband Clock", -1, SND_SOC_NOPM, 0, 0, bbclk_ev, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), }; static struct snd_soc_dapm_route audio_paths[] = {
static struct snd_soc_jack_gpio tegra_max98090_mic_jack_gpio = { .name = "Mic detection", .report = SND_JACK_MICROPHONE, .debounce_time = 150, .invert = 1, }; static const struct snd_soc_dapm_widget tegra_max98090_dapm_widgets[] = { SND_SOC_DAPM_HP("Headphones", NULL), SND_SOC_DAPM_SPK("Speakers", NULL), SND_SOC_DAPM_MIC("Mic Jack", NULL), SND_SOC_DAPM_MIC("Int Mic", NULL), }; static const struct snd_kcontrol_new tegra_max98090_controls[] = { SOC_DAPM_PIN_SWITCH("Headphones"), SOC_DAPM_PIN_SWITCH("Speakers"), SOC_DAPM_PIN_SWITCH("Mic Jack"), SOC_DAPM_PIN_SWITCH("Int Mic"), }; static int tegra_max98090_asoc_init(struct snd_soc_pcm_runtime *rtd) { struct tegra_max98090 *machine = snd_soc_card_get_drvdata(rtd->card); if (gpio_is_valid(machine->gpio_hp_det)) { snd_soc_card_jack_new(rtd->card, "Headphones", SND_JACK_HEADPHONE, &tegra_max98090_hp_jack, tegra_max98090_hp_jack_pins, ARRAY_SIZE(tegra_max98090_hp_jack_pins));
{"Mono Out", NULL, "MONO1"}, {"Mono Out", NULL, "MONO2"}, {"Headphone Jack", NULL, "ROUT1"}, {"Headphone Jack", NULL, "LOUT1"}, {"Headphone Jack", NULL, "OUT4"}, {"Mic Bias", NULL, "Mic Jack"}, {"MIC1", NULL, "Mic Bias"}, {"Mic Bias", NULL, "Int Mic"}, {"MIC2", NULL, "Mic Bias"}, {"MIC2N", NULL, "Mic Bias"}, {"LINE1", NULL, "LineIn Jack"}, {"LINE2", NULL, "LineIn Jack"}, }; static const struct snd_kcontrol_new tegra_wm8753_controls[] = { SOC_DAPM_PIN_SWITCH("Int Spk"), SOC_DAPM_PIN_SWITCH("Earpiece"), SOC_DAPM_PIN_SWITCH("Mono Out"), SOC_DAPM_PIN_SWITCH("Headphone Jack"), SOC_DAPM_PIN_SWITCH("Mic Jack"), SOC_DAPM_PIN_SWITCH("Int Mic"), SOC_DAPM_PIN_SWITCH("LineIn Jack"), }; static int tegra_wm8753_init(struct snd_soc_pcm_runtime *rtd) { struct snd_soc_codec *codec = rtd->codec; struct snd_soc_dapm_context *dapm = &codec->dapm; struct snd_soc_card *card = codec->card; struct tegra_wm8753 *machine = snd_soc_card_get_drvdata(card); struct tegra_asoc_platform_data *pdata = machine->pdata;
}; static const struct snd_soc_dapm_route audio_map[] = { {"Headphone Jack", NULL, "HPR"}, {"Headphone Jack", NULL, "HPL"}, {"Int Spk", NULL, "AUXOUTR"}, {"Int Spk", NULL, "AUXOUTL"}, {"Mic Bias1", NULL, "Int Mic"}, {"MIC1", NULL, "Mic Bias1"}, {"AUXINR", NULL, "FM Radio"}, {"AUXINL", NULL, "FM Radio"}, }; static const struct snd_kcontrol_new controls[] = { SOC_DAPM_PIN_SWITCH("Int Spk"), SOC_DAPM_PIN_SWITCH("Headphone Jack"), SOC_DAPM_PIN_SWITCH("Int Mic"), SOC_DAPM_PIN_SWITCH("FM"), SOC_DAPM_PIN_SWITCH("Mic Bias1"), }; static const char* nc_pins[] = { "SPKOUT", "SPKOUTN", "LINEINL", "LINEINR", "MIC2", }; #endif
SND_SOC_DAPM_SPK("Speaker", NULL), }; static const struct snd_soc_dapm_route rk_audio_map[] = { {"IN34", NULL, "Headset Mic"}, {"IN34", NULL, "MICBIAS"}, {"Headset Mic", NULL, "MICBIAS"}, {"DMICL", NULL, "Int Mic"}, {"Headphone", NULL, "HPL"}, {"Headphone", NULL, "HPR"}, {"Speaker", NULL, "SPKL"}, {"Speaker", NULL, "SPKR"}, }; static const struct snd_kcontrol_new rk_mc_controls[] = { SOC_DAPM_PIN_SWITCH("Headphone"), SOC_DAPM_PIN_SWITCH("Headset Mic"), SOC_DAPM_PIN_SWITCH("Int Mic"), SOC_DAPM_PIN_SWITCH("Speaker"), }; static int rk_aif1_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params) { int ret = 0; struct snd_soc_pcm_runtime *rtd = substream->private_data; struct snd_soc_dai *cpu_dai = rtd->cpu_dai; struct snd_soc_dai *codec_dai = rtd->codec_dai; int mclk; switch (params_rate(params)) {
{"Headphone", NULL, "HPOR"}, {"Ext Spk", NULL, "SPOLP"}, {"Ext Spk", NULL, "SPOLN"}, {"Ext Spk", NULL, "SPORP"}, {"Ext Spk", NULL, "SPORN"}, {"AIF1 Playback", NULL, "ssp2 Tx"}, {"ssp2 Tx", NULL, "codec_out0"}, {"ssp2 Tx", NULL, "codec_out1"}, {"codec_in0", NULL, "ssp2 Rx"}, {"codec_in1", NULL, "ssp2 Rx"}, {"ssp2 Rx", NULL, "AIF1 Capture"}, }; static const struct snd_kcontrol_new byt_mc_controls[] = { SOC_DAPM_PIN_SWITCH("Headphone"), SOC_DAPM_PIN_SWITCH("Headset Mic"), SOC_DAPM_PIN_SWITCH("Int Mic"), SOC_DAPM_PIN_SWITCH("Ext Spk"), }; static int byt_aif1_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params) { struct snd_soc_pcm_runtime *rtd = substream->private_data; struct snd_soc_dai *codec_dai = rtd->codec_dai; int ret; snd_soc_dai_set_bclk_ratio(codec_dai, 50); ret = snd_soc_dai_set_sysclk(codec_dai, RT5640_SCLK_S_PLL1,
.hw_params = midas_wm1811_aif2_hw_params, }; static int midas_wm1811_aif3_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params) { pr_err("%s: enter\n", __func__); return 0; } static struct snd_soc_ops midas_wm1811_aif3_ops = { .hw_params = midas_wm1811_aif3_hw_params, }; static const struct snd_kcontrol_new midas_controls[] = { SOC_DAPM_PIN_SWITCH("HP"), SOC_DAPM_PIN_SWITCH("SPK"), SOC_DAPM_PIN_SWITCH("RCV"), SOC_DAPM_PIN_SWITCH("FM In"), SOC_DAPM_PIN_SWITCH("LINE"), }; 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", 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),
/* Digital MICs * Local DMICs: the two DMICs on the mainboard * Remote DMICs: the two DMICs on the camera module */ {"DMIC L1", NULL, "Remote DMICs"}, {"DMIC R1", NULL, "Remote DMICs"}, {"DMIC L2", NULL, "Local DMICs"}, {"DMIC R2", NULL, "Local DMICs"}, /* CODEC BE connections */ {"SSP0 CODEC IN", NULL, "AIF1 Capture"}, {"AIF1 Playback", NULL, "SSP0 CODEC OUT"}, }; static const struct snd_kcontrol_new bdw_rt5677_controls[] = { SOC_DAPM_PIN_SWITCH("Speaker"), SOC_DAPM_PIN_SWITCH("Headphone"), SOC_DAPM_PIN_SWITCH("Headset Mic"), SOC_DAPM_PIN_SWITCH("Local DMICs"), SOC_DAPM_PIN_SWITCH("Remote DMICs"), }; static struct snd_soc_jack headphone_jack; static struct snd_soc_jack mic_jack; static struct snd_soc_jack_pin headphone_jack_pin = { .pin = "Headphone", .mask = SND_JACK_HEADPHONE, };
{"Int Spk", NULL, "LON"}, {"Mic Bias", NULL, "Mic Jack"}, {"IN2R", NULL, "Mic Bias"}, }; static const struct snd_soc_dapm_route aebl_audio_map[] = { {"Headphone Jack", NULL, "HPOUTR"}, {"Headphone Jack", NULL, "HPOUTL"}, {"Int Spk", NULL, "LINEOUTR"}, {"Int Spk", NULL, "LINEOUTL"}, {"Mic Bias", NULL, "Mic Jack"}, {"IN1R", NULL, "Mic Bias"}, }; static const struct snd_kcontrol_new cardhu_controls[] = { SOC_DAPM_PIN_SWITCH("Int Spk"), SOC_DAPM_PIN_SWITCH("Headphone Jack"), SOC_DAPM_PIN_SWITCH("LineOut"), SOC_DAPM_PIN_SWITCH("Mic Jack"), SOC_DAPM_PIN_SWITCH("Int Mic"), SOC_DAPM_PIN_SWITCH("LineIn"), }; static const struct snd_kcontrol_new tegra_wm8903_default_controls[] = { SOC_DAPM_PIN_SWITCH("Int Spk"), }; static int tegra_wm8903_init(struct snd_soc_pcm_runtime *rtd) { struct snd_soc_codec *codec = rtd->codec; struct snd_soc_dapm_context *dapm = &codec->dapm;
priv->i2s1_in_mux = ucontrol->value.integer.value[0]; return 0; } static const struct snd_soc_dapm_widget mt2701_cs42448_asoc_card_dapm_widgets[] = { SND_SOC_DAPM_LINE("Line Out Jack", NULL), SND_SOC_DAPM_MIC("AMIC", NULL), SND_SOC_DAPM_LINE("Tuner In", NULL), SND_SOC_DAPM_LINE("Satellite Tuner In", NULL), SND_SOC_DAPM_LINE("AUX In", NULL), }; static const struct snd_kcontrol_new mt2701_cs42448_controls[] = { SOC_DAPM_PIN_SWITCH("Line Out Jack"), SOC_DAPM_PIN_SWITCH("AMIC"), SOC_DAPM_PIN_SWITCH("Tuner In"), SOC_DAPM_PIN_SWITCH("Satellite Tuner In"), SOC_DAPM_PIN_SWITCH("AUX In"), SOC_ENUM_EXT("I2SIN1_MUX_Switch", i2sin_mux_enum, mt2701_cs42448_i2sin1_mux_get, mt2701_cs42448_i2sin1_mux_set), }; static const unsigned int mt2701_cs42448_sampling_rates[] = {48000}; static const struct snd_pcm_hw_constraint_list mt2701_cs42448_constraints_rates = { .count = ARRAY_SIZE(mt2701_cs42448_sampling_rates), .list = mt2701_cs42448_sampling_rates, .mask = 0,
static int bt_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params) { struct snd_soc_pcm_runtime *rtd = substream->private_data; struct snd_soc_dai *codec_dai = rtd->codec_dai; int ret = 0; if (params_rate(params) != 8000) return -EINVAL; /* set codec aif3 configuration */ ret = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_IB_NF); if (ret < 0) return ret; return 0; } static const struct snd_kcontrol_new ac100_pin_controls[] = { SOC_DAPM_PIN_SWITCH("External Speaker"), SOC_DAPM_PIN_SWITCH("Headphone"), SOC_DAPM_PIN_SWITCH("Earpiece"), }; static const struct snd_soc_dapm_widget a80_ac100_dapm_widgets[] = { SND_SOC_DAPM_MIC("External MainMic", NULL), SND_SOC_DAPM_MIC("HeadphoneMic", NULL), SND_SOC_DAPM_MIC("DigitalMic", NULL), }; static const struct snd_soc_dapm_route audio_map[] = { {"MainMic Bias", NULL, "External MainMic"}, {"MIC1P", NULL, "MainMic Bias"}, {"MIC1N", NULL, "MainMic Bias"}, {"MIC2", NULL, "HMic Bias"},
}; static int omap4_wm8994_aif3_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params) { pr_err("%s: enter\n", __func__); return 0; } static struct snd_soc_ops omap4_wm8994_aif3_ops = { .hw_params = omap4_wm8994_aif3_hw_params, }; static const struct snd_kcontrol_new omap4_controls[] = { SOC_DAPM_PIN_SWITCH("HP"), SOC_DAPM_PIN_SWITCH("SPK"), SOC_DAPM_PIN_SWITCH("RCV"), SOC_DAPM_PIN_SWITCH("LINEOUT"), SOC_DAPM_PIN_SWITCH("Main Mic"), #if defined(CONFIG_MACH_SAMSUNG_ESPRESSO) \ || defined(CONFIG_MACH_SAMSUNG_ESPRESSO_CHN_CMCC) SOC_DAPM_PIN_SWITCH("Sub Mic"), #endif SOC_DAPM_PIN_SWITCH("Headset Mic"), SOC_ENUM_EXT("HP Output Mode", hp_mode_enum[0], get_hp_output_mode, set_hp_output_mode), SOC_ENUM_EXT("AIF2 Mode", aif2_mode_enum[0], get_aif2_mode, set_aif2_mode), SOC_ENUM_EXT("PM Constraints Mode", pm_mode_enum[0],
{"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"}, {"IN2R", NULL, "Mic Bias Int"}, {"Mic Bias Ext" ,NULL, "Mic Jack"}, {"CM1L" ,NULL, "Mic Jack"}, {"IN1L", NULL, "Mic Bias Ext"}, {"IN1L", NULL, "CM1L"}, }; static const struct snd_kcontrol_new tegra_aic326x_controls[] = { SOC_DAPM_PIN_SWITCH("Int Spk"), SOC_DAPM_PIN_SWITCH("Earpiece"), SOC_DAPM_PIN_SWITCH("Headphone Jack"), SOC_DAPM_PIN_SWITCH("Mic Jack"), SOC_DAPM_PIN_SWITCH("Ext Mic"), SOC_DAPM_PIN_SWITCH("Linein"), SOC_DAPM_PIN_SWITCH("Int Mic"), }; static int tegra_aic326x_init(struct snd_soc_pcm_runtime *rtd) { struct snd_soc_codec *codec = rtd->codec; struct snd_soc_dapm_context *dapm = &codec->dapm; struct snd_soc_card *card = codec->card; struct tegra_aic326x *machine = snd_soc_card_get_drvdata(card); struct tegra_aic326x_platform_data *pdata = machine->pdata;
static struct snd_soc_dai_link tobermory_dai[] = { { .name = "CPU", .stream_name = "CPU", .cpu_dai_name = "samsung-i2s.0", .codec_dai_name = "wm8962", .platform_name = "samsung-audio", .codec_name = "wm8962.1-001a", .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBM_CFM, .ops = &tobermory_ops, }, }; static const struct snd_kcontrol_new controls[] = { SOC_DAPM_PIN_SWITCH("Main Speaker"), SOC_DAPM_PIN_SWITCH("DMIC"), }; static struct snd_soc_dapm_widget widgets[] = { SND_SOC_DAPM_HP("Headphone", NULL), SND_SOC_DAPM_MIC("Headset Mic", NULL), SND_SOC_DAPM_MIC("DMIC", NULL), SND_SOC_DAPM_MIC("AMIC", NULL), SND_SOC_DAPM_SPK("Main Speaker", NULL), }; static struct snd_soc_dapm_route audio_paths[] = { { "Headphone", NULL, "HPOUTL" },
return 0; } static const struct snd_kcontrol_new adonisuniv_codec_controls[] = { SOC_ENUM_EXT("LHPF1 COEFF FILTER", lhpf_filter_mode_enum[0], get_lhpf1_coeff, set_lhpf1_coeff), SOC_ENUM_EXT("LHPF2 COEFF FILTER", lhpf_filter_mode_enum[0], get_lhpf2_coeff, set_lhpf2_coeff), SOC_ENUM_EXT("AIF2 Mode", aif2_mode_enum[0], get_aif2_mode, set_aif2_mode), }; static const struct snd_kcontrol_new adonisuniv_controls[] = { SOC_DAPM_PIN_SWITCH("HP"), SOC_DAPM_PIN_SWITCH("SPK"), SOC_DAPM_PIN_SWITCH("RCV"), SOC_DAPM_PIN_SWITCH("VPS"), SOC_DAPM_PIN_SWITCH("HDMI"), SOC_DAPM_PIN_SWITCH("Main Mic"), SOC_DAPM_PIN_SWITCH("Sub Mic"), SOC_DAPM_PIN_SWITCH("3rd Mic"), SOC_DAPM_PIN_SWITCH("Headset Mic"), }; const struct snd_soc_dapm_widget adonisuniv_dapm_widgets[] = { SND_SOC_DAPM_OUTPUT("HDMIL"), SND_SOC_DAPM_OUTPUT("HDMIR"), SND_SOC_DAPM_HP("HP", NULL), SND_SOC_DAPM_SPK("SPK", NULL),
static const char *jack_function[] = {"Off", "TV-OUT", "Headphone", "Headset"}; static const struct soc_enum rx51_enum[] = { SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(spk_function), spk_function), SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(input_function), input_function), SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(jack_function), jack_function), }; static const struct snd_kcontrol_new aic34_rx51_controls[] = { SOC_ENUM_EXT("Speaker Function", rx51_enum[0], rx51_get_spk, rx51_set_spk), SOC_ENUM_EXT("Input Select", rx51_enum[1], rx51_get_input, rx51_set_input), SOC_ENUM_EXT("Jack Function", rx51_enum[2], rx51_get_jack, rx51_set_jack), SOC_DAPM_PIN_SWITCH("FM Transmitter"), }; static const struct snd_kcontrol_new aic34_rx51_controlsb[] = { SOC_DAPM_PIN_SWITCH("Earphone"), }; static int rx51_aic34_init(struct snd_soc_pcm_runtime *rtd) { struct snd_soc_codec *codec = rtd->codec; struct snd_soc_dapm_context *dapm = &codec->dapm; int err; /* Set up NC codec pins */ snd_soc_dapm_nc_pin(dapm, "MIC3L"); snd_soc_dapm_nc_pin(dapm, "MIC3R");
return 0; gpio_set_value_cansleep(machine->gpio_hp_mute, !SND_SOC_DAPM_EVENT_ON(event)); return 0; } static const struct snd_soc_dapm_widget tegra_wm8903_dapm_widgets[] = { SND_SOC_DAPM_SPK("Int Spk", tegra_wm8903_event_int_spk), SND_SOC_DAPM_HP("Headphone Jack", tegra_wm8903_event_hp), SND_SOC_DAPM_MIC("Mic Jack", NULL), }; static const struct snd_kcontrol_new tegra_wm8903_controls[] = { SOC_DAPM_PIN_SWITCH("Int Spk"), }; static int tegra_wm8903_init(struct snd_soc_pcm_runtime *rtd) { struct snd_soc_dai *codec_dai = rtd->codec_dai; struct snd_soc_codec *codec = codec_dai->codec; struct snd_soc_card *card = rtd->card; struct tegra_wm8903 *machine = snd_soc_card_get_drvdata(card); if (gpio_is_valid(machine->gpio_hp_det)) { tegra_wm8903_hp_jack_gpio.gpio = machine->gpio_hp_det; snd_soc_card_jack_new(rtd->card, "Headphone Jack", SND_JACK_HEADPHONE, &tegra_wm8903_hp_jack, tegra_wm8903_hp_jack_pins, ARRAY_SIZE(tegra_wm8903_hp_jack_pins));
static const struct snd_soc_dapm_route cardhu_audio_map[] = { {"Headphone Jack", NULL, "HPOUTR"}, {"Headphone Jack", NULL, "HPOUTL"}, {"Int Spk", NULL, "ROP"}, {"Int Spk", NULL, "RON"}, {"Int Spk", NULL, "LOP"}, {"Int Spk", NULL, "LON"}, {"IN1L", NULL, "Mic Jack"}, {"IN2L", NULL, "Mic Jack"}, {"DMIC", NULL, "Int Mic"}, {"AUX", NULL, "LINEOUTL"}, {"AUX", NULL, "LINEOUTR"}, }; static const struct snd_kcontrol_new cardhu_controls[] = { SOC_DAPM_PIN_SWITCH("Int Spk"), SOC_DAPM_PIN_SWITCH("Headphone Jack"), SOC_DAPM_PIN_SWITCH("Mic Jack"), SOC_DAPM_PIN_SWITCH("Int Mic"), SOC_DAPM_PIN_SWITCH("AUX"), }; static const struct snd_kcontrol_new tegra_wm8903_default_controls[] = { SOC_DAPM_PIN_SWITCH("Int Spk"), }; static int tegra_wm8903_init(struct snd_soc_pcm_runtime *rtd) { struct snd_soc_codec *codec = rtd->codec; struct snd_soc_dapm_context *dapm = &codec->dapm; struct snd_soc_card *card = codec->card;