diff options
| author | Phani Kumar Uppalapati <phaniu@codeaurora.org> | 2016-12-16 17:06:27 -0800 |
|---|---|---|
| committer | Phani Kumar Uppalapati <phaniu@codeaurora.org> | 2016-12-16 17:45:31 -0800 |
| commit | 40512fa4ebee46b726def91300aa73da07d8555c (patch) | |
| tree | b260bfd7f7f9bd7bc5c8cf0ed4ef9a989128e6c4 | |
| parent | 3162449f7d245d45f007d4ea3224576ddf1bcc63 (diff) | |
ASoC: wcd934x: Fix headset TX mode setting
Headset TX can be operated in 3 modes, low-power, high-perf
and default. Currently in driver mode is always being set to
default even though mixer controls are set for low-power and
high-perf. Fix the mode setting by correctly parsing the mixer
control value and set it during TX path enable.
CRs-Fixed: 1102584
Change-Id: Idd40a0b471293048833b34dda3ac5044a87fc3c9
Signed-off-by: Phani Kumar Uppalapati <phaniu@codeaurora.org>
| -rw-r--r-- | sound/soc/codecs/wcd934x/wcd934x.c | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/sound/soc/codecs/wcd934x/wcd934x.c b/sound/soc/codecs/wcd934x/wcd934x.c index 1fdf81a3a45f..8b6eb68aadd6 100644 --- a/sound/soc/codecs/wcd934x/wcd934x.c +++ b/sound/soc/codecs/wcd934x/wcd934x.c @@ -5107,19 +5107,18 @@ static int tavil_amic_pwr_lvl_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol); - u16 amic_reg; + u16 amic_reg = 0; if (!strcmp(kcontrol->id.name, "AMIC_1_2 PWR MODE")) amic_reg = WCD934X_ANA_AMIC1; if (!strcmp(kcontrol->id.name, "AMIC_3_4 PWR MODE")) amic_reg = WCD934X_ANA_AMIC3; - else - goto ret; - ucontrol->value.integer.value[0] = - (snd_soc_read(codec, amic_reg) & WCD934X_AMIC_PWR_LVL_MASK) >> - WCD934X_AMIC_PWR_LVL_SHIFT; -ret: + if (amic_reg) + ucontrol->value.integer.value[0] = + (snd_soc_read(codec, amic_reg) & + WCD934X_AMIC_PWR_LVL_MASK) >> + WCD934X_AMIC_PWR_LVL_SHIFT; return 0; } @@ -5128,7 +5127,7 @@ static int tavil_amic_pwr_lvl_put(struct snd_kcontrol *kcontrol, { struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol); u32 mode_val; - u16 amic_reg; + u16 amic_reg = 0; mode_val = ucontrol->value.enumerated.item[0]; @@ -5138,12 +5137,10 @@ static int tavil_amic_pwr_lvl_put(struct snd_kcontrol *kcontrol, amic_reg = WCD934X_ANA_AMIC1; if (!strcmp(kcontrol->id.name, "AMIC_3_4 PWR MODE")) amic_reg = WCD934X_ANA_AMIC3; - else - goto ret; - snd_soc_update_bits(codec, amic_reg, WCD934X_AMIC_PWR_LVL_MASK, - mode_val << WCD934X_AMIC_PWR_LVL_SHIFT); -ret: + if (amic_reg) + snd_soc_update_bits(codec, amic_reg, WCD934X_AMIC_PWR_LVL_MASK, + mode_val << WCD934X_AMIC_PWR_LVL_SHIFT); return 0; } |
