static int msm_qti_pp_put_channel_map_mixer(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { char channel_map[PCM_FORMAT_MAX_NUM_CHANNEL]; int i; for (i = 0; i < PCM_FORMAT_MAX_NUM_CHANNEL; i++) channel_map[i] = (char)(ucontrol->value.integer.value[i]); adm_set_multi_ch_map(channel_map); return 0; } static const struct snd_kcontrol_new int_fm_vol_mixer_controls[] = { SOC_SINGLE_EXT_TLV("Internal FM RX Volume", SND_SOC_NOPM, 0, INT_RX_VOL_GAIN, 0, msm_qti_pp_get_fm_vol_mixer, msm_qti_pp_set_fm_vol_mixer, fm_rx_vol_gain), SOC_SINGLE_EXT_TLV("Quat MI2S FM RX Volume", SND_SOC_NOPM, 0, INT_RX_VOL_GAIN, 0, msm_qti_pp_get_quat_mi2s_fm_vol_mixer, msm_qti_pp_set_quat_mi2s_fm_vol_mixer, fm_rx_vol_gain), }; static const struct snd_kcontrol_new pri_mi2s_lb_vol_mixer_controls[] = { SOC_SINGLE_EXT_TLV("PRI MI2S LOOPBACK Volume", SND_SOC_NOPM, 0, INT_RX_VOL_GAIN, 0, msm_qti_pp_get_pri_mi2s_lb_vol_mixer, msm_qti_pp_set_pri_mi2s_lb_vol_mixer, afe_lb_vol_gain), }; static const struct snd_kcontrol_new int_hfp_vol_mixer_controls[] = { SOC_SINGLE_EXT_TLV("Internal HFP RX Volume", SND_SOC_NOPM, 0, INT_RX_VOL_GAIN, 0, msm_qti_pp_get_hfp_vol_mixer,
regmap_update_bits(max98506->regmap, MAX98506_R037_CONFIGURATION, MAX98506_BST_VOUT_MASK, mask); /* Set volume step to ... */ vstep->vol_step = sel; return 0; } static const struct snd_kcontrol_new max98506_snd_controls[] = { SOC_SINGLE_EXT_TLV("Speaker Gain", MAX98506_R02D_GAIN, MAX98506_SPK_GAIN_SHIFT, (1 << MAX98506_SPK_GAIN_WIDTH) - 1, 0, max98506_spk_gain_get, max98506_spk_gain_put, max98506_spk_tlv), SOC_SINGLE_EXT("Speaker Ramp", 0, 0, 1, 0, max98506_spk_ramp_get, max98506_spk_ramp_put), SOC_SINGLE_EXT("Speaker ZCD", 0, 0, 1, 0, max98506_spk_zcd_get, max98506_spk_zcd_put), SOC_SINGLE_EXT("ALC Enable", 0, 0, 1, 0, max98506_alc_en_get, max98506_alc_en_put), SOC_SINGLE_EXT("ALC Threshold", 0, 0, (1<<MAX98506_ALC_TH_WIDTH)-1, 0, max98506_alc_threshold_get, max98506_alc_threshold_put),
return max98925_reg_put(kcontrol, ucontrol, MAX98925_R030_THRESHOLD, MAX98925_ALC_TH_MASK, MAX98925_ALC_TH_SHIFT); } static const char * const max98925_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 max98925_boost_voltage_enum = SOC_ENUM_SINGLE(MAX98925_R037_CONFIGURATION, MAX98925_BST_VOUT_SHIFT, 15, max98925_boost_voltage_text); static const struct snd_kcontrol_new max98925_snd_controls[] = { SOC_SINGLE_EXT_TLV("Speaker Volume", MAX98925_R02D_GAIN, MAX98925_SPK_GAIN_SHIFT, (1<<MAX98925_SPK_GAIN_WIDTH)-1, 0, max98925_spk_vol_get, max98925_spk_vol_put, max98925_spk_tlv), SOC_SINGLE_EXT("Speaker Ramp", 0, 0, 1, 0, max98925_spk_ramp_get, max98925_spk_ramp_put), SOC_SINGLE_EXT("Speaker ZCD", 0, 0, 1, 0, max98925_spk_zcd_get, max98925_spk_zcd_put), SOC_SINGLE_EXT("ALC Enable", 0, 0, 1, 0, max98925_alc_en_get, max98925_alc_en_put), SOC_SINGLE_EXT("ALC Threshold", 0, 0, (1<<MAX98925_ALC_TH_WIDTH)-1, 0, max98925_alc_threshold_get, max98925_alc_threshold_put), SOC_ENUM("Boost Output Voltage", max98925_boost_voltage_enum),
snd_soc_component_update_bits(component, TAS5722_DIGITAL_CTRL2_REG, TAS5722_VOL_CONTROL_LSB, sel); return 0; } static const struct snd_kcontrol_new tas5720_snd_controls[] = { SOC_SINGLE_TLV("Speaker Driver Playback Volume", TAS5720_VOLUME_CTRL_REG, 0, 0xff, 0, tas5720_dac_tlv), SOC_SINGLE_TLV("Speaker Driver Analog Gain", TAS5720_ANALOG_CTRL_REG, TAS5720_ANALOG_GAIN_SHIFT, 3, 0, dac_analog_tlv), }; static const struct snd_kcontrol_new tas5722_snd_controls[] = { SOC_SINGLE_EXT_TLV("Speaker Driver Playback Volume", 0, 0, 511, 0, tas5722_volume_get, tas5722_volume_set, tas5722_dac_tlv), SOC_SINGLE_TLV("Speaker Driver Analog Gain", TAS5720_ANALOG_CTRL_REG, TAS5720_ANALOG_GAIN_SHIFT, 3, 0, dac_analog_tlv), }; static const struct snd_soc_dapm_widget tas5720_dapm_widgets[] = { SND_SOC_DAPM_AIF_IN("DAC IN", "Playback", 0, SND_SOC_NOPM, 0, 0), SND_SOC_DAPM_DAC_E("DAC", NULL, SND_SOC_NOPM, 0, 0, tas5720_dac_event, SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD), SND_SOC_DAPM_OUTPUT("OUT") }; static const struct snd_soc_dapm_route tas5720_audio_map[] = { { "DAC", NULL, "DAC IN" }, { "OUT", NULL, "DAC" },
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"}, {"IN1_L", NULL, "Mic Bias"}, {"IN2_L", NULL, "Mic Bias"},
abe_get_mixer, abe_put_switch); /* Virtual BT_VX_DL Switch */ static const struct snd_kcontrol_new bt_vx_dl_switch_controls = SOC_SINGLE_EXT("Switch", OMAP_ABE_VIRTUAL_SWITCH, MIX_SWITCH_BT_VX_DL, 1, 0, abe_get_mixer, abe_put_switch); /* Virtual MM_EXT_DL Switch */ static const struct snd_kcontrol_new mm_ext_dl_switch_controls = SOC_SINGLE_EXT("Switch", OMAP_ABE_VIRTUAL_SWITCH, MIX_SWITCH_MM_EXT_DL, 1, 0, abe_get_mixer, abe_put_switch); static const struct snd_kcontrol_new abe_controls[] = { /* DL1 mixer gains */ SOC_SINGLE_EXT_TLV("DL1 Media Playback Volume", OMAP_AESS_MIXDL1_MM_DL, 0, 149, 0, volume_get_mixer, volume_put_mixer, mm_dl1_tlv), SOC_SINGLE_EXT_TLV("DL1 Tones Playback Volume", OMAP_AESS_MIXDL1_TONES, 0, 149, 0, volume_get_mixer, volume_put_mixer, tones_dl1_tlv), SOC_SINGLE_EXT_TLV("DL1 Voice Playback Volume", OMAP_AESS_MIXDL1_VX_DL, 0, 149, 0, volume_get_mixer, volume_put_mixer, voice_dl1_tlv), SOC_SINGLE_EXT_TLV("DL1 Capture Playback Volume", OMAP_AESS_MIXDL1_MM_UL2, 0, 149, 0, volume_get_mixer, volume_put_mixer, capture_dl1_tlv), /* DL2 mixer gains */ SOC_SINGLE_EXT_TLV("DL2 Media Playback Volume", OMAP_AESS_MIXDL2_MM_DL, 0, 149, 0, volume_get_mixer, volume_put_mixer, mm_dl2_tlv),
SOC_SINGLE("Brownout Protection Switch", MAX98504_REG_16_PVDD_BROWNOUT_ENABLE, M98504_CMON_ENA_SHIFT, 1, 0), SOC_ENUM("Brownout Threshold", max98504_brownout_code_enum), SOC_ENUM("Brownout Attenuation Value", max98504_brownout_max_atten_enum), SOC_SINGLE("Brownout Attack Hold Time", MAX98504_REG_18_PVDD_BROWNOUT_CONFIG_2, M98504_PVDD_BROWNOUT_CFG2_ATTK_HOLD_SHIFT, 255, 0), SOC_SINGLE("Brownout Timed Hold", MAX98504_REG_19_PVDD_BROWNOUT_CONFIG_3, M98504_PVDD_BROWNOUT_CFG3_TIMED_HOLD_SHIFT, 255, 0), SOC_SINGLE("Brownout Release", MAX98504_REG_1A_PVDD_BROWNOUT_CONFIG_4, M98504_PVDD_BROWNOUT_CFG4_RELEASE_SHIFT, 255, 0), SOC_SINGLE("PCM BCLK Edge", MAX98504_REG_24_PCM_MODE_CONFIG, M98504_PCM_MODE_CFG_BCLKEDGE_SHIFT, 1, 0), SOC_SINGLE("PCM Channel Select", MAX98504_REG_24_PCM_MODE_CONFIG, M98504_PCM_MODE_CFG_CHSEL_SHIFT, 1, 0), SOC_SINGLE("PCM Transmit Extra HiZ Switch", MAX98504_REG_24_PCM_MODE_CONFIG, M98504_PCM_MODE_CFG_TX_EXTRA_HIZ_SHIFT, 1, 0), SOC_SINGLE("PCM Output Dither Switch", MAX98504_REG_25_PCM_DSP_CONFIG, M98504_PCM_DSP_CFG_TX_DITH_EN_SHIFT, 1, 0), SOC_SINGLE("PCM Measurement DC Blocking Filter Switch", MAX98504_REG_25_PCM_DSP_CONFIG, M98504_PCM_DSP_CFG_MEAS_DCBLK_EN_SHIFT, 1, 0), SOC_SINGLE("PCM Input Dither Switch", MAX98504_REG_25_PCM_DSP_CONFIG, M98504_PCM_DSP_CFG_RX_DITH_EN_SHIFT, 1, 0), SOC_ENUM("PCM Output Filter Mode", max98504_pcm_rx_flt_mode_enum), SOC_SINGLE_EXT_TLV("PCM Rx Gain", MAX98504_REG_25_PCM_DSP_CONFIG, M98504_PCM_DSP_CFG_RX_GAIN_SHIFT, M98504_PCM_DSP_CFG_RX_GAIN_WIDTH - 1, 1, max98504_rxpcm_gain_get, max98504_rxpcm_gain_set, max98504_rxpcm_gain_tlv), SOC_SINGLE("DAC MONOMIX", MAX98504_REG_28_PCM_TO_SPEAKER_MONOMIX, M98504_PCM_TO_SPK_MONOMIX_CFG_SHIFT, 3, 0), SOC_ENUM("PCM BCLK rate", max98504_pcm_bsel_enum), SOC_ENUM("Speaker Current Sense Enable", max98504_ispken_enum), SOC_ENUM("Speaker Voltage Sense Enable", max98504_vspken_enum), SOC_SINGLE_EXT_TLV("AIN Gain", MAX98504_REG_37_ANALOGUE_INPUT_GAIN, M98504_ANALOG_INPUT_GAIN_SHIFT, M98504_ANALOG_INPUT_GAIN_WIDTH - 1, 1, max98504_ain_gain_get, max98504_ain_gain_set, max98504_ain_gain_tlv),
#define KYLEW_CODEC_FUNC(xname, xreg)\ SOC_SINGLE_EXT(xname, FUN_REG(xreg), 0, 1, 0, kylew_func_get, kylew_func_set) static const struct snd_kcontrol_new dolphin_kylew_controls[] = { KYLEW_CODEC_FUNC("Speaker Function", KYLEW_FUNC_SPK), KYLEW_CODEC_FUNC("Earpiece Function", KYLEW_FUNC_EAR), KYLEW_CODEC_FUNC("HeadPhone Function", KYLEW_FUNC_HP), KYLEW_CODEC_FUNC("Line Function", KYLEW_FUNC_LINE), KYLEW_CODEC_FUNC("Mic Function", KYLEW_FUNC_MIC), KYLEW_CODEC_FUNC("HP Mic Function", KYLEW_FUNC_HP_MIC), KYLEW_CODEC_FUNC("Linein Rec Function", KYLEW_FUNC_LINEINREC), KYLEW_CODEC_FUNC("Mic Bias Function", KYLEW_FUNC_MIC_BIAS), SOC_SINGLE_EXT_TLV("Inter PA Playback Volume", FUN_REG(KYLEW_PGA_INTER_PA), 4, 15, 0, kylew_pga_get, kylew_pga_set, inter_pa_tlv), SOC_SINGLE_EXT_TLV("LineinRec Capture Volume", FUN_REG(KYLEW_PGA_LINEINREC), 4, 7, 1, kylew_pga_get, kylew_pga_set, lineinrec_tlv), }; static int kylew_late_probe(struct snd_soc_card *card) { struct snd_soc_codec *codec = list_first_entry(&card->codec_dev_list, struct snd_soc_codec, card_list); vbc_add_controls(codec); kylew_ext_control(&card->dapm);