(struct soc_mixer_control *)kcontrol->private_value; struct msm_compr_pdata *pdata = snd_soc_platform_get_drvdata(platform); uint32_t *volume = pdata->volume[mc->reg]; pr_debug("%s: mc->reg %d\n", __func__, mc->reg); ucontrol->value.integer.value[0] = volume[0]; ucontrol->value.integer.value[1] = volume[1]; return 0; } /* System Pin has no volume control */ static const struct snd_kcontrol_new msm_compr_volume_controls[] = { SOC_DOUBLE_EXT_TLV("Compress Playback Volume", MSM_FRONTEND_DAI_MULTIMEDIA4, 0, 8, COMPRESSED_LR_VOL_MAX_STEPS, 0, msm_compr_volume_get, msm_compr_volume_put, msm_compr_vol_gain), }; static int msm_compr_probe(struct snd_soc_platform *platform) { struct msm_compr_pdata *pdata; int i; pr_debug("%s\n", __func__); pdata = (struct msm_compr_pdata *) kzalloc(sizeof(*pdata), GFP_KERNEL); if (!pdata) return -ENOMEM;
static const struct snd_kcontrol_new rt5640_snd_controls[] = { /* Speaker Output Volume */ // SOC_DOUBLE("Speaker Playback Switch", RT5640_SPK_VOL, // RT5640_L_MUTE_SFT, RT5640_R_MUTE_SFT, 1, 1), // SOC_DOUBLE_EXT_TLV("Speaker Playback Volume", RT5640_SPK_VOL, // RT5640_L_VOL_SFT, RT5640_R_VOL_SFT, RT5640_VOL_RSCL_RANGE, 0, // rt5640_vol_rescale_get, rt5640_vol_rescale_put, out_vol_tlv), /* Headphone Output Volume */ SOC_DOUBLE("HP Playback Switch", RT5640_HP_VOL, RT5640_L_MUTE_SFT, RT5640_R_MUTE_SFT, 1, 1), SOC_DOUBLE_EXT_TLV("HP Playback Volume", RT5640_HP_VOL, RT5640_L_VOL_SFT, RT5640_R_VOL_SFT, RT5640_VOL_RSCL_RANGE, 0, rt5640_vol_rescale_get, rt5640_vol_rescale_put, out_vol_tlv), /* OUTPUT Control */ SOC_DOUBLE("OUT Playback Switch", RT5640_OUTPUT, RT5640_L_MUTE_SFT, RT5640_R_MUTE_SFT, 1, 1), SOC_DOUBLE("OUT Channel Switch", RT5640_OUTPUT, RT5640_VOL_L_SFT, RT5640_VOL_R_SFT, 1, 1), SOC_DOUBLE_TLV("OUT Playback Volume", RT5640_OUTPUT, RT5640_L_VOL_SFT, RT5640_R_VOL_SFT, 39, 1, out_vol_tlv), /* MONO Output Control */ SOC_SINGLE("Mono Playback Switch", RT5640_MONO_OUT, RT5640_L_MUTE_SFT, 1, 1), /* DAC Digital Volume */ SOC_DOUBLE("DAC2 Playback Switch", RT5640_DAC2_CTRL, RT5640_M_DAC_L2_VOL_SFT, RT5640_M_DAC_R2_VOL_SFT, 1, 1), SOC_DOUBLE_TLV("DAC1 Playback Volume", RT5640_DAC1_DIG_VOL, RT5640_L_VOL_SFT, RT5640_R_VOL_SFT, 175, 0, dac_vol_tlv), SOC_DOUBLE_TLV("Mono DAC Playback Volume", RT5640_DAC2_DIG_VOL, RT5640_L_VOL_SFT, RT5640_R_VOL_SFT,
volume_get_mixer, volume_put_mixer, audul_vx_ul_tlv), SOC_SINGLE_EXT_TLV("AUDUL Voice DL Volume", OMAP_AESS_MIXAUDUL_VX_DL, 0, 149, 0, volume_get_mixer, volume_put_mixer, audul_vx_dl_tlv), /* SDT mixer gains */ SOC_SINGLE_EXT_TLV("SDT UL Volume", OMAP_AESS_MIXSDT_UL, 0, 149, 0, volume_get_mixer, volume_put_mixer, sdt_ul_tlv), SOC_SINGLE_EXT_TLV("SDT DL Volume", OMAP_AESS_MIXSDT_DL, 0, 149, 0, volume_get_mixer, volume_put_mixer, sdt_dl_tlv), /* DMIC gains */ SOC_DOUBLE_EXT_TLV("DMIC1 UL Volume", GAINS_DMIC1, OMAP_AESS_GAIN_DMIC1_LEFT, OMAP_AESS_GAIN_DMIC1_RIGHT, 149, 0, volume_get_gain, volume_put_gain, dmic_tlv), SOC_DOUBLE_EXT_TLV("DMIC2 UL Volume", GAINS_DMIC2, OMAP_AESS_GAIN_DMIC2_LEFT, OMAP_AESS_GAIN_DMIC2_RIGHT, 149, 0, volume_get_gain, volume_put_gain, dmic_tlv), SOC_DOUBLE_EXT_TLV("DMIC3 UL Volume", GAINS_DMIC3, OMAP_AESS_GAIN_DMIC3_LEFT, OMAP_AESS_GAIN_DMIC3_RIGHT, 149, 0, volume_get_gain, volume_put_gain, dmic_tlv), SOC_DOUBLE_EXT_TLV("AMIC UL Volume", GAINS_AMIC, OMAP_AESS_GAIN_AMIC_LEFT, OMAP_AESS_GAIN_AMIC_RIGHT, 149, 0, volume_get_gain, volume_put_gain, amic_tlv), SOC_DOUBLE_EXT_TLV("BT UL Volume",
ucontrol->value.integer.value[0] = hsw_ipc_to_mixer(volume); sst_hsw_mixer_get_volume(hsw, 0, 1, &volume); ucontrol->value.integer.value[1] = hsw_ipc_to_mixer(volume); return 0; } /* TLV used by both global and stream volumes */ static const DECLARE_TLV_DB_SCALE(hsw_vol_tlv, -9000, 300, 1); /* System Pin has no volume control */ static const struct snd_kcontrol_new hsw_volume_controls[] = { /* Global DSP volume */ SOC_DOUBLE_EXT_TLV("Master Playback Volume", 0, 0, 8, ARRAY_SIZE(volume_map) -1, 0, hsw_volume_get, hsw_volume_put, hsw_vol_tlv), /* Offload 0 volume */ SOC_DOUBLE_EXT_TLV("Media0 Playback Volume", 1, 0, 8, ARRAY_SIZE(volume_map), 0, hsw_stream_volume_get, hsw_stream_volume_put, hsw_vol_tlv), /* Offload 1 volume */ SOC_DOUBLE_EXT_TLV("Media1 Playback Volume", 2, 0, 8, ARRAY_SIZE(volume_map), 0, hsw_stream_volume_get, hsw_stream_volume_put, hsw_vol_tlv), /* Loopback volume */ SOC_DOUBLE_EXT_TLV("Loopback Capture Volume", 3, 0, 8, ARRAY_SIZE(volume_map), 0, hsw_stream_volume_get, hsw_stream_volume_put, hsw_vol_tlv), /* Mic Capture volume */ SOC_DOUBLE_EXT_TLV("Mic Capture Volume", 4, 0, 8,