diff --git a/sound/soc/codecs/rk3308_codec.c b/sound/soc/codecs/rk3308_codec.c index b9097fe51e53..b6543c037ad0 100644 --- a/sound/soc/codecs/rk3308_codec.c +++ b/sound/soc/codecs/rk3308_codec.c @@ -194,14 +194,6 @@ struct rk3308_codec_priv { int ext_micbias; int pm_state; - /* AGC L/R Off/on */ - unsigned int agc_l[ADC_LR_GROUP_MAX]; - unsigned int agc_r[ADC_LR_GROUP_MAX]; - - /* AGC L/R Approximate Sample Rate */ - unsigned int agc_asr_l[ADC_LR_GROUP_MAX]; - unsigned int agc_asr_r[ADC_LR_GROUP_MAX]; - /* ADC MIC Mute/Work */ unsigned int mic_mute_l[ADC_LR_GROUP_MAX]; unsigned int mic_mute_r[ADC_LR_GROUP_MAX]; @@ -232,12 +224,6 @@ struct rk3308_codec_priv { #endif }; -static const DECLARE_TLV_DB_SCALE(rk3308_codec_alc_agc_grp_gain_tlv, - -1800, 150, 2850); -static const DECLARE_TLV_DB_SCALE(rk3308_codec_alc_agc_grp_max_gain_tlv, - -1350, 600, 2850); -static const DECLARE_TLV_DB_SCALE(rk3308_codec_alc_agc_grp_min_gain_tlv, - -1800, 600, 2400); static const DECLARE_TLV_DB_SCALE(rk3308_codec_adc_alc_gain_tlv, -1800, 150, 2850); static const DECLARE_TLV_DB_SCALE(rk3308_codec_dac_lineout_gain_tlv, @@ -281,14 +267,6 @@ static int rk3308_codec_hpf_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol); static int rk3308_codec_hpf_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol); -static int rk3308_codec_agc_get(struct snd_kcontrol *kcontrol, - struct snd_ctl_elem_value *ucontrol); -static int rk3308_codec_agc_put(struct snd_kcontrol *kcontrol, - struct snd_ctl_elem_value *ucontrol); -static int rk3308_codec_agc_asr_get(struct snd_kcontrol *kcontrol, - struct snd_ctl_elem_value *ucontrol); -static int rk3308_codec_agc_asr_put(struct snd_kcontrol *kcontrol, - struct snd_ctl_elem_value *ucontrol); static int rk3308_codec_mic_mute_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol); static int rk3308_codec_mic_mute_put(struct snd_kcontrol *kcontrol, @@ -355,18 +333,6 @@ static const struct soc_enum rk3308_hpf_enum_array[] = { SOC_ENUM_SINGLE(3, 0, ARRAY_SIZE(offon_text), offon_text), }; -/* ALC AGC Switch */ -static const struct soc_enum rk3308_agc_enum_array[] = { - SOC_ENUM_SINGLE(0, 0, ARRAY_SIZE(offon_text), offon_text), - SOC_ENUM_SINGLE(0, 1, ARRAY_SIZE(offon_text), offon_text), - SOC_ENUM_SINGLE(1, 0, ARRAY_SIZE(offon_text), offon_text), - SOC_ENUM_SINGLE(1, 1, ARRAY_SIZE(offon_text), offon_text), - SOC_ENUM_SINGLE(2, 0, ARRAY_SIZE(offon_text), offon_text), - SOC_ENUM_SINGLE(2, 1, ARRAY_SIZE(offon_text), offon_text), - SOC_ENUM_SINGLE(3, 0, ARRAY_SIZE(offon_text), offon_text), - SOC_ENUM_SINGLE(3, 1, ARRAY_SIZE(offon_text), offon_text), -}; - /* ADC MIC Mute/Work Switch */ static const struct soc_enum rk3308_mic_mute_enum_array[] = { SOC_ENUM_SINGLE(0, 0, ARRAY_SIZE(mute_text), mute_text), @@ -379,40 +345,6 @@ static const struct soc_enum rk3308_mic_mute_enum_array[] = { SOC_ENUM_SINGLE(3, 1, ARRAY_SIZE(mute_text), mute_text), }; -/* ALC AGC Approximate Sample Rate */ -#define AGC_ASR_NUM 8 - -#define AGC_ASR_96KHZ 0 -#define AGC_ASR_48KHZ 1 -#define AGC_ASR_44_1KHZ 2 -#define AGC_ASR_32KHZ 3 -#define AGC_ASR_24KHZ 4 -#define AGC_ASR_16KHZ 5 -#define AGC_ASR_12KHZ 6 -#define AGC_ASR_8KHZ 7 - -static const char *agc_asr_text[AGC_ASR_NUM] = { - [AGC_ASR_96KHZ] = "96KHz", - [AGC_ASR_48KHZ] = "48KHz", - [AGC_ASR_44_1KHZ] = "44.1KHz", - [AGC_ASR_32KHZ] = "32KHz", - [AGC_ASR_24KHZ] = "24KHz", - [AGC_ASR_16KHZ] = "16KHz", - [AGC_ASR_12KHZ] = "12KHz", - [AGC_ASR_8KHZ] = "8KHz", -}; - -static const struct soc_enum rk3308_agc_asr_enum_array[] = { - SOC_ENUM_SINGLE(0, 0, ARRAY_SIZE(agc_asr_text), agc_asr_text), - SOC_ENUM_SINGLE(0, 1, ARRAY_SIZE(agc_asr_text), agc_asr_text), - SOC_ENUM_SINGLE(1, 0, ARRAY_SIZE(agc_asr_text), agc_asr_text), - SOC_ENUM_SINGLE(1, 1, ARRAY_SIZE(agc_asr_text), agc_asr_text), - SOC_ENUM_SINGLE(2, 0, ARRAY_SIZE(agc_asr_text), agc_asr_text), - SOC_ENUM_SINGLE(2, 1, ARRAY_SIZE(agc_asr_text), agc_asr_text), - SOC_ENUM_SINGLE(3, 0, ARRAY_SIZE(agc_asr_text), agc_asr_text), - SOC_ENUM_SINGLE(3, 1, ARRAY_SIZE(agc_asr_text), agc_asr_text), -}; - static const struct snd_kcontrol_new mic_gains_a[] = { /* ADC MIC */ SOC_SINGLE_EXT_TLV("ADC MIC Group 0 Left Gain", @@ -550,201 +482,6 @@ static const struct snd_kcontrol_new mic_gains_b[] = { }; static const struct snd_kcontrol_new rk3308_codec_dapm_controls[] = { - /* ALC AGC Group */ - SOC_SINGLE_RANGE_TLV("ALC AGC Group 0 Left Volume", - RK3308_ALC_L_DIG_CON03(0), - RK3308_AGC_PGA_GAIN_SFT, - RK3308_AGC_PGA_GAIN_MIN, - RK3308_AGC_PGA_GAIN_MAX, - 0, rk3308_codec_alc_agc_grp_gain_tlv), - SOC_SINGLE_RANGE_TLV("ALC AGC Group 0 Right Volume", - RK3308_ALC_R_DIG_CON03(0), - RK3308_AGC_PGA_GAIN_SFT, - RK3308_AGC_PGA_GAIN_MIN, - RK3308_AGC_PGA_GAIN_MAX, - 0, rk3308_codec_alc_agc_grp_gain_tlv), - - SOC_SINGLE_RANGE_TLV("ALC AGC Group 1 Left Volume", - RK3308_ALC_L_DIG_CON03(1), - RK3308_AGC_PGA_GAIN_SFT, - RK3308_AGC_PGA_GAIN_MIN, - RK3308_AGC_PGA_GAIN_MAX, - 0, rk3308_codec_alc_agc_grp_gain_tlv), - SOC_SINGLE_RANGE_TLV("ALC AGC Group 1 Right Volume", - RK3308_ALC_R_DIG_CON03(1), - RK3308_AGC_PGA_GAIN_SFT, - RK3308_AGC_PGA_GAIN_MIN, - RK3308_AGC_PGA_GAIN_MAX, - 0, rk3308_codec_alc_agc_grp_gain_tlv), - - SOC_SINGLE_RANGE_TLV("ALC AGC Group 2 Left Volume", - RK3308_ALC_L_DIG_CON03(2), - RK3308_AGC_PGA_GAIN_SFT, - RK3308_AGC_PGA_GAIN_MIN, - RK3308_AGC_PGA_GAIN_MAX, - 0, rk3308_codec_alc_agc_grp_gain_tlv), - SOC_SINGLE_RANGE_TLV("ALC AGC Group 2 Right Volume", - RK3308_ALC_R_DIG_CON03(2), - RK3308_AGC_PGA_GAIN_SFT, - RK3308_AGC_PGA_GAIN_MIN, - RK3308_AGC_PGA_GAIN_MAX, - 0, rk3308_codec_alc_agc_grp_gain_tlv), - - SOC_SINGLE_RANGE_TLV("ALC AGC Group 3 Left Volume", - RK3308_ALC_L_DIG_CON03(3), - RK3308_AGC_PGA_GAIN_SFT, - RK3308_AGC_PGA_GAIN_MIN, - RK3308_AGC_PGA_GAIN_MAX, - 0, rk3308_codec_alc_agc_grp_gain_tlv), - SOC_SINGLE_RANGE_TLV("ALC AGC Group 3 Right Volume", - RK3308_ALC_R_DIG_CON03(3), - RK3308_AGC_PGA_GAIN_SFT, - RK3308_AGC_PGA_GAIN_MIN, - RK3308_AGC_PGA_GAIN_MAX, - 0, rk3308_codec_alc_agc_grp_gain_tlv), - - /* ALC AGC MAX */ - SOC_SINGLE_RANGE_TLV("ALC AGC Group 0 Left Max Volume", - RK3308_ALC_L_DIG_CON09(0), - RK3308_AGC_MAX_GAIN_PGA_SFT, - RK3308_AGC_MAX_GAIN_PGA_MIN, - RK3308_AGC_MAX_GAIN_PGA_MAX, - 0, rk3308_codec_alc_agc_grp_max_gain_tlv), - SOC_SINGLE_RANGE_TLV("ALC AGC Group 0 Right Max Volume", - RK3308_ALC_R_DIG_CON09(0), - RK3308_AGC_MAX_GAIN_PGA_SFT, - RK3308_AGC_MAX_GAIN_PGA_MIN, - RK3308_AGC_MAX_GAIN_PGA_MAX, - 0, rk3308_codec_alc_agc_grp_max_gain_tlv), - - SOC_SINGLE_RANGE_TLV("ALC AGC Group 1 Left Max Volume", - RK3308_ALC_L_DIG_CON09(1), - RK3308_AGC_MAX_GAIN_PGA_SFT, - RK3308_AGC_MAX_GAIN_PGA_MIN, - RK3308_AGC_MAX_GAIN_PGA_MAX, - 0, rk3308_codec_alc_agc_grp_max_gain_tlv), - SOC_SINGLE_RANGE_TLV("ALC AGC Group 1 Right Max Volume", - RK3308_ALC_R_DIG_CON09(1), - RK3308_AGC_MAX_GAIN_PGA_SFT, - RK3308_AGC_MAX_GAIN_PGA_MIN, - RK3308_AGC_MAX_GAIN_PGA_MAX, - 0, rk3308_codec_alc_agc_grp_max_gain_tlv), - - SOC_SINGLE_RANGE_TLV("ALC AGC Group 2 Left Max Volume", - RK3308_ALC_L_DIG_CON09(2), - RK3308_AGC_MAX_GAIN_PGA_SFT, - RK3308_AGC_MAX_GAIN_PGA_MIN, - RK3308_AGC_MAX_GAIN_PGA_MAX, - 0, rk3308_codec_alc_agc_grp_max_gain_tlv), - SOC_SINGLE_RANGE_TLV("ALC AGC Group 2 Right Max Volume", - RK3308_ALC_R_DIG_CON09(2), - RK3308_AGC_MAX_GAIN_PGA_SFT, - RK3308_AGC_MAX_GAIN_PGA_MIN, - RK3308_AGC_MAX_GAIN_PGA_MAX, - 0, rk3308_codec_alc_agc_grp_max_gain_tlv), - - SOC_SINGLE_RANGE_TLV("ALC AGC Group 3 Left Max Volume", - RK3308_ALC_L_DIG_CON09(3), - RK3308_AGC_MAX_GAIN_PGA_SFT, - RK3308_AGC_MAX_GAIN_PGA_MIN, - RK3308_AGC_MAX_GAIN_PGA_MAX, - 0, rk3308_codec_alc_agc_grp_max_gain_tlv), - SOC_SINGLE_RANGE_TLV("ALC AGC Group 3 Right Max Volume", - RK3308_ALC_R_DIG_CON09(3), - RK3308_AGC_MAX_GAIN_PGA_SFT, - RK3308_AGC_MAX_GAIN_PGA_MIN, - RK3308_AGC_MAX_GAIN_PGA_MAX, - 0, rk3308_codec_alc_agc_grp_max_gain_tlv), - - /* ALC AGC MIN */ - SOC_SINGLE_RANGE_TLV("ALC AGC Group 0 Left Min Volume", - RK3308_ALC_L_DIG_CON09(0), - RK3308_AGC_MIN_GAIN_PGA_SFT, - RK3308_AGC_MIN_GAIN_PGA_MIN, - RK3308_AGC_MIN_GAIN_PGA_MAX, - 0, rk3308_codec_alc_agc_grp_min_gain_tlv), - SOC_SINGLE_RANGE_TLV("ALC AGC Group 0 Right Min Volume", - RK3308_ALC_R_DIG_CON09(0), - RK3308_AGC_MIN_GAIN_PGA_SFT, - RK3308_AGC_MIN_GAIN_PGA_MIN, - RK3308_AGC_MIN_GAIN_PGA_MAX, - 0, rk3308_codec_alc_agc_grp_min_gain_tlv), - - SOC_SINGLE_RANGE_TLV("ALC AGC Group 1 Left Min Volume", - RK3308_ALC_L_DIG_CON09(1), - RK3308_AGC_MIN_GAIN_PGA_SFT, - RK3308_AGC_MIN_GAIN_PGA_MIN, - RK3308_AGC_MIN_GAIN_PGA_MAX, - 0, rk3308_codec_alc_agc_grp_min_gain_tlv), - SOC_SINGLE_RANGE_TLV("ALC AGC Group 1 Right Min Volume", - RK3308_ALC_R_DIG_CON09(1), - RK3308_AGC_MIN_GAIN_PGA_SFT, - RK3308_AGC_MIN_GAIN_PGA_MIN, - RK3308_AGC_MIN_GAIN_PGA_MAX, - 0, rk3308_codec_alc_agc_grp_min_gain_tlv), - - SOC_SINGLE_RANGE_TLV("ALC AGC Group 2 Left Min Volume", - RK3308_ALC_L_DIG_CON09(2), - RK3308_AGC_MIN_GAIN_PGA_SFT, - RK3308_AGC_MIN_GAIN_PGA_MIN, - RK3308_AGC_MIN_GAIN_PGA_MAX, - 0, rk3308_codec_alc_agc_grp_min_gain_tlv), - SOC_SINGLE_RANGE_TLV("ALC AGC Group 2 Right Min Volume", - RK3308_ALC_R_DIG_CON09(2), - RK3308_AGC_MIN_GAIN_PGA_SFT, - RK3308_AGC_MIN_GAIN_PGA_MIN, - RK3308_AGC_MIN_GAIN_PGA_MAX, - 0, rk3308_codec_alc_agc_grp_min_gain_tlv), - - SOC_SINGLE_RANGE_TLV("ALC AGC Group 3 Left Min Volume", - RK3308_ALC_L_DIG_CON09(3), - RK3308_AGC_MIN_GAIN_PGA_SFT, - RK3308_AGC_MIN_GAIN_PGA_MIN, - RK3308_AGC_MIN_GAIN_PGA_MAX, - 0, rk3308_codec_alc_agc_grp_min_gain_tlv), - SOC_SINGLE_RANGE_TLV("ALC AGC Group 3 Right Min Volume", - RK3308_ALC_R_DIG_CON09(3), - RK3308_AGC_MIN_GAIN_PGA_SFT, - RK3308_AGC_MIN_GAIN_PGA_MIN, - RK3308_AGC_MIN_GAIN_PGA_MAX, - 0, rk3308_codec_alc_agc_grp_min_gain_tlv), - - /* ALC AGC Switch */ - SOC_ENUM_EXT("ALC AGC Group 0 Left Switch", rk3308_agc_enum_array[0], - rk3308_codec_agc_get, rk3308_codec_agc_put), - SOC_ENUM_EXT("ALC AGC Group 0 Right Switch", rk3308_agc_enum_array[1], - rk3308_codec_agc_get, rk3308_codec_agc_put), - SOC_ENUM_EXT("ALC AGC Group 1 Left Switch", rk3308_agc_enum_array[2], - rk3308_codec_agc_get, rk3308_codec_agc_put), - SOC_ENUM_EXT("ALC AGC Group 1 Right Switch", rk3308_agc_enum_array[3], - rk3308_codec_agc_get, rk3308_codec_agc_put), - SOC_ENUM_EXT("ALC AGC Group 2 Left Switch", rk3308_agc_enum_array[4], - rk3308_codec_agc_get, rk3308_codec_agc_put), - SOC_ENUM_EXT("ALC AGC Group 2 Right Switch", rk3308_agc_enum_array[5], - rk3308_codec_agc_get, rk3308_codec_agc_put), - SOC_ENUM_EXT("ALC AGC Group 3 Left Switch", rk3308_agc_enum_array[6], - rk3308_codec_agc_get, rk3308_codec_agc_put), - SOC_ENUM_EXT("ALC AGC Group 3 Right Switch", rk3308_agc_enum_array[7], - rk3308_codec_agc_get, rk3308_codec_agc_put), - - /* ALC AGC Approximate Sample Rate */ - SOC_ENUM_EXT("AGC Group 0 Left Approximate Sample Rate", rk3308_agc_asr_enum_array[0], - rk3308_codec_agc_asr_get, rk3308_codec_agc_asr_put), - SOC_ENUM_EXT("AGC Group 0 Right Approximate Sample Rate", rk3308_agc_asr_enum_array[1], - rk3308_codec_agc_asr_get, rk3308_codec_agc_asr_put), - SOC_ENUM_EXT("AGC Group 1 Left Approximate Sample Rate", rk3308_agc_asr_enum_array[2], - rk3308_codec_agc_asr_get, rk3308_codec_agc_asr_put), - SOC_ENUM_EXT("AGC Group 1 Right Approximate Sample Rate", rk3308_agc_asr_enum_array[3], - rk3308_codec_agc_asr_get, rk3308_codec_agc_asr_put), - SOC_ENUM_EXT("AGC Group 2 Left Approximate Sample Rate", rk3308_agc_asr_enum_array[4], - rk3308_codec_agc_asr_get, rk3308_codec_agc_asr_put), - SOC_ENUM_EXT("AGC Group 2 Right Approximate Sample Rate", rk3308_agc_asr_enum_array[5], - rk3308_codec_agc_asr_get, rk3308_codec_agc_asr_put), - SOC_ENUM_EXT("AGC Group 3 Left Approximate Sample Rate", rk3308_agc_asr_enum_array[6], - rk3308_codec_agc_asr_get, rk3308_codec_agc_asr_put), - SOC_ENUM_EXT("AGC Group 3 Right Approximate Sample Rate", rk3308_agc_asr_enum_array[7], - rk3308_codec_agc_asr_get, rk3308_codec_agc_asr_put), - /* ADC MICBIAS Voltage */ SOC_ENUM_EXT("ADC MICBIAS Voltage", rk3308_micbias_volts_enum_array[0], rk3308_codec_micbias_volts_get, rk3308_codec_micbias_volts_put), @@ -882,156 +619,6 @@ static const struct snd_kcontrol_new rk3308_codec_dapm_controls[] = { 0, rk3308_codec_dac_hpmix_gain_tlv), }; -static int rk3308_codec_agc_get(struct snd_kcontrol *kcontrol, - struct snd_ctl_elem_value *ucontrol) -{ - struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol); - struct rk3308_codec_priv *rk3308 = snd_soc_component_get_drvdata(component); - struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; - - if (e->reg < 0 || e->reg > ADC_LR_GROUP_MAX - 1) { - dev_err(rk3308->plat_dev, - "%s: Invalid ADC grp: %d\n", __func__, e->reg); - return -EINVAL; - } - - if (e->shift_l) - ucontrol->value.integer.value[0] = rk3308->agc_r[e->reg]; - else - ucontrol->value.integer.value[0] = rk3308->agc_l[e->reg]; - - return 0; -} - -static int rk3308_codec_agc_put(struct snd_kcontrol *kcontrol, - struct snd_ctl_elem_value *ucontrol) -{ - struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol); - struct rk3308_codec_priv *rk3308 = snd_soc_component_get_drvdata(component); - - struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; - unsigned int value = ucontrol->value.integer.value[0]; - int grp = e->reg; - - if (e->reg < 0 || e->reg > ADC_LR_GROUP_MAX - 1) { - dev_err(rk3308->plat_dev, - "%s: Invalid ADC grp: %d\n", __func__, e->reg); - return -EINVAL; - } - - if (value) { - /* ALC AGC On */ - if (e->shift_l) { - /* ALC AGC Right On */ - regmap_update_bits(rk3308->regmap, RK3308_ALC_R_DIG_CON09(grp), - RK3308_AGC_FUNC_SEL_MSK, - RK3308_AGC_FUNC_SEL_EN); - regmap_update_bits(rk3308->regmap, RK3308_ADC_ANA_CON11(grp), - RK3308_ADC_ALCR_CON_GAIN_PGAR_MSK, - RK3308_ADC_ALCR_CON_GAIN_PGAR_EN); - - rk3308->agc_r[e->reg] = 1; - } else { - /* ALC AGC Left On */ - regmap_update_bits(rk3308->regmap, RK3308_ALC_L_DIG_CON09(grp), - RK3308_AGC_FUNC_SEL_MSK, - RK3308_AGC_FUNC_SEL_EN); - regmap_update_bits(rk3308->regmap, RK3308_ADC_ANA_CON11(grp), - RK3308_ADC_ALCL_CON_GAIN_PGAL_MSK, - RK3308_ADC_ALCL_CON_GAIN_PGAL_EN); - - rk3308->agc_l[e->reg] = 1; - } - } else { - /* ALC AGC Off */ - if (e->shift_l) { - /* ALC AGC Right Off */ - regmap_update_bits(rk3308->regmap, RK3308_ALC_R_DIG_CON09(grp), - RK3308_AGC_FUNC_SEL_MSK, - RK3308_AGC_FUNC_SEL_DIS); - regmap_update_bits(rk3308->regmap, RK3308_ADC_ANA_CON11(grp), - RK3308_ADC_ALCR_CON_GAIN_PGAR_MSK, - RK3308_ADC_ALCR_CON_GAIN_PGAR_DIS); - - rk3308->agc_r[e->reg] = 0; - } else { - /* ALC AGC Left Off */ - regmap_update_bits(rk3308->regmap, RK3308_ALC_L_DIG_CON09(grp), - RK3308_AGC_FUNC_SEL_MSK, - RK3308_AGC_FUNC_SEL_DIS); - regmap_update_bits(rk3308->regmap, RK3308_ADC_ANA_CON11(grp), - RK3308_ADC_ALCL_CON_GAIN_PGAL_MSK, - RK3308_ADC_ALCL_CON_GAIN_PGAL_DIS); - - rk3308->agc_l[e->reg] = 0; - } - } - - return 0; -} - -static int rk3308_codec_agc_asr_get(struct snd_kcontrol *kcontrol, - struct snd_ctl_elem_value *ucontrol) -{ - struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol); - struct rk3308_codec_priv *rk3308 = snd_soc_component_get_drvdata(component); - struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; - unsigned int value; - int grp = e->reg; - - if (e->reg < 0 || e->reg > ADC_LR_GROUP_MAX - 1) { - dev_err(rk3308->plat_dev, - "%s: Invalid ADC grp: %d\n", __func__, e->reg); - return -EINVAL; - } - - if (e->shift_l) { - regmap_read(rk3308->regmap, RK3308_ALC_R_DIG_CON04(grp), &value); - rk3308->agc_asr_r[e->reg] = value >> RK3308_AGC_APPROX_RATE_SFT; - ucontrol->value.integer.value[0] = rk3308->agc_asr_r[e->reg]; - } else { - regmap_read(rk3308->regmap, RK3308_ALC_L_DIG_CON04(grp), &value); - rk3308->agc_asr_l[e->reg] = value >> RK3308_AGC_APPROX_RATE_SFT; - ucontrol->value.integer.value[0] = rk3308->agc_asr_l[e->reg]; - } - - return 0; -} - -static int rk3308_codec_agc_asr_put(struct snd_kcontrol *kcontrol, - struct snd_ctl_elem_value *ucontrol) -{ - struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol); - struct rk3308_codec_priv *rk3308 = snd_soc_component_get_drvdata(component); - struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; - unsigned int value; - int grp = e->reg; - - if (e->reg < 0 || e->reg > ADC_LR_GROUP_MAX - 1) { - dev_err(rk3308->plat_dev, - "%s: Invalid ADC grp: %d\n", __func__, e->reg); - return -EINVAL; - } - - value = ucontrol->value.integer.value[0] << RK3308_AGC_APPROX_RATE_SFT; - - if (e->shift_l) { - /* ALC AGC Right Approximate Sample Rate */ - regmap_update_bits(rk3308->regmap, RK3308_ALC_R_DIG_CON04(grp), - RK3308_AGC_APPROX_RATE_MSK, - value); - rk3308->agc_asr_r[e->reg] = ucontrol->value.integer.value[0]; - } else { - /* ALC AGC Left Approximate Sample Rate */ - regmap_update_bits(rk3308->regmap, RK3308_ALC_L_DIG_CON04(grp), - RK3308_AGC_APPROX_RATE_MSK, - value); - rk3308->agc_asr_l[e->reg] = ucontrol->value.integer.value[0]; - } - - return 0; -} - static int rk3308_codec_mic_mute_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { @@ -4074,13 +3661,8 @@ static int rk3308_codec_dapm_controls_prepare(struct rk3308_codec_priv *rk3308) { int grp; - for (grp = 0; grp < ADC_LR_GROUP_MAX; grp++) { + for (grp = 0; grp < ADC_LR_GROUP_MAX; grp++) rk3308->hpf_cutoff[grp] = 0; - rk3308->agc_l[grp] = 0; - rk3308->agc_r[grp] = 0; - rk3308->agc_asr_l[grp] = AGC_ASR_96KHZ; - rk3308->agc_asr_r[grp] = AGC_ASR_96KHZ; - } rk3308_codec_dapm_mic_gains(rk3308);