Skip to content

Commit

Permalink
ASoC: rt1011: Fix 'I2S Reference' enum control
Browse files Browse the repository at this point in the history
There are several things the patch adding the support for 'I2S Reference'
got wrong:
- "None" selection is in fact equals to last selected reference
- The custom put overrides RX/TX len, TDM slot sizes, etc
- the enum is useless in most part for the reference tracking
- there is no need for EXT control as there is a single bit in
  RT1011_TDM1_SET_1 register (bit 7) which selects the reference
- it was using ucontrol->value.integer.value[0] in the put/get callbacks
  which causesed access to 'I2S Reference' enum with alsamixer to fail

Complements: c3de683 ("ASoC: rt1011: Fix 'I2S Reference' enum control caused error")
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Link: https://lore.kernel.org/r/20211013123300.11095-1-peter.ujfalusi@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
  • Loading branch information
ujfalusi authored and broonie committed Oct 13, 2021
1 parent 51a67d6 commit f05a9b8
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 55 deletions.
53 changes: 5 additions & 48 deletions sound/soc/codecs/rt1011.c
Original file line number Diff line number Diff line change
Expand Up @@ -1312,54 +1312,12 @@ static int rt1011_r0_load_info(struct snd_kcontrol *kcontrol,
}

static const char * const rt1011_i2s_ref_texts[] = {
"None", "Left Channel", "Right Channel"
"Left Channel", "Right Channel"
};

static SOC_ENUM_SINGLE_EXT_DECL(rt1011_i2s_ref_enum, rt1011_i2s_ref_texts);

static int rt1011_i2s_ref_put(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol)
{
struct snd_soc_component *component =
snd_soc_kcontrol_component(kcontrol);
struct rt1011_priv *rt1011 =
snd_soc_component_get_drvdata(component);
int i2s_ref_ch = ucontrol->value.enumerated.item[0];

switch (i2s_ref_ch) {
case RT1011_I2S_REF_LEFT_CH:
regmap_write(rt1011->regmap, RT1011_TDM_TOTAL_SET, 0x0240);
regmap_write(rt1011->regmap, RT1011_TDM1_SET_2, 0x8);
regmap_write(rt1011->regmap, RT1011_TDM1_SET_1, 0x1022);
regmap_write(rt1011->regmap, RT1011_ADCDAT_OUT_SOURCE, 0x4);
break;
case RT1011_I2S_REF_RIGHT_CH:
regmap_write(rt1011->regmap, RT1011_TDM_TOTAL_SET, 0x0240);
regmap_write(rt1011->regmap, RT1011_TDM1_SET_2, 0x8);
regmap_write(rt1011->regmap, RT1011_TDM1_SET_1, 0x10a2);
regmap_write(rt1011->regmap, RT1011_ADCDAT_OUT_SOURCE, 0x4);
break;
default:
dev_info(component->dev, "I2S Reference: Do nothing\n");
}

rt1011->i2s_ref = ucontrol->value.enumerated.item[0];

return 0;
}

static int rt1011_i2s_ref_get(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol)
{
struct snd_soc_component *component =
snd_soc_kcontrol_component(kcontrol);
struct rt1011_priv *rt1011 =
snd_soc_component_get_drvdata(component);

ucontrol->value.enumerated.item[0] = rt1011->i2s_ref;

return 0;
}
static SOC_ENUM_SINGLE_DECL(rt1011_i2s_ref_enum,
RT1011_TDM1_SET_1, 7,
rt1011_i2s_ref_texts);

static const struct snd_kcontrol_new rt1011_snd_controls[] = {
/* I2S Data In Selection */
Expand Down Expand Up @@ -1400,8 +1358,7 @@ static const struct snd_kcontrol_new rt1011_snd_controls[] = {
SOC_SINGLE("R0 Temperature", RT1011_STP_INITIAL_RESISTANCE_TEMP,
2, 255, 0),
/* I2S Reference */
SOC_ENUM_EXT("I2S Reference", rt1011_i2s_ref_enum,
rt1011_i2s_ref_get, rt1011_i2s_ref_put),
SOC_ENUM("I2S Reference", rt1011_i2s_ref_enum),
};

static int rt1011_is_sys_clk_from_pll(struct snd_soc_dapm_widget *source,
Expand Down
7 changes: 0 additions & 7 deletions sound/soc/codecs/rt1011.h
Original file line number Diff line number Diff line change
Expand Up @@ -654,12 +654,6 @@ enum {
RT1011_AIFS
};

enum {
RT1011_I2S_REF_NONE,
RT1011_I2S_REF_LEFT_CH,
RT1011_I2S_REF_RIGHT_CH,
};

/* BiQual & DRC related settings */
#define RT1011_BQ_DRC_NUM 128
struct rt1011_bq_drc_params {
Expand Down Expand Up @@ -698,7 +692,6 @@ struct rt1011_priv {
unsigned int r0_reg, cali_done;
unsigned int r0_calib, temperature_calib;
int recv_spk_mode;
unsigned int i2s_ref;
};

#endif /* end of _RT1011_H_ */

0 comments on commit f05a9b8

Please sign in to comment.