Message ID | 20211214135959.1317949-4-tanureal@opensource.cirrus.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Add support for CS35L41 in HDA systems | expand |
On Tue, Dec 14, 2021 at 01:59:52PM +0000, Lucas Tanure wrote: > + { CS35L41_PWR_CTRL2, 0x00000000 }, > + { CS35L41_AMP_GAIN_CTRL, 0x00000000 }, > }; > - ret = regmap_update_bits(cs35l41->regmap, CS35L41_PWR_CTRL2, > - CS35L41_AMP_EN_MASK, 0); > - if (ret < 0) { > - dev_err(cs35l41->dev, "Write CS35L41_PWR_CTRL2 failed: %d\n", ret); > - goto err; > - } > - > - ret = regmap_update_bits(cs35l41->regmap, CS35L41_AMP_GAIN_CTRL, > - CS35L41_AMP_GAIN_PCM_MASK, 0); > - if (ret < 0) { > - dev_err(cs35l41->dev, "Write CS35L41_AMP_GAIN_CTRL failed: %d\n", ret); > - goto err; > - } Sorry for not spotting earlier but just noticed these two writes are update bits, so you shouldn't just be setting the values to zero in the patch you just want to clear the relevant bit. Thanks, Charles
On 12/15/21 9:10 AM, Charles Keepax <ckeepax@opensource.cirrus.com> wrote: > On Tue, Dec 14, 2021 at 01:59:52PM +0000, Lucas Tanure wrote: > > + { CS35L41_PWR_CTRL2, 0x00000000 }, > > + { CS35L41_AMP_GAIN_CTRL, 0x00000000 }, > > }; > > - ret = regmap_update_bits(cs35l41->regmap, CS35L41_PWR_CTRL2, > > - CS35L41_AMP_EN_MASK, 0); > > - if (ret < 0) { > > - dev_err(cs35l41->dev, "Write CS35L41_PWR_CTRL2 failed: %d\n", ret); > > - goto err; > > - } > > - > > - ret = regmap_update_bits(cs35l41->regmap, CS35L41_AMP_GAIN_CTRL, > > - CS35L41_AMP_GAIN_PCM_MASK, 0); > > - if (ret < 0) { > > - dev_err(cs35l41->dev, "Write CS35L41_AMP_GAIN_CTRL failed: %d\n", ret); > > - goto err; > > - } > > Sorry for not spotting earlier but just noticed these two writes > are update bits, so you shouldn't just be setting the values to > zero in the patch you just want to clear the relevant bit. > > Thanks, > Charles > Hi, sorry, that was intentional. This patch is also disabling other parts of the amp and setting all gains to zero. I will update the commit message to reflect that. Thanks Lucas
diff --git a/sound/soc/codecs/cs35l41-lib.c b/sound/soc/codecs/cs35l41-lib.c index dc5f502447a2..1387553afd3c 100644 --- a/sound/soc/codecs/cs35l41-lib.c +++ b/sound/soc/codecs/cs35l41-lib.c @@ -46,7 +46,7 @@ static const struct reg_default cs35l41_reg[] = { { CS35L41_CLASSH_CFG, 0x000B0405 }, { CS35L41_WKFET_CFG, 0x00000111 }, { CS35L41_NG_CFG, 0x00000033 }, - { CS35L41_AMP_GAIN_CTRL, 0x00000273 }, + { CS35L41_AMP_GAIN_CTRL, 0x00000000 }, { CS35L41_GPIO1_CTRL1, 0xE1000001 }, { CS35L41_GPIO2_CTRL1, 0xE1000001 }, { CS35L41_MIXER_NGATE_CFG, 0x00000000 }, diff --git a/sound/soc/codecs/cs35l41.c b/sound/soc/codecs/cs35l41.c index aa57c59b334d..4ed7490cab95 100644 --- a/sound/soc/codecs/cs35l41.c +++ b/sound/soc/codecs/cs35l41.c @@ -1288,6 +1288,9 @@ static const struct reg_sequence cs35l41_reva0_errata_patch[] = { { CS35L41_DSP1_XM_ACCEL_PL0_PRI, 0x00000000 }, { 0x00000040, 0x0000CCCC }, { 0x00000040, 0x00003333 }, + { CS35L41_DSP1_CCM_CORE_CTRL, 0x00000000 }, + { CS35L41_PWR_CTRL2, 0x00000000 }, + { CS35L41_AMP_GAIN_CTRL, 0x00000000 }, }; static const struct reg_sequence cs35l41_revb0_errata_patch[] = { @@ -1301,6 +1304,9 @@ static const struct reg_sequence cs35l41_revb0_errata_patch[] = { { CS35L41_DSP1_XM_ACCEL_PL0_PRI, 0x00000000 }, { 0x00000040, 0x0000CCCC }, { 0x00000040, 0x00003333 }, + { CS35L41_DSP1_CCM_CORE_CTRL, 0x00000000 }, + { CS35L41_PWR_CTRL2, 0x00000000 }, + { CS35L41_AMP_GAIN_CTRL, 0x00000000 }, }; static const struct reg_sequence cs35l41_revb2_errata_patch[] = { @@ -1314,6 +1320,9 @@ static const struct reg_sequence cs35l41_revb2_errata_patch[] = { { CS35L41_DSP1_XM_ACCEL_PL0_PRI, 0x00000000 }, { 0x00000040, 0x0000CCCC }, { 0x00000040, 0x00003333 }, + { CS35L41_DSP1_CCM_CORE_CTRL, 0x00000000 }, + { CS35L41_PWR_CTRL2, 0x00000000 }, + { CS35L41_AMP_GAIN_CTRL, 0x00000000 }, }; static const struct reg_sequence cs35l41_fs_errata_patch[] = { @@ -1550,26 +1559,6 @@ int cs35l41_probe(struct cs35l41_private *cs35l41, goto err; } - ret = regmap_write(cs35l41->regmap, CS35L41_DSP1_CCM_CORE_CTRL, 0); - if (ret < 0) { - dev_err(cs35l41->dev, "Write CCM_CORE_CTRL failed: %d\n", ret); - goto err; - } - - ret = regmap_update_bits(cs35l41->regmap, CS35L41_PWR_CTRL2, - CS35L41_AMP_EN_MASK, 0); - if (ret < 0) { - dev_err(cs35l41->dev, "Write CS35L41_PWR_CTRL2 failed: %d\n", ret); - goto err; - } - - ret = regmap_update_bits(cs35l41->regmap, CS35L41_AMP_GAIN_CTRL, - CS35L41_AMP_GAIN_PCM_MASK, 0); - if (ret < 0) { - dev_err(cs35l41->dev, "Write CS35L41_AMP_GAIN_CTRL failed: %d\n", ret); - goto err; - } - ret = cs35l41_set_pdata(cs35l41); if (ret < 0) { dev_err(cs35l41->dev, "Set pdata failed: %d\n", ret);
ASoC and HDA systems for all revisions of CS35L41 will benefit from having this initialization, so add it to reg_sequence of each revision Signed-off-by: Lucas Tanure <tanureal@opensource.cirrus.com> --- sound/soc/codecs/cs35l41-lib.c | 2 +- sound/soc/codecs/cs35l41.c | 29 +++++++++-------------------- 2 files changed, 10 insertions(+), 21 deletions(-)