} static int asrc_set_rate(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { if (asrc_func == ucontrol->value.enumerated.item[0]) return 0; asrc_func = ucontrol->value.enumerated.item[0]; asrc_esai_data.output_sample_rate = asrc_rates[asrc_func + 4]; return 1; } static const struct snd_kcontrol_new asrc_controls[] = { SOC_ENUM_EXT("ASRC", asrc_enum[0], asrc_get_rate, asrc_set_rate), }; #endif static int imx_3stack_cs42888_init(struct snd_soc_codec *codec) { #if defined(CONFIG_MXC_ASRC) || defined(CONFIG_MXC_ASRC_MODULE) int i; int ret; for (i = 0; i < ARRAY_SIZE(asrc_controls); i++) { ret = snd_ctl_add(codec->card, snd_soc_cnew(&asrc_controls[i], codec, NULL)); if (ret < 0) return ret;
struct wm8804_priv *wm8804 = container_of(nb, struct wm8804_priv, \ disable_nb[n]); \ if (event & REGULATOR_EVENT_DISABLE) { \ regcache_mark_dirty(wm8804->regmap); \ } \ return 0; \ } WM8804_REGULATOR_EVENT(0) WM8804_REGULATOR_EVENT(1) static const char *txsrc_text[] = { "S/PDIF RX", "AIF" }; static SOC_ENUM_SINGLE_EXT_DECL(txsrc, txsrc_text); static const struct snd_kcontrol_new wm8804_snd_controls[] = { SOC_ENUM_EXT("Input Source", txsrc, txsrc_get, txsrc_put), SOC_SINGLE("TX Playback Switch", WM8804_PWRDN, 2, 1, 1), SOC_SINGLE("AIF Playback Switch", WM8804_PWRDN, 4, 1, 1) }; static int txsrc_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { struct snd_soc_codec *codec; unsigned int src; codec = snd_soc_kcontrol_codec(kcontrol); src = snd_soc_read(codec, WM8804_SPDTX4); if (src & 0x40) ucontrol->value.integer.value[0] = 1; else
return 1; } static const struct snd_soc_dapm_widget u1_dapm_widgets[] = { SND_SOC_DAPM_HP("Headset Out", NULL), SND_SOC_DAPM_MIC("Mic In", NULL), SND_SOC_DAPM_LINE("Line In", NULL), }; static const struct soc_enum u1_aud_enum[] = { SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(u1_aud_scenario), u1_aud_scenario), }; static const struct snd_kcontrol_new u1_aud_controls[] = { SOC_ENUM_EXT("U1 Audio Mode", u1_aud_enum[0], u1_mc1n2_getp, u1_mc1n2_setp), }; static const struct snd_soc_dapm_route u1_dapm_routes[] = { /* Connections to Headset */ {"Headset Out", NULL, "HPOUT1L"}, {"Headset Out", NULL, "HPOUT1R"}, /* Connections to Mics */ {"IN1LN", NULL, "Mic In"}, {"IN1RN", NULL, "Mic In"}, /* Connections to Line In */ {"IN2LN", NULL, "Line In"}, {"IN2RN", NULL, "Line In"}, }; static int u1_hifiaudio_init(struct snd_soc_pcm_runtime *rtd)
// set APLL clock setting EnableApll1(false); EnableApll2(false); EnableI2SDivPower(AUDIO_APLL1_DIV0, false); EnableI2SDivPower(AUDIO_APLL2_DIV0, false); AudDrv_APLL1Tuner_Clk_Off(); AudDrv_APLL2Tuner_Clk_Off(); AudDrv_Clk_Off(); } return 0; } static const struct snd_kcontrol_new Audio_snd_I2S0dl1_controls[] = { SOC_ENUM_EXT("Audio_I2S0dl1_hd_Switch", Audio_I2S0dl1_Enum[0], Audio_I2S0dl1_hdoutput_Get, Audio_I2S0dl1_hdoutput_Set), }; static struct snd_pcm_hardware mtk_I2S0dl1_hardware = { .info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_RESUME | SNDRV_PCM_INFO_MMAP_VALID), .formats = SND_SOC_ADV_MT_FMTS, .rates = SOC_HIGH_USE_RATE, .rate_min = SOC_HIGH_USE_RATE_MIN, .rate_max = SOC_HIGH_USE_RATE_MAX, .channels_min = SOC_NORMAL_USE_CHANNELS_MIN, .channels_max = SOC_NORMAL_USE_CHANNELS_MAX, .buffer_bytes_max = SOC_NORMAL_USE_BUFFERSIZE_MAX,
static int msm8930_pmic_gain_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { int ret = 0; msm8930_pmic_spk_gain = ucontrol->value.integer.value[0]; if (socinfo_get_pmic_model() != PMIC_MODEL_PM8917) ret = pm8xxx_spk_gain(msm8930_pmic_spk_gain); pr_debug("%s: msm8930_pmic_spk_gain = %d" " ucontrol->value.integer.value[0] = %d\n", __func__, msm8930_pmic_spk_gain, (int) ucontrol->value.integer.value[0]); return ret; } static const struct snd_kcontrol_new sitar_msm8930_controls[] = { SOC_ENUM_EXT("Speaker Function", msm8930_enum[0], msm8930_get_spk, msm8930_set_spk), SOC_ENUM_EXT("SLIM_0_RX Channels", msm8930_enum[1], msm8930_slim_0_rx_ch_get, msm8930_slim_0_rx_ch_put), SOC_ENUM_EXT("SLIM_0_TX Channels", msm8930_enum[2], msm8930_slim_0_tx_ch_get, msm8930_slim_0_tx_ch_put), SOC_ENUM_EXT("PMIC SPK Gain", msm8960_pmic_spk_gain_enum[0], msm8930_pmic_gain_get, msm8930_pmic_gain_put), SOC_ENUM_EXT("Internal BTSCO SampleRate", msm8930_btsco_enum[0], msm8930_btsco_rate_get, msm8930_btsco_rate_put), }; static void *def_sitar_mbhc_cal(void) { void *sitar_cal; struct sitar_mbhc_btn_detect_cfg *btn_cfg; u16 *btn_low, *btn_high;
} static int Audio_i2s0_ExtCodec_EchoRef_Set(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { printk("%s()\n", __func__); if (ucontrol->value.enumerated.item[0] > ARRAY_SIZE(i2s0_ExtCodec_EchoRef)) { printk("return -EINVAL\n"); return -EINVAL; } mi2s0_extcodec_echoref_control = ucontrol->value.integer.value[0]; return 0; } static const struct snd_kcontrol_new Audio_snd_i2s0_controls[] = { SOC_ENUM_EXT("Audio_i2s0_SideGen_Switch", Audio_i2s0_Enum[0], Audio_i2s0_SideGen_Get, Audio_i2s0_SideGen_Set), SOC_ENUM_EXT("Audio_i2s0_hd_Switch", Audio_i2s0_Enum[1], Audio_i2s0_hdoutput_Get, Audio_i2s0_hdoutput_Set), SOC_ENUM_EXT("Audio_ExtCodec_EchoRef_Switch", Audio_i2s0_Enum[2], Audio_i2s0_ExtCodec_EchoRef_Get, Audio_i2s0_ExtCodec_EchoRef_Set), }; static struct snd_pcm_hardware mtk_i2s0_hardware = { .info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_RESUME | SNDRV_PCM_INFO_MMAP_VALID), .formats = Dl1_MAX_BUFFER_SIZE, .rates = SOC_HIGH_USE_RATE, .rate_min = SOC_HIGH_USE_RATE_MIN, .rate_max = SOC_HIGH_USE_RATE_MAX, .channels_min = SOC_NORMAL_USE_CHANNELS_MIN,
{"LINE1L", NULL, "b Mic Bias 2.5V"}, {"b Mic Bias 2.5V", NULL, "HS Mic"} }; static const char *spk_function[] = {"Off", "On"}; static const char *input_function[] = {"ADC", "Digital Mic"}; 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;
struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); struct wl1273_priv *wl1273 = snd_soc_codec_get_drvdata(codec); int r; dev_dbg(codec->dev, "%s: enter.\n", __func__); r = wl1273->core->set_volume(wl1273->core, ucontrol->value.integer.value[0]); if (r) return r; return 1; } static const struct snd_kcontrol_new wl1273_controls[] = { SOC_ENUM_EXT("Codec Mode", wl1273_enum, snd_wl1273_get_audio_route, snd_wl1273_set_audio_route), SOC_ENUM_EXT("Audio Switch", wl1273_audio_enum, snd_wl1273_fm_audio_get, snd_wl1273_fm_audio_put), SOC_SINGLE_EXT("Volume", 0, 0, WL1273_MAX_VOLUME, 0, snd_wl1273_fm_volume_get, snd_wl1273_fm_volume_put), }; static int wl1273_startup(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) { struct snd_soc_pcm_runtime *rtd = substream->private_data; struct snd_soc_codec *codec = rtd->codec; struct wl1273_priv *wl1273 = snd_soc_codec_get_drvdata(codec); switch (wl1273->mode) { case WL1273_MODE_BT:
} else { // set APLL clock setting EnableApll1(false); EnableApll2(false); EnableI2SDivPower(AUDIO_APLL1_DIV0, false); EnableI2SDivPower(AUDIO_APLL2_DIV0, false); } AudDrv_Clk_Off(); return 0; } static const struct snd_kcontrol_new Audio_snd_i2s0_controls[] = { SOC_ENUM_EXT("Audio_i2s0_SideGen_Switch", Audio_i2s0_Enum[0], Audio_i2s0_SideGen_Get, Audio_i2s0_SideGen_Set), SOC_ENUM_EXT("Audio_i2s0_hd_Switch", Audio_i2s0_Enum[1], Audio_i2s0_hdoutput_Get, Audio_i2s0_hdoutput_Set), }; static struct snd_pcm_hardware mtk_i2s0_hardware = { .info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_RESUME | SNDRV_PCM_INFO_MMAP_VALID), .formats = Dl1_MAX_BUFFER_SIZE, .rates = SOC_HIGH_USE_RATE, .rate_min = SOC_HIGH_USE_RATE_MIN, .rate_max = SOC_HIGH_USE_RATE_MAX, .channels_min = SOC_NORMAL_USE_CHANNELS_MIN, .channels_max = SOC_NORMAL_USE_CHANNELS_MAX,
.startup = tab3_wm1811_aif3_startup, .shutdown = tab3_wm1811_aif3_shutdown, .hw_params = tab3_wm1811_aif3_hw_params, }; static const struct snd_kcontrol_new tab3_controls[] = { SOC_DAPM_PIN_SWITCH("HP"), SOC_DAPM_PIN_SWITCH("SPK"), SOC_DAPM_PIN_SWITCH("RCV"), 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("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), SOC_ENUM_EXT("Input Clamp", input_clamp_enum[0], get_input_clamp, set_input_clamp), SOC_ENUM_EXT("LineoutSwitch Mode", lineout_mode_enum[0], get_lineout_mode, set_lineout_mode), SOC_ENUM_EXT("AIF2 digital mute", switch_mode_enum[0], get_aif2_mute_status, set_aif2_mute_status), };
return 0; twl6040_power_mode = ucontrol->value.integer.value[0]; abe_dsp_set_power_mode(twl6040_power_mode); return 1; } static const char *power_texts[] = {"Low-Power", "High-Performance"}; static const struct soc_enum sdp4430_enum[] = { 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"), SND_SOC_DAPM_SUPPLY("AV Switch Supply", SND_SOC_NOPM, 0, 0, sdp4430_av_switch_event, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_MIC("Digital Mic 0", NULL), SND_SOC_DAPM_MIC("Digital Mic 1", NULL),
"Speaker", "Mute", #if 0 "Capture Line In", "Headphones", "Capture Mic1", #endif }; static const struct soc_enum smdk_scenario_enum[] = { SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(smdk_scenarios),smdk_scenarios), }; static const struct snd_kcontrol_new wm8987_imapx200_controls[] = { #if 0 SOC_ENUM_EXT("SMDK Mode", smdk_scenario_enum[0], imapx200_get_scenario, imapx200_set_scenario), #endif }; /* * This is an example machine initialisation for a wm8987 connected to a * imapx200. It is missing logic to detect hp/mic insertions and logic * to re-route the audio in such an event. */ static int imapx200_wm8987_init(struct snd_soc_codec *codec) { int i, err; /* set endpoints to default mode */ // set_scenario_endpoints(codec, IMAPX200_AUDIO_OFF);
/* Same as the above but no mic bias for line signals */ {"MICIN", NULL, "Line Jack"}, {NULL, NULL, NULL}, }; static const char *jack_function[] = {"Headphone", "Mic", "Line", "Headset", "Off"}; static const char *spk_function[] = {"On", "Off"}; static const struct soc_enum pavo_enum[] = { SOC_ENUM_SINGLE_EXT(5, jack_function), SOC_ENUM_SINGLE_EXT(2, spk_function), }; static const struct snd_kcontrol_new jzcodec_pavo_controls[] = { SOC_ENUM_EXT("Jack Function", pavo_enum[0], pavo_get_jack, pavo_set_jack), SOC_ENUM_EXT("Speaker Function", pavo_enum[1], pavo_get_spk, pavo_set_spk), }; /* * Pavo for a jzcodec as connected on jz4740 Device */ static int pavo_jzcodec_init(struct snd_soc_codec *codec) { int i, err; snd_soc_dapm_nc_pin(codec, "LLINEIN"); snd_soc_dapm_nc_pin(codec, "RLINEIN"); /* Add pavo specific controls */
return -EINVAL; if (drvdata->mclk_sel == val) 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"),
((device == CTP_COMMS_MSIC_VOIP_DEV) &&\ ctl->ssp_voip_master_mode)) || (device == CTP_COMMS_IFX_MODEM_DEV &&\ ctl->ssp_modem_master_mode)) { snd_soc_dai_set_sysclk(cpu_dai, SSP_CLK_ONCHIP, substream->runtime->rate, 0); } return 0; } /* ctp_comms_dai_link_prepare */ static const struct snd_kcontrol_new ssp_comms_controls[] = { SOC_ENUM_EXT("SSP BT Master Mode", ssp_bt_sco_master_mode_enum, get_ssp_bt_sco_master_mode, set_ssp_bt_sco_master_mode), SOC_ENUM_EXT("SSP VOIP Master Mode", ssp_voip_master_mode_enum, get_ssp_voip_master_mode, set_ssp_voip_master_mode), SOC_ENUM_EXT("SSP Modem Master Mode", ssp_modem_master_mode_enum, get_ssp_modem_master_mode, set_ssp_modem_master_mode), SOC_DAPM_PIN_SWITCH("Headphone"), SOC_DAPM_PIN_SWITCH("Headset Mic"), SOC_DAPM_PIN_SWITCH("Ext Spk"), SOC_DAPM_PIN_SWITCH("Int Mic"), SOC_DAPM_PIN_SWITCH("Receiver"), };
/* Headphone connects to IN3R with Bias */ {"IN3R", NULL, "Mic Bias"}, {"Mic Bias", NULL, "Headphone Jack"}, {"ADCL", NULL, "CLK_SYS_ENA"}, {"ADCR", NULL, "CLK_SYS_ENA"}, {"DACL", NULL, "CLK_SYS_ENA"}, {"DACR", NULL, "CLK_SYS_ENA"}, }; static const char *cmn_status[] = {"Off", "On"}; static const struct soc_enum msm8660_enum[] = { SOC_ENUM_SINGLE_EXT(2, cmn_status), }; static const struct snd_kcontrol_new wm8903_msm8660_controls[] = { SOC_ENUM_EXT("Speaker Function", msm8660_enum[0], msm8660_get_spk, msm8660_set_spk), SOC_ENUM_EXT("Headset Function", msm8660_enum[0], msm8660_get_hs, msm8660_set_hs), SOC_ENUM_EXT("Headphone Function", msm8660_enum[0], msm8660_get_hph, msm8660_set_hph), }; static int msm8660_audrx_init(struct snd_soc_pcm_runtime *rtd) { struct snd_soc_codec *codec = rtd->codec; int err; snd_soc_dapm_disable_pin(&codec->dapm, "Ext Spk"); snd_soc_dapm_enable_pin(&codec->dapm, "CLK_SYS_ENA"); err = snd_soc_add_controls(codec, wm8903_msm8660_controls,
ucontrol->value.integer.value[0] = voc_get_pp_enable(voc_get_session_id(VOICE_SESSION_NAME), MODULE_ID_VOICE_MODULE_ST); return 0; } static struct snd_kcontrol_new msm_voice_controls[] = { SOC_SINGLE_MULTI_EXT("Voice Rx Device Mute", SND_SOC_NOPM, 0, VSID_MAX, 0, 3, NULL, msm_voice_rx_device_mute_put), SOC_SINGLE_MULTI_EXT("Voice Tx Device Mute", SND_SOC_NOPM, 0, VSID_MAX, 0, 3, NULL, msm_voice_tx_device_mute_put), SOC_SINGLE_MULTI_EXT("Voice Tx Mute", SND_SOC_NOPM, 0, VSID_MAX, 0, 3, NULL, msm_voice_mute_put), SOC_SINGLE_MULTI_EXT("Voice Rx Gain", SND_SOC_NOPM, 0, VSID_MAX, 0, 3, NULL, msm_voice_gain_put), SOC_ENUM_EXT("TTY Mode", msm_tty_mode_enum[0], msm_voice_tty_mode_get, msm_voice_tty_mode_put), SOC_SINGLE_MULTI_EXT("Slowtalk Enable", SND_SOC_NOPM, 0, VSID_MAX, 0, 2, msm_voice_slowtalk_get, msm_voice_slowtalk_put), #ifdef CONFIG_SEC_DHA_SOL_MAL #if defined(CONFIG_AUDIO_DUAL_CP) || defined(CONFIG_MACH_KLTE_CTC) \ || defined(CONFIG_MACH_KLTE_CMCCDUOS) || defined(CONFIG_MACH_KLTE_CUDUOS) \ || defined(CONFIG_MACH_MEGA23GEUR_OPEN) || defined(CONFIG_MACH_MS01_EUR_3G) \ || defined(CONFIG_MACH_MEGA2LTE_KTT) || defined(CONFIG_MACH_ATLANTIC3GEUR_OPEN) \ || defined(CONFIG_MACH_MS01_EUR_LTE) || defined(CONFIG_MACH_MS01_KOR_LTE) || defined(CONFIG_DSDA_VIA_UART) SOC_SINGLE_MULTI_EXT("Sec Set DHA data", SND_SOC_NOPM, 0, VSID_MAX, 0, 15, msm_sec_dha_get, msm_sec_dha_put), #else SOC_SINGLE_MULTI_EXT("Sec Set DHA data", SND_SOC_NOPM, 0, 65535, 0, 14, msm_sec_dha_get, msm_sec_dha_put), #endif #endif /* CONFIG_SEC_DHA_SOL_MAL */
0, tegra_get_avp_device, tegra_set_avp_device), { .name = "AVP DMA channel id", \ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ .info = snd_soc_info_volsw, \ .access = SNDRV_CTL_ELEM_ACCESS_READ, \ .get = tegra_get_dma_ch_id, \ .private_value = SOC_SINGLE_VALUE(0, 0, \ TEGRA_DMA_MAX_CHANNELS, 0) }, SOC_SINGLE_EXT("AVP DMA address", 0, 0, 0xFFFFFFFF, \ 0, tegra_get_dma_addr, tegra_set_dma_addr), }; static const struct snd_kcontrol_new tegra_i2s_lpbk_control = SOC_ENUM_EXT("I2S LoopBack", tegra_enum, tegra_get_i2sloopback, tegra_set_i2sloopback); static int tegra_set_headset_plug_state(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { struct tegra_asoc_utils_data *data = snd_kcontrol_chip(kcontrol); int switch_state; data->headset_plug_state = ucontrol->value.integer.value[0]; switch_state = data->headset_plug_state == 1 ? BIT_HEADSET : BIT_NO_HEADSET; if (psdev) switch_set_state(psdev, switch_state); return 1; }
SOC_ENUM("DRC Decay", drc_dcy), SOC_SINGLE("DRC Quick Release Switch", WM9081_DRC_1, 2, 1, 0), SOC_SINGLE_TLV("DRC Quick Release Volume", WM9081_DRC_2, 6, 3, 0, drc_qr_tlv), SOC_ENUM("DRC Quick Release Decay", drc_qr_dcy), SOC_SINGLE_TLV("DRC Startup Volume", WM9081_DRC_1, 6, 18, 0, drc_startup_tlv), SOC_SINGLE("EQ Switch", WM9081_EQ_1, 0, 1, 0), SOC_SINGLE("Speaker DC Volume", WM9081_ANALOGUE_SPEAKER_1, 3, 5, 0), SOC_SINGLE("Speaker AC Volume", WM9081_ANALOGUE_SPEAKER_1, 0, 5, 0), SOC_SINGLE("Speaker Switch", WM9081_ANALOGUE_SPEAKER_PGA, 7, 1, 1), SOC_SINGLE("Speaker ZC Switch", WM9081_ANALOGUE_SPEAKER_PGA, 6, 1, 0), SOC_SINGLE_TLV("Speaker Volume", WM9081_ANALOGUE_SPEAKER_PGA, 0, 63, 0, out_tlv), SOC_ENUM("DAC Deemphasis", dac_deemph), SOC_ENUM_EXT("Speaker Mode", speaker_mode, speaker_mode_get, speaker_mode_put), }; static const struct snd_kcontrol_new wm9081_eq_controls[] = { SOC_SINGLE_TLV("EQ1 Volume", WM9081_EQ_1, 11, 24, 0, eq_tlv), SOC_SINGLE_TLV("EQ2 Volume", WM9081_EQ_1, 6, 24, 0, eq_tlv), SOC_SINGLE_TLV("EQ3 Volume", WM9081_EQ_1, 1, 24, 0, eq_tlv), SOC_SINGLE_TLV("EQ4 Volume", WM9081_EQ_2, 11, 24, 0, eq_tlv), SOC_SINGLE_TLV("EQ5 Volume", WM9081_EQ_2, 6, 24, 0, eq_tlv), }; static const struct snd_kcontrol_new mixer[] = { SOC_DAPM_SINGLE("IN1 Switch", WM9081_ANALOGUE_MIXER, 0, 1, 0), SOC_DAPM_SINGLE("IN2 Switch", WM9081_ANALOGUE_MIXER, 2, 1, 0), SOC_DAPM_SINGLE("Playback Switch", WM9081_ANALOGUE_MIXER, 4, 1, 0), };
{ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); struct max98090_priv *max98090 = snd_soc_codec_get_drvdata(codec); printk(" %s [%d] current record path %d\n",__FUNCTION__,__LINE__, max98090->rec_path); ucontrol->value.integer.value[0] = max98090->rec_path; return 0; } //----------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------- static const struct snd_kcontrol_new max98090_snd_controls[] = { /* Path Control */ SOC_ENUM_EXT("Playback Path", path_control_enum[0], max98090_get_playback_path, max98090_set_playback_path), SOC_ENUM_EXT("MIC Path", path_control_enum[1], max98090_get_record_path, max98090_set_record_path), }; static int max98090_add_widgets(struct snd_soc_codec *codec) { snd_soc_add_codec_controls(codec, max98090_snd_controls, ARRAY_SIZE(max98090_snd_controls)); return 0; } #if defined(CONFIG_MAX98090_HEADSET) //----------------------------------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------------------------------
{ printk("%s()\n", __func__); if (mt_soc_lowjitter_control == ucontrol->value.integer.value[0]) { } else { } mt_soc_lowjitter_control = ucontrol->value.integer.value[0]; return 0; } static const struct snd_kcontrol_new mt_soc_controls[] = { SOC_ENUM_EXT("I2S low Jitter fucntion", mt_soc_machine_enum[0], mt6595_get_lowjitter, mt6595_set_lowjitter), }; static struct snd_soc_card snd_soc_card_mt = { .name = "mt-snd-card", .dai_link = mt_soc_dai_common, .num_links = ARRAY_SIZE(mt_soc_dai_common), .controls = mt_soc_controls, .num_controls = ARRAY_SIZE(mt_soc_controls), }; static struct platform_device *mt_snd_device; static int __init mt_soc_snd_init(void) {
if (mode >= ARRAY_SIZE(ams_delta_audio_mode)) return -EINVAL; ucontrol->value.enumerated.item[0] = mode; return 0; } static const struct soc_enum ams_delta_audio_enum[] = { SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(ams_delta_audio_mode), ams_delta_audio_mode), }; static const struct snd_kcontrol_new ams_delta_audio_controls[] = { SOC_ENUM_EXT("Audio Mode", ams_delta_audio_enum[0], ams_delta_get_audio_mode, ams_delta_set_audio_mode), }; /* Hook switch */ static struct snd_soc_jack ams_delta_hook_switch; static struct snd_soc_jack_gpio ams_delta_hook_switch_gpios[] = { { .gpio = 4, .name = "hook_switch", .report = SND_JACK_HEADSET, .invert = 1, .debounce_time = 150, } }; /* After we are able to control the codec over the modem,
else plat->amp_enable(0); return 0; } /* imx_3stack card dapm widgets */ static const struct snd_soc_dapm_widget imx_3stack_dapm_widgets[] = { SND_SOC_DAPM_MIC("Mic Jack", NULL), SND_SOC_DAPM_LINE("Line In Jack", NULL), SND_SOC_DAPM_SPK("Ext Spk", spk_amp_event), SND_SOC_DAPM_HP("Headphone Jack", NULL), }; static const struct snd_kcontrol_new rt5621_machine_controls[] = { SOC_ENUM_EXT("Jack Function", rt5621_enum[0], rt5621_get_jack, rt5621_set_jack), SOC_ENUM_EXT("Speaker Function", rt5621_enum[1], rt5621_get_spk, rt5621_set_spk), SOC_ENUM_EXT("Line In Function", rt5621_enum[1], rt5621_get_line_in, rt5621_set_line_in), }; #if defined(CONFIG_MXC_ASRC) || defined(CONFIG_MXC_ASRC_MODULE) static int asrc_func; static const char *asrc_function[] = { "disable", "32KHz", "44.1KHz", "48KHz", "96KHz" }; static const struct soc_enum asrc_enum[] = { SOC_ENUM_SINGLE_EXT(5, asrc_function), };
struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { pr_info("%s %ld\n", __func__, ucontrol->value.integer.value[0]); if (ucontrol->value.integer.value[0] == 0) set_speaker_amp_control_enable(false); else set_speaker_amp_control_enable(true); return 0; } static const struct snd_kcontrol_new tfa98xx_snd_controls[] = { SOC_ENUM_EXT("TFA98XX_CHANNEL", speaker_channel_enum, tfa98xx_codec_get_speaker_channel_control, tfa98xx_codec_put_speaker_channel_control), SOC_ENUM_EXT("TFA98XX_BYPASS_DSP", speaker_bypass_dsp_enum, tfa98xx_codec_get_speaker_bypass_dsp_control, tfa98xx_codec_put_speaker_bypass_dsp_control), SOC_ENUM_EXT("TFA98XX_SYNCED", speaker_synced_enum, tfa98xx_codec_get_speaker_synced_control, tfa98xx_codec_put_speaker_synced_control), SOC_ENUM_EXT("TFA98XX_LR", speaker_lr_enum, tfa98xx_codec_get_speaker_lr_control,
0, 0x34, 0xE4, aout_tlv), SOC_DOUBLE_R_SX_TLV("ADC Mixer Volume", CS42L51_ADCA_VOL, CS42L51_ADCB_VOL, 0, 0x19, 0x7F, adc_pcm_tlv), SOC_DOUBLE_R("ADC Mixer Switch", CS42L51_ADCA_VOL, CS42L51_ADCB_VOL, 7, 1, 1), SOC_SINGLE("Playback Deemphasis Switch", CS42L51_DAC_CTL, 3, 1, 0), SOC_SINGLE("Auto-Mute Switch", CS42L51_DAC_CTL, 2, 1, 0), SOC_SINGLE("Soft Ramp Switch", CS42L51_DAC_CTL, 1, 1, 0), SOC_SINGLE("Zero Cross Switch", CS42L51_DAC_CTL, 0, 0, 0), SOC_DOUBLE_TLV("Mic Boost Volume", CS42L51_MIC_CTL, 0, 1, 1, 0, boost_tlv), SOC_SINGLE_TLV("Bass Volume", CS42L51_TONE_CTL, 0, 0xf, 1, tone_tlv), SOC_SINGLE_TLV("Treble Volume", CS42L51_TONE_CTL, 4, 0xf, 1, tone_tlv), SOC_ENUM_EXT("PCM channel mixer", cs42l51_chan_mix, cs42l51_get_chan_mix, cs42l51_set_chan_mix), }; /* * to power down, one must: * 1.) Enable the PDN bit * 2.) enable power-down for the select channels * 3.) disable the PDN bit. */ static int cs42l51_pdn_event(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol, int event) { switch (event) { case SND_SOC_DAPM_PRE_PMD: snd_soc_update_bits(w->codec, CS42L51_POWER_CTL1,
ret = snd_soc_dai_set_fmt(cpu_dai, SND_SOC_DAIFMT_CBS_CFS); if (ret < 0) pr_err("set fmt cpu dai failed\n"); return ret; } static const struct soc_enum msm_snd_enum[] = { SOC_ENUM_SINGLE_EXT(2, sec_mi2s_rx_ch_text), SOC_ENUM_SINGLE_EXT(2, pri_mi2s_tx_ch_text), SOC_ENUM_SINGLE_EXT(2, sec_mi2s_rx2_group_text), }; static const struct snd_kcontrol_new msm_snd_controls[] = { SOC_ENUM_EXT("Internal BTSCO SampleRate", msm_btsco_enum[0], msm_btsco_rate_get, msm_btsco_rate_put), SOC_ENUM_EXT("MI2S_RX Channels", msm_snd_enum[0], msm_sec_mi2s_rx_ch_get, msm_sec_mi2s_rx_ch_put), SOC_ENUM_EXT("MI2S_TX Channels", msm_snd_enum[1], msm_pri_mi2s_tx_ch_get, msm_pri_mi2s_tx_ch_put), SOC_ENUM_EXT("MI2S_RX_VIBRA Channels", msm_snd_enum[0], msm_sec_mi2s_rx2_ch_get, msm_sec_mi2s_rx2_ch_put), SOC_ENUM_EXT("Vibrator AMP Control", msm_vibrator_amp_control_enum[0], msm_vibrator_amp_control_get, msm_vibrator_amp_control_put), SOC_ENUM_EXT("MI2S_SD0_SD1 Group", msm_snd_enum[2], msm_sec_mi2s_rx2_group_get, msm_sec_mi2s_rx2_group_put), }; static int msm_audrx_init(struct snd_soc_pcm_runtime *rtd) {
SOC_DOUBLE_R("Speaker Switch", WM8985_LOUT2_SPK_VOLUME_CTRL, WM8985_ROUT2_SPK_VOLUME_CTRL, 6, 1, 1), SOC_SINGLE("High Pass Filter Switch", WM8985_ADC_CONTROL, 8, 1, 0), SOC_ENUM("High Pass Filter Mode", filter_mode), SOC_SINGLE("High Pass Filter Cutoff", WM8985_ADC_CONTROL, 4, 7, 0), SOC_DOUBLE_R_TLV("Aux Bypass Volume", WM8985_LEFT_MIXER_CTRL, WM8985_RIGHT_MIXER_CTRL, 6, 7, 0, aux_tlv), SOC_DOUBLE_R_TLV("Input PGA Bypass Volume", WM8985_LEFT_MIXER_CTRL, WM8985_RIGHT_MIXER_CTRL, 2, 7, 0, bypass_tlv), SOC_ENUM_EXT("Equalizer Function", eqmode, eqmode_get, eqmode_put), SOC_ENUM("EQ1 Cutoff", eq1_cutoff), SOC_SINGLE_TLV("EQ1 Volume", WM8985_EQ1_LOW_SHELF, 0, 24, 1, eq_tlv), SOC_ENUM("EQ2 Bandwidth", eq2_bw), SOC_ENUM("EQ2 Cutoff", eq2_cutoff), SOC_SINGLE_TLV("EQ2 Volume", WM8985_EQ2_PEAK_1, 0, 24, 1, eq_tlv), SOC_ENUM("EQ3 Bandwidth", eq3_bw), SOC_ENUM("EQ3 Cutoff", eq3_cutoff), SOC_SINGLE_TLV("EQ3 Volume", WM8985_EQ3_PEAK_2, 0, 24, 1, eq_tlv), SOC_ENUM("EQ4 Bandwidth", eq4_bw), SOC_ENUM("EQ4 Cutoff", eq4_cutoff), SOC_SINGLE_TLV("EQ4 Volume", WM8985_EQ4_PEAK_3, 0, 24, 1, eq_tlv), SOC_ENUM("EQ5 Cutoff", eq5_cutoff), SOC_SINGLE_TLV("EQ5 Volume", WM8985_EQ5_HIGH_SHELF, 0, 24, 1, eq_tlv), SOC_ENUM("3D Depth", depth_3d),
static const SOC_ENUM_SINGLE_DECL( rt3261_rxdp1_enum, RT3261_DUMMY_PR3F, 9, rt3261_rxdp1_src); static const struct snd_kcontrol_new rt3261_rxdp1_mux = SOC_DAPM_ENUM("RxDP1 sel", rt3261_rxdp1_enum); static const struct snd_kcontrol_new rt3261_dsp_snd_controls[] = { SOC_ENUM("RxDC input data", rt3261_rxdc_data_enum), SOC_ENUM("RxDP input data", rt3261_rxdp_data_enum), SOC_ENUM("TxDC input data", rt3261_txdc_data_enum), SOC_ENUM("TxDP input data", rt3261_txdp_data_enum), SOC_ENUM("SRC for RxDP", rt3261_src_rxdp_enum), SOC_ENUM("SRC for TxDP", rt3261_src_txdp_enum), /* AEC */ SOC_ENUM_EXT("DSP Function Switch", rt3261_dsp_enum, rt3261_dsp_get, rt3261_dsp_put), }; static int rt3261_dsp_patch_3(struct snd_soc_codec *codec) { struct rt3261_dsp_param param; int ret, i; param.cmd_fmt = 0x0090; param.addr = 0x0064; param.data = 0x0004; param.cmd = RT3261_DSP_CMD_RW; ret = rt3261_dsp_write(codec, ¶m); if (ret < 0) { dev_err(codec->dev, "Fail to set DSP 3 bytes patch entrance: %d\n", ret);
case 1: msm8960_auxpcm_rate = SAMPLE_RATE_16KHZ; break; default: msm8960_auxpcm_rate = SAMPLE_RATE_8KHZ; break; } pr_info("%s: msm8960_auxpcm_rate = %d" "ucontrol->value.integer.value[0] = %d\n", __func__, msm8960_auxpcm_rate, (int)ucontrol->value.integer.value[0]); return 0; } static const struct snd_kcontrol_new tabla_msm8960_controls[] = { SOC_ENUM_EXT("Speaker Function", msm8960_enum[0], msm8960_get_spk, msm8960_set_spk), SOC_ENUM_EXT("SLIM_0_RX Channels", msm8960_enum[1], msm8960_slim_0_rx_ch_get, msm8960_slim_0_rx_ch_put), SOC_ENUM_EXT("SLIM_0_TX Channels", msm8960_enum[2], msm8960_slim_0_tx_ch_get, msm8960_slim_0_tx_ch_put), SOC_SINGLE_EXT("SPK AMP SWITCH", SND_SOC_NOPM, 0, 1, 0, spk_get_ctl, spk_set_ctl), SOC_ENUM_EXT("Internal BTSCO SampleRate", msm8960_btsco_enum[0], msm8960_btsco_rate_get, msm8960_btsco_rate_put), SOC_ENUM_EXT("AUX PCM SampleRate", msm8960_auxpcm_enum[0], msm8960_auxpcm_rate_get, msm8960_auxpcm_rate_put), }; #if 0 //FIXME static const struct snd_kcontrol_new tabla_xbvol_controls[] = { SOC_SINGLE_TLV("LINEOUT1XB Volume", TABLA_A_RX_LINE_1_GAIN, 0, 12, 1,
case 0: mdm9615_btsco_rate = BTSCO_RATE_8KHZ; break; case 1: mdm9615_btsco_rate = BTSCO_RATE_16KHZ; break; default: mdm9615_btsco_rate = BTSCO_RATE_8KHZ; break; } pr_debug("%s: mdm9615_btsco_rate = %d\n", __func__, mdm9615_btsco_rate); return 0; } static const struct snd_kcontrol_new tabla_mdm9615_controls[] = { SOC_ENUM_EXT("Speaker Function", mdm9615_enum[0], mdm9615_get_spk, mdm9615_set_spk), SOC_ENUM_EXT("SLIM_0_RX Channels", mdm9615_enum[1], mdm9615_slim_0_rx_ch_get, mdm9615_slim_0_rx_ch_put), SOC_ENUM_EXT("SLIM_0_TX Channels", mdm9615_enum[2], mdm9615_slim_0_tx_ch_get, mdm9615_slim_0_tx_ch_put), }; static const struct snd_kcontrol_new int_btsco_rate_mixer_controls[] = { SOC_ENUM_EXT("Internal BTSCO SampleRate", mdm9615_btsco_enum[0], mdm9615_btsco_rate_get, mdm9615_btsco_rate_put), }; static int mdm9615_btsco_init(struct snd_soc_pcm_runtime *rtd) { int err = 0; struct snd_soc_platform *platform = rtd->platform;