static int mxs_evk_jack_func; static int mxs_evk_spk_func; static const char *jack_function[] = { "off", "on"}; static const char *spk_function[] = { "off", "on" }; #ifdef CONFIG_MACH_MX23_CANOPUS #include <mach/device.h> static int mxs_evk_handset_func; static const char *handset_function[] = { "off", "on" }; #endif static const struct soc_enum mxs_evk_enum[] = { SOC_ENUM_SINGLE_EXT(2, jack_function), SOC_ENUM_SINGLE_EXT(2, spk_function), #ifdef CONFIG_MACH_MX23_CANOPUS SOC_ENUM_SINGLE_EXT(2, handset_function), #endif }; static int mxs_evk_get_jack(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { ucontrol->value.enumerated.item[0] = mxs_evk_jack_func; return 0; } static int mxs_evk_set_jack(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
Afe_Set_Reg(AFE_HDMI_BASE , HDMI_dma_buf->addr , 0xffffffff); Afe_Set_Reg(AFE_HDMI_END , HDMI_dma_buf->addr + (HDMI_dma_buf->bytes - 1), 0xffffffff); #else printk("%s mt6572 not support!!!\n", __func__); #endif } #endif static int mHdmi_sidegen_control = 0; static const char *HDMI_SIDEGEN[] = {"Off", "On"}; static const struct soc_enum Audio_Hdmi_Enum[] = { SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(HDMI_SIDEGEN), HDMI_SIDEGEN), }; static int Audio_hdmi_SideGen_Get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { printk("Audio_hdmi_SideGen_Get = %d\n", mHdmi_sidegen_control); ucontrol->value.integer.value[0] = mHdmi_sidegen_control; return 0; } static int Audio_hdmi_SideGen_Set(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { printk("%s()\n", __func__); if (ucontrol->value.enumerated.item[0] > ARRAY_SIZE(HDMI_SIDEGEN)) {
}; static const struct snd_soc_dapm_route fluid_audio_map[] = { {"AMIC3", NULL, "MIC BIAS3 Internal1"}, {"MIC BIAS3 Internal1", NULL, "ANCRight Headset Mic"}, {"AMIC4", NULL, "MIC BIAS1 Internal2"}, {"MIC BIAS1 Internal2", NULL, "ANCLeft Headset Mic"}, }; static const char *spk_function[] = {"Off", "On"}; static const char *slim0_rx_ch_text[] = {"One", "Two"}; static const char *slim0_tx_ch_text[] = {"One", "Two", "Three", "Four"}; static const struct soc_enum msm8960_enum[] = { SOC_ENUM_SINGLE_EXT(2, spk_function), SOC_ENUM_SINGLE_EXT(2, slim0_rx_ch_text), SOC_ENUM_SINGLE_EXT(4, slim0_tx_ch_text), }; static int msm8960_slim_0_rx_ch_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { pr_debug("%s: msm8960_slim_0_rx_ch = %d\n", __func__, msm8960_slim_0_rx_ch); ucontrol->value.integer.value[0] = msm8960_slim_0_rx_ch - 1; return 0; } static int msm8960_slim_0_rx_ch_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
static int msm_voice2_rx_device_mute_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { int mute = ucontrol->value.integer.value[0]; pr_debug("%s: mute=%d\n", __func__, mute); voc_set_rx_device_mute(voc_get_session_id(VOICE2_SESSION_NAME), mute); return 0; } static const char const *tty_mode[] = {"OFF", "HCO", "VCO", "FULL"}; static const struct soc_enum msm_tty_mode_enum[] = { SOC_ENUM_SINGLE_EXT(4, tty_mode), }; static int msm_voice_tty_mode_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { ucontrol->value.integer.value[0] = voc_get_tty_mode(voc_get_session_id(VOICE_SESSION_NAME)); return 0; } static int msm_voice_tty_mode_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { int tty_mode = ucontrol->value.integer.value[0];
}; #endif static const char *spk_function[] = {"Off", "On"}; static const char *slim0_rx_ch_text[] = {"One", "Two"}; static const char *slim0_tx_ch_text[] = {"One", "Two", "Three", "Four"}; #ifdef CONFIG_PANTECH_SND static const char *headset_status_function[] = {"Get"}; static const char *tabla_version_function[] = {"Get"}; #endif #if defined(T_EF47S) || defined(T_EF45K) || defined(T_EF46L) static const char *autoans_flag_function[] = {"Off", "On"}; #endif static const struct soc_enum msm8960_enum[] = { SOC_ENUM_SINGLE_EXT(2, spk_function), SOC_ENUM_SINGLE_EXT(2, slim0_rx_ch_text), SOC_ENUM_SINGLE_EXT(4, slim0_tx_ch_text), #ifdef CONFIG_PANTECH_SND SOC_ENUM_SINGLE_EXT(1, headset_status_function), SOC_ENUM_SINGLE_EXT(1, tabla_version_function), #endif #if defined(T_EF47S) || defined(T_EF45K) || defined(T_EF46L) SOC_ENUM_SINGLE_EXT(2, autoans_flag_function), #endif }; static const char *btsco_rate_text[] = {"8000", "16000"}; static const struct soc_enum msm8960_btsco_enum[] = { SOC_ENUM_SINGLE_EXT(2, btsco_rate_text), };
static const struct snd_soc_dapm_route audio_map[] = { {"Headphone Jack", NULL, "HPLOUT"}, {"Headphone Jack", NULL, "HPROUT"}, {"Ext Spk", NULL, "LLOUT"}, {"Ext Spk", NULL, "RLOUT"}, {"DMic Rate 64", NULL, "Mic Bias 2V"}, {"Mic Bias 2V", NULL, "DMic"}, }; static const char *spk_function[] = {"Off", "On"}; static const char *jack_function[] = {"Off", "Headphone"}; static const char *input_function[] = {"ADC", "Digital Mic"}; static const struct soc_enum n810_enum[] = { SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(spk_function), spk_function), SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(jack_function), jack_function), SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(input_function), input_function), }; static const struct snd_kcontrol_new aic33_n810_controls[] = { SOC_ENUM_EXT("Speaker Function", n810_enum[0], n810_get_spk, n810_set_spk), SOC_ENUM_EXT("Jack Function", n810_enum[1], n810_get_jack, n810_set_jack), SOC_ENUM_EXT("Input Select", n810_enum[2], n810_get_input, n810_set_input), }; static int n810_aic33_init(struct snd_soc_codec *codec) {
static int sdp4430_set_power_mode(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { if (twl6040_power_mode == ucontrol->value.integer.value[0]) 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"),
} codec->dapm.bias_level = level; return 0; } static const char *lm4857_mode[] = { "Earpiece", "Loudspeaker", "Loudspeaker + Headphone", "Headphone", }; static const struct soc_enum lm4857_mode_enum = SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(lm4857_mode), lm4857_mode); static const struct snd_soc_dapm_widget lm4857_dapm_widgets[] = { SND_SOC_DAPM_INPUT("IN"), SND_SOC_DAPM_OUTPUT("LS"), SND_SOC_DAPM_OUTPUT("HP"), SND_SOC_DAPM_OUTPUT("EP"), }; static const DECLARE_TLV_DB_SCALE(stereo_tlv, -4050, 150, 0); static const DECLARE_TLV_DB_SCALE(mono_tlv, -3450, 150, 0); static const struct snd_kcontrol_new lm4857_controls[] = { SOC_SINGLE_TLV("Left Playback Volume", LM4857_LVOL, 0, 31, 0, stereo_tlv),
const char *hp_analogue_text[] = { "VoiceCall Mode", "Playback Mode" }; static int aif2_mode; const char *aif2_mode_text[] = { "Slave", "Master" }; static int pm_mode; const char *pm_mode_text[] = { "Off", "On" }; static const struct soc_enum hp_mode_enum[] = { SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(hp_analogue_text), hp_analogue_text), }; static int get_hp_output_mode(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { ucontrol->value.integer.value[0] = hp_output_mode; return 0; } static int set_hp_output_mode(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { if (hp_output_mode == ucontrol->value.integer.value[0]) return 0;
struct mt2701_cs42448_private { int i2s1_in_mux; int i2s1_in_mux_gpio_sel_1; int i2s1_in_mux_gpio_sel_2; }; static const char * const i2sin_mux_switch_text[] = { "ADC_SDOUT2", "ADC_SDOUT3", "I2S_IN_1", "I2S_IN_2", }; static const struct soc_enum i2sin_mux_enum = SOC_ENUM_SINGLE_EXT(4, i2sin_mux_switch_text); static int mt2701_cs42448_i2sin1_mux_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { struct snd_soc_card *card = snd_kcontrol_chip(kcontrol); struct mt2701_cs42448_private *priv = snd_soc_card_get_drvdata(card); ucontrol->value.integer.value[0] = priv->i2s1_in_mux; return 0; } static int mt2701_cs42448_i2sin1_mux_set(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { struct snd_soc_card *card = snd_kcontrol_chip(kcontrol);
#include <sound/dmaengine_pcm.h> #include "tegra_pcm.h" #include "tegra_asoc_utils.h" int g_is_call_mode; static atomic_t dap_ref_count[5]; int tegra_i2sloopback_func; static const char * const loopback_function[] = { "Off", "On" }; static const struct soc_enum tegra_enum = SOC_ENUM_SINGLE_EXT(2, loopback_function); #ifdef CONFIG_SWITCH static bool is_switch_registered; struct switch_dev *psdev; /* These values are copied from WiredAccessoryObserver */ enum headset_state { BIT_NO_HEADSET = 0, BIT_HEADSET = (1 << 0), BIT_HEADSET_NO_MIC = (1 << 1), }; #endif #define TRISTATE_DAP_PORT(n) \ static void tristate_dap_##n(bool tristate) \ { \ enum tegra_pingroup fs, sclk, din, dout; \
*/ void StartAudioPcmHardware(void); void StopAudioPcmHardware(void); static int mtk_fmtx_probe(struct platform_device *pdev); static int mtk_pcm_fmtx_close(struct snd_pcm_substream *substream); static int mtk_asoc_pcm_fmtx_new(struct snd_soc_pcm_runtime *rtd); static int mtk_afe_fmtx_probe(struct snd_soc_platform *platform); static int fmtx_hdoutput_control = true; static const char *fmtx_HD_output[] = {"Off", "On"}; static const struct soc_enum Audio_fmtx_Enum[] = { SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(fmtx_HD_output), fmtx_HD_output), }; static int Audio_fmtx_hdoutput_Get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { printk("Audio_AmpR_Get = %d\n", fmtx_hdoutput_control); ucontrol->value.integer.value[0] = fmtx_hdoutput_control; return 0; } static int Audio_fmtx_hdoutput_Set(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { printk("%s()\n", __func__); if (ucontrol->value.enumerated.item[0] > ARRAY_SIZE(fmtx_HD_output))
#define MSM_SLIM_0_TX_MAX_CHANNELS 4 #define BTSCO_RATE_8KHZ 8000 #define BTSCO_RATE_16KHZ 16000 #define WCD9XXX_MBHC_DEF_BUTTONS 8 #define WCD9XXX_MBHC_DEF_RLOADS 5 #define TAPAN_EXT_CLK_RATE 9600000 #define NUM_OF_AUXPCM_GPIOS 4 static int msm8226_auxpcm_rate = 8000; static atomic_t auxpcm_rsc_ref; static const char *const auxpcm_rate_text[] = {"rate_8000", "rate_16000"}; static const struct soc_enum msm8226_auxpcm_enum[] = { SOC_ENUM_SINGLE_EXT(2, auxpcm_rate_text), }; #define LPAIF_OFFSET 0xFE000000 #define LPAIF_PRI_MODE_MUXSEL (LPAIF_OFFSET + 0x2B000) #define LPAIF_SEC_MODE_MUXSEL (LPAIF_OFFSET + 0x2C000) #define LPAIF_TER_MODE_MUXSEL (LPAIF_OFFSET + 0x2D000) #define LPAIF_QUAD_MODE_MUXSEL (LPAIF_OFFSET + 0x2E000) #define I2S_PCM_SEL 1 #define I2S_PCM_SEL_OFFSET 1 void *def_tapan_mbhc_cal(void); static int msm_snd_enable_codec_ext_clk(struct snd_soc_codec *codec, int enable, bool dapm);
/* Connect the ALC pins */ {"ACIN", NULL, "ACOP"}, {NULL, NULL, NULL}, }; static const char *smdk_scenarios[] = { "Off", "Capture Line In", "Headphones", "Capture Mic1", }; static const struct soc_enum smdk_scenario_enum[] = { SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(smdk_scenarios),smdk_scenarios), }; static const struct snd_kcontrol_new wm8580_smdk_controls[] = { SOC_ENUM_EXT("SMDK Mode", smdk_scenario_enum[0], smdk_get_scenario, smdk_set_scenario), }; /* * This is an example machine initialisation for a wm8580 connected to a * smdk2450. It is missing logic to detect hp/mic insertions and logic * to re-route the audio in such an event. */ static int smdk_wm8580_init(struct snd_soc_codec *codec) { int i, err;
(ams_delta_audio_agc << AMS_DELTA_AGC)); for (mode = 0; mode < ARRAY_SIZE(ams_delta_audio_mode); mode++) if (pins == ams_delta_audio_mode_pins[mode]) break; 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,
/* MI2S format field for AFE_PORT_CMD_I2S_CONFIG command * 0: linear PCM * 1: non-linear PCM * 2: PCM data in IEC 60968 container * 3: compressed data in IEC 60958 container */ static const char *mi2s_format[] = { "LPCM", "Compr", "60958-LPCM", "60958-Compr"}; static const struct soc_enum mi2s_config_enum[] = { SOC_ENUM_SINGLE_EXT(4, mi2s_format), }; static const struct snd_kcontrol_new mi2s_config_controls[] = { SOC_ENUM_EXT("MI2S RX Format", mi2s_config_enum[0], msm_dai_q6_mi2s_format_get, msm_dai_q6_mi2s_format_put), SOC_ENUM_EXT("SEC RX Format", mi2s_config_enum[0], msm_dai_q6_mi2s_format_get, msm_dai_q6_mi2s_format_put), SOC_ENUM_EXT("MI2S TX Format", mi2s_config_enum[0], msm_dai_q6_mi2s_format_get, msm_dai_q6_mi2s_format_put), }; static u8 num_of_bits_set(u8 sd_line_mask)
/* speaker connected to LOUT, ROUT */ {"Ext Spk", NULL, "LINEOUTR"}, {"Ext Spk", NULL, "LINEOUTL"}, /* mic is connected to MICIN (via right channel of headphone jack) */ {"IN1L", NULL, "Mic Jack"}, /* Same as the above but no mic bias for line signals */ {"IN2L", NULL, "Line Jack"}, }; static const char *jack_function[] = {"Headphone", "Mic", "Line", "Headset", "Off" }; static const char *spk_function[] = {"On", "Off"}; static const struct soc_enum tegra_enum[] = { SOC_ENUM_SINGLE_EXT(5, jack_function), SOC_ENUM_SINGLE_EXT(2, spk_function), }; static const struct snd_kcontrol_new tegra_controls[] = { SOC_ENUM_EXT("Jack Function", tegra_enum[0], tegra_get_jack, tegra_set_jack), SOC_ENUM_EXT("Speaker Function", tegra_enum[1], tegra_get_spk, tegra_set_spk), }; static void tegra_audio_route(int device_new, int is_call_mode_new) { int play_device_new = device_new & TEGRA_AUDIO_DEVICE_OUT_ALL; int capture_device_new = device_new & TEGRA_AUDIO_DEVICE_IN_ALL; int is_bt_sco_mode =
MAX98506_ALC_TH_MASK, MAX98506_ALC_TH_SHIFT); } static const char * const max98506_boost_voltage_text[] = {"8.5V", "8.25V", "8.0V", "7.75V", "7.5V", "7.25V", "7.0V", "6.75V", "6.5V", "6.5V", "6.5V", "6.5V", "6.5V", "6.5V", "6.5V", "6.5V"}; static const struct soc_enum max98506_boost_voltage_enum = SOC_ENUM_SINGLE(MAX98506_R037_CONFIGURATION, MAX98506_BST_VOUT_SHIFT, 16, max98506_boost_voltage_text); static const char * const spk_state_text[] = {"Disable", "Enable"}; static const struct soc_enum spk_state_enum[] = { SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(spk_state_text), spk_state_text), }; static void max98506_spk_enable(struct max98506_priv *max98506, int enable) { struct max98506_pdata *pdata = max98506->pdata; if (enable) { regmap_update_bits(max98506->regmap, MAX98506_R02D_GAIN, MAX98506_SPK_GAIN_MASK, pdata->spk_gain); regmap_update_bits(max98506->regmap, MAX98506_R036_BLOCK_ENABLE,
{"AMIC3", NULL, "MIC BIAS1 External"}, {"MIC BIAS1 External", NULL, "ANCRight Headset Mic"}, {"HEADPHONE", NULL, "LDO_H"}, }; static const char *spk_function[] = {"Off", "On"}; static const char *slim0_rx_ch_text[] = {"One", "Two"}; static const char *slim0_tx_ch_text[] = {"One", "Two", "Three", "Four"}; static char const *hdmi_rx_ch_text[] = {"Two", "Three", "Four", "Five", "Six", "Seven", "Eight"}; static const char * const hdmi_rate[] = {"Default", "Variable"}; static const struct soc_enum msm8930_enum[] = { SOC_ENUM_SINGLE_EXT(2, spk_function), SOC_ENUM_SINGLE_EXT(2, slim0_rx_ch_text), SOC_ENUM_SINGLE_EXT(4, slim0_tx_ch_text), SOC_ENUM_SINGLE_EXT(2, hdmi_rate), SOC_ENUM_SINGLE_EXT(7, hdmi_rx_ch_text), }; static const char *btsco_rate_text[] = {"8000", "16000"}; static const struct soc_enum msm8930_btsco_enum[] = { SOC_ENUM_SINGLE_EXT(2, btsco_rate_text), }; static int msm8930_slim_0_rx_ch_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { pr_debug("%s: msm8930_slim_0_rx_ch = %d\n", __func__,
SND_SOC_DAPM_STREAM_STOP); } if (ret != 0) { printk(KERN_ERR "failed to set capture state\n"); return 0; } zoom2_capture_state = ucontrol->value.integer.value[0]; return 1; } static const char *path_control[] = {"Off", "On"}; static const struct soc_enum zoom2_enum[] = { SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(path_control), path_control), }; static const struct snd_kcontrol_new zoom2_controls[] = { SOC_ENUM_EXT("HIFI Playback Control", zoom2_enum[0], zoom2_get_hifi_playback_state, zoom2_set_hifi_playback_state), SOC_ENUM_EXT("Voice Control", zoom2_enum[0], zoom2_get_voice_state, zoom2_set_voice_state), SOC_ENUM_EXT("Capture Control", zoom2_enum[0], zoom2_get_capture_state, zoom2_set_capture_state), SOC_ENUM_EXT("Audio Sample Rate", twl4030_audio_sample_rates_enum, snd_soc_get_value_enum_double, snd_soc_put_value_enum_double), SOC_ENUM_EXT("Voice Sample Rate", twl4030_voice_sample_rates_enum, snd_soc_get_value_enum_double, snd_soc_put_value_enum_double), SOC_SINGLE("256FS CLK Control Switch", TWL4030_REG_AUDIO_IF, 1, 1, 0), };
static int lhpf2_coeff; static unsigned int lhpf_filter_values[] = { 0xF03A, 0xF04B, 0xF099, 0x0000, 0x0000 }; const char *lhpf_filter_text[] = { "64Hz", "130Hz", "267Hz", "user defined1", "user defined2" }; const char *aif2_mode_text[] = { "Slave", "Master" }; static const struct soc_enum lhpf_filter_mode_enum[] = { SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(lhpf_filter_text), lhpf_filter_text), }; static const struct soc_enum aif2_mode_enum[] = { SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(aif2_mode_text), aif2_mode_text), }; static struct { int min; /* Minimum impedance */ int max; /* Maximum impedance */ unsigned int gain; /* Register value to set for this measurement */ } hp_gain_table[] = { { 0, 42, 0x6c | ARIZONA_OUT_VU }, { 43, 100, 0x70 | ARIZONA_OUT_VU }, { 101, 200, 0x74 | ARIZONA_OUT_VU }, { 201, 450, 0x78 | ARIZONA_OUT_VU },
* function implementation */ static int mtk_i2s0_probe(struct platform_device *pdev); static int mtk_pcm_i2s0_close(struct snd_pcm_substream *substream); static int mtk_asoc_pcm_i2s0_new(struct snd_soc_pcm_runtime *rtd); static int mtk_afe_i2s0_probe(struct snd_soc_platform *platform); static int mi2s0_sidegen_control = 0; static int mi2s0_hdoutput_control = 0; static const char *i2s0_SIDEGEN[] = {"Off", "On48000", "On44100", "On32000", "On16000", "On8000", "On16000EchoRef"}; static const char *i2s0_HD_output[] = {"Off", "On"}; static const struct soc_enum Audio_i2s0_Enum[] = { SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(i2s0_SIDEGEN), i2s0_SIDEGEN), SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(i2s0_HD_output), i2s0_HD_output), }; static int Audio_i2s0_SideGen_Get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { printk("Audio_AmpR_Get = %d\n", mi2s0_sidegen_control); ucontrol->value.integer.value[0] = mi2s0_sidegen_control; return 0; } static int Audio_i2s0_SideGen_Set(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { uint32 u32AudioI2S = 0, MclkDiv0, MclkDiv3, REG448 = 0, REG44C = 0; uint32 samplerate = 0;
{ struct msm_dai_q6_hdmi_dai_data *dai_data = kcontrol->private_data; ucontrol->value.integer.value[0] = dai_data->port_config.hdmi_multi_ch.data_type; return 0; } static const char *hdmi_format[] = { "LPCM", "Compr" }; static const struct soc_enum hdmi_config_enum[] = { SOC_ENUM_SINGLE_EXT(2, hdmi_format), }; static const struct snd_kcontrol_new hdmi_config_controls[] = { SOC_ENUM_EXT("HDMI RX Format", hdmi_config_enum[0], msm_dai_q6_hdmi_format_get, msm_dai_q6_hdmi_format_put), }; static int msm_dai_q6_hdmi_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct snd_soc_dai *dai) { struct msm_dai_q6_hdmi_dai_data *dai_data = dev_get_drvdata(dai->dev); u32 channel_allocation = 0; u32 level_shift = 0;
#endif #ifdef CONFIG_SND_USE_LINEOUT_SWITCH err = gpio_request(GPIO_LINEOUT_EN, "LINEOUT_EN"); if (err) { pr_err(KERN_ERR "LINEOUT_EN GPIO set error!\n"); return; } gpio_direction_output(GPIO_LINEOUT_EN, 1); gpio_set_value(GPIO_LINEOUT_EN, 0); gpio_free(GPIO_LINEOUT_EN); #endif } static const struct soc_enum lineout_mode_enum[] = { SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(lineout_mode_text), lineout_mode_text), }; static int get_lineout_mode(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { ucontrol->value.integer.value[0] = lineout_mode; return 0; } static int set_lineout_mode(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); lineout_mode = ucontrol->value.integer.value[0];
struct snd_ctl_elem_value *ucontrol) { return 0; } static int wm8960_set_mic_path(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { int path_num = ucontrol->value.integer.value[0]; return 0; } // by pjlee : sound path static const struct soc_enum path_control_enum[] = { SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(playback_path), playback_path), SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(voicecall_path), voicecall_path), SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(mic_path), mic_path), }; static const struct snd_kcontrol_new wm8960_snd_controls[] = { SOC_DOUBLE_R_TLV("Capture Volume", WM8960_LINVOL, WM8960_RINVOL, 0, 63, 0, adc_tlv), SOC_DOUBLE_R("Capture Volume ZC Switch", WM8960_LINVOL, WM8960_RINVOL, 6, 1, 0), SOC_DOUBLE_R("Capture Switch", WM8960_LINVOL, WM8960_RINVOL, 7, 1, 0), SOC_DOUBLE_R_TLV("Playback Volume", WM8960_LDAC, WM8960_RDAC, 0, 255, 0, dac_tlv),
static int Audio_Hpr_Offset_Set(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { #ifndef EFUSE_HP_TRIM printk("%s()\n", __func__); mHprOffset = ucontrol->value.integer.value[0]; SetHprTrimOffset(mHprOffset); #else mHprOffset = ucontrol->value.integer.value[0]; #endif return 0; } static const struct soc_enum Audio_Routing_Enum[] = { SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(DAC_DL_SIDEGEN), DAC_DL_SIDEGEN), SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(DAC_DL_SIDEGEN_SAMEPLRATE), DAC_DL_SIDEGEN_SAMEPLRATE), SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(DAC_DL_SIDEGEN_AMPLITUE), DAC_DL_SIDEGEN_AMPLITUE), SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(ENABLESIDETONE), ENABLESIDETONE), SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(ANDROID_AUDIO_MODE), ANDROID_AUDIO_MODE), SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(InterModemPcm_ASRC_Switch), InterModemPcm_ASRC_Switch), SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(Audio_Debug_Setting), Audio_Debug_Setting), SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(Audio_IPOH_State), Audio_IPOH_State), SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(Audio_I2S1_Setting), Audio_I2S1_Setting), }; static const struct snd_kcontrol_new Audio_snd_routing_controls[] = { SOC_ENUM_EXT("Audio_SideGen_Switch", Audio_Routing_Enum[0], Audio_SideGen_Get, Audio_SideGen_Set), SOC_ENUM_EXT("Audio_SideGen_SampleRate", Audio_Routing_Enum[1], Audio_SideGen_SampleRate_Get, Audio_SideGen_SampleRate_Set), SOC_ENUM_EXT("Audio_SideGen_Amplitude", Audio_Routing_Enum[2], Audio_SideGen_Amplitude_Get, Audio_SideGen_Amplitude_Set),
static int cns3xxx_pcm1dac_mic_event(struct snd_soc_dapm_widget *w, struct snd_kcontrol *k, int event) { #ifdef __DEBUG_PATH printk("%s=>%d\n", __FUNCTION__, __LINE__); #endif return 0; } static const char *jack_function[] = {"Off", "Mic", "Headphone"}; //static const char *spk_function[] = {"On", "Off"}; static const struct soc_enum cns3xxx_pcm1dac_enum[] = { SOC_ENUM_SINGLE_EXT(2, jack_function), //SOC_ENUM_SINGLE_EXT(2, spk_function), }; /* corgi machine dapm widgets */ static const struct snd_soc_dapm_widget wm9081_dapm_widgets[] = { SND_SOC_DAPM_HP("Headphone Jack", NULL), SND_SOC_DAPM_MIC("Mic Jack", cns3xxx_pcm1dac_mic_event), //SND_SOC_DAPM_SPK("Ext Spk", cns3xxx_pcm1dac_amp_event), //SND_SOC_DAPM_LINE("Line Jack", NULL), //SND_SOC_DAPM_HP("Headset Jack", NULL), }; static const struct snd_kcontrol_new wm9081_cns3xxx_pcm1dac_controls[] = { SOC_ENUM_EXT("Jack Function", cns3xxx_pcm1dac_enum[0], cns3xxx_pcm1dac_get_jack,
{"AMIC2", NULL, "MIC BIAS2 External"}, {"MIC BIAS2 External", NULL, "Headset Mic"}, {"AMIC3", NULL, "MIC BIAS3 External"}, {"MIC BIAS3 External", NULL, "Back Mic"}, {"HEADPHONE", NULL, "LDO_H"}, }; static const char *spk_function[] = {"Off", "On"}; static const char *slim0_rx_ch_text[] = {"One", "Two"}; static const char *slim0_tx_ch_text[] = {"One", "Two", "Three", "Four"}; static const struct soc_enum msm_enum[] = { SOC_ENUM_SINGLE_EXT(2, spk_function), SOC_ENUM_SINGLE_EXT(2, slim0_rx_ch_text), SOC_ENUM_SINGLE_EXT(4, slim0_tx_ch_text), }; static const char *stereo_mic_voice[] = {"Off", "On"}; static const struct soc_enum jet_msm_enum[] = { SOC_ENUM_SINGLE_EXT(2, stereo_mic_voice), }; static const char *btsco_rate_text[] = {"8000", "16000"}; static const struct soc_enum msm_btsco_enum[] = { SOC_ENUM_SINGLE_EXT(2, btsco_rate_text), }; static const char *auxpcm_rate_text[] = {"rate_8000", "rate_16000"};
{ mmrgrx_Volume = ucontrol->value.integer.value[0]; printk("%s mmrgrx_Volume = 0x%x \n", __func__, mmrgrx_Volume); if (GetMemoryPathEnable(Soc_Aud_Digital_Block_MRG_I2S_OUT) == true) { SetHwDigitalGain(mmrgrx_Volume, Soc_Aud_Hw_Digital_Gain_HW_DIGITAL_GAIN1); } return 0; } static const char *wcn_stub_audio_ctr[] = {"CMB_STUB_AIF_0", "CMB_STUB_AIF_1", "CMB_STUB_AIF_2", "CMB_STUB_AIF_3"}; static const struct soc_enum wcn_stub_audio_ctr_Enum[] = { // speaker class setting SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(wcn_stub_audio_ctr), wcn_stub_audio_ctr), }; static int mAudio_Wcn_Cmb = CMB_STUB_AIF_3; static int Audio_Wcn_Cmb_Get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { printk("Audio_Wcn_Cmb_Get = %d\n", mAudio_Wcn_Cmb); ucontrol->value.integer.value[0] = mAudio_Wcn_Cmb; return 0; } static int Audio_Wcn_Cmb_Set(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { mAudio_Wcn_Cmb = ucontrol->value.integer.value[0]; printk("%s mAudio_Wcn_Cmb = 0x%x \n", __func__, mAudio_Wcn_Cmb);
return 0; u1_aud_mode = ucontrol->value.integer.value[0]; u1_aud_ext_control(codec); 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 */