Commit 5fdb68a7 authored by Lucas Tanure's avatar Lucas Tanure Committed by Takashi Iwai

ALSA: hda: cs35l41: Move boost config to initialization code

Having CS35L41_PWR_CTRL2 on cs35l41_hda_config overwrites the boost
configuration for internal boost.
So move it to the initialization part and use regmap_update_bits to
only change the correct bits.
Signed-off-by: default avatarLucas Tanure <tanureal@opensource.cirrus.com>
Link: https://lore.kernel.org/r/20220413083728.10730-11-tanureal@opensource.cirrus.comSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent ca17707f
...@@ -661,6 +661,7 @@ ...@@ -661,6 +661,7 @@
#define CS35L41_GLOBAL_EN_SHIFT 0 #define CS35L41_GLOBAL_EN_SHIFT 0
#define CS35L41_BST_EN_MASK 0x0030 #define CS35L41_BST_EN_MASK 0x0030
#define CS35L41_BST_EN_SHIFT 4 #define CS35L41_BST_EN_SHIFT 4
#define CS35L41_BST_DIS_FET_OFF 0x00
#define CS35L41_BST_EN_DEFAULT 0x2 #define CS35L41_BST_EN_DEFAULT 0x2
#define CS35L41_AMP_EN_SHIFT 0 #define CS35L41_AMP_EN_SHIFT 0
#define CS35L41_AMP_EN_MASK 1 #define CS35L41_AMP_EN_MASK 1
......
...@@ -25,7 +25,6 @@ static const struct reg_sequence cs35l41_hda_config[] = { ...@@ -25,7 +25,6 @@ static const struct reg_sequence cs35l41_hda_config[] = {
{ CS35L41_DAC_PCM1_SRC, 0x00000008 }, // DACPCM1_SRC = ASPRX1 { CS35L41_DAC_PCM1_SRC, 0x00000008 }, // DACPCM1_SRC = ASPRX1
{ CS35L41_AMP_DIG_VOL_CTRL, 0x00000000 }, // AMP_VOL_PCM 0.0 dB { CS35L41_AMP_DIG_VOL_CTRL, 0x00000000 }, // AMP_VOL_PCM 0.0 dB
{ CS35L41_AMP_GAIN_CTRL, 0x00000084 }, // AMP_GAIN_PCM 4.5 dB { CS35L41_AMP_GAIN_CTRL, 0x00000084 }, // AMP_GAIN_PCM 4.5 dB
{ CS35L41_PWR_CTRL2, 0x00000001 }, // AMP_EN = 1
}; };
static const struct reg_sequence cs35l41_hda_mute[] = { static const struct reg_sequence cs35l41_hda_mute[] = {
...@@ -34,7 +33,6 @@ static const struct reg_sequence cs35l41_hda_mute[] = { ...@@ -34,7 +33,6 @@ static const struct reg_sequence cs35l41_hda_mute[] = {
}; };
static const struct reg_sequence cs35l41_hda_start_bst[] = { static const struct reg_sequence cs35l41_hda_start_bst[] = {
{ CS35L41_PWR_CTRL2, 0x00000021 }, // BST_EN = 10, AMP_EN = 1
{ CS35L41_PWR_CTRL1, 0x00000001, 3000}, // set GLOBAL_EN = 1 { CS35L41_PWR_CTRL1, 0x00000001, 3000}, // set GLOBAL_EN = 1
}; };
...@@ -94,7 +92,6 @@ static const struct reg_sequence cs35l41_active_to_safe[] = { ...@@ -94,7 +92,6 @@ static const struct reg_sequence cs35l41_active_to_safe[] = {
{ 0x00000040, 0x00000055 }, { 0x00000040, 0x00000055 },
{ 0x00000040, 0x000000AA }, { 0x00000040, 0x000000AA },
{ 0x00007438, 0x00585941 }, { 0x00007438, 0x00585941 },
{ CS35L41_PWR_CTRL2, 0x00000000 }, // AMP_EN = 0
{ CS35L41_PWR_CTRL1, 0x00000000 }, { CS35L41_PWR_CTRL1, 0x00000000 },
{ 0x0000742C, 0x00000009, 2000 }, { 0x0000742C, 0x00000009, 2000 },
{ 0x00007438, 0x00580941 }, { 0x00007438, 0x00580941 },
...@@ -144,6 +141,8 @@ static void cs35l41_hda_playback_hook(struct device *dev, int action) ...@@ -144,6 +141,8 @@ static void cs35l41_hda_playback_hook(struct device *dev, int action)
case HDA_GEN_PCM_ACT_OPEN: case HDA_GEN_PCM_ACT_OPEN:
ret = regmap_multi_reg_write(reg, cs35l41_hda_config, ret = regmap_multi_reg_write(reg, cs35l41_hda_config,
ARRAY_SIZE(cs35l41_hda_config)); ARRAY_SIZE(cs35l41_hda_config));
regmap_update_bits(reg, CS35L41_PWR_CTRL2,
CS35L41_AMP_EN_MASK, 1 << CS35L41_AMP_EN_SHIFT);
break; break;
case HDA_GEN_PCM_ACT_PREPARE: case HDA_GEN_PCM_ACT_PREPARE:
if (reg_seq->prepare) if (reg_seq->prepare)
...@@ -155,6 +154,8 @@ static void cs35l41_hda_playback_hook(struct device *dev, int action) ...@@ -155,6 +154,8 @@ static void cs35l41_hda_playback_hook(struct device *dev, int action)
ret = regmap_multi_reg_write(reg, reg_seq->cleanup, reg_seq->num_cleanup); ret = regmap_multi_reg_write(reg, reg_seq->cleanup, reg_seq->num_cleanup);
break; break;
case HDA_GEN_PCM_ACT_CLOSE: case HDA_GEN_PCM_ACT_CLOSE:
regmap_update_bits(reg, CS35L41_PWR_CTRL2,
CS35L41_AMP_EN_MASK, 0 << CS35L41_AMP_EN_SHIFT);
if (reg_seq->close) if (reg_seq->close)
ret = regmap_multi_reg_write(reg, reg_seq->close, reg_seq->num_close); ret = regmap_multi_reg_write(reg, reg_seq->close, reg_seq->num_close);
break; break;
...@@ -232,8 +233,10 @@ static int cs35l41_hda_apply_properties(struct cs35l41_hda *cs35l41) ...@@ -232,8 +233,10 @@ static int cs35l41_hda_apply_properties(struct cs35l41_hda *cs35l41)
cs35l41->reg_seq = &cs35l41_hda_reg_seq_ext_bst; cs35l41->reg_seq = &cs35l41_hda_reg_seq_ext_bst;
else else
cs35l41->reg_seq = &cs35l41_hda_reg_seq_no_bst; cs35l41->reg_seq = &cs35l41_hda_reg_seq_no_bst;
ret = regmap_multi_reg_write(cs35l41->regmap, cs35l41_reset_to_safe, regmap_multi_reg_write(cs35l41->regmap, cs35l41_reset_to_safe,
ARRAY_SIZE(cs35l41_reset_to_safe)); ARRAY_SIZE(cs35l41_reset_to_safe));
ret = regmap_update_bits(cs35l41->regmap, CS35L41_PWR_CTRL2, CS35L41_BST_EN_MASK,
CS35L41_BST_DIS_FET_OFF << CS35L41_BST_EN_SHIFT);
if (ret) if (ret)
return ret; return ret;
break; break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment