summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhani Kumar Uppalapati <phaniu@codeaurora.org>2016-12-16 17:06:27 -0800
committerPhani Kumar Uppalapati <phaniu@codeaurora.org>2016-12-16 17:45:31 -0800
commit40512fa4ebee46b726def91300aa73da07d8555c (patch)
treeb260bfd7f7f9bd7bc5c8cf0ed4ef9a989128e6c4
parent3162449f7d245d45f007d4ea3224576ddf1bcc63 (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.c23
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;
}