Skip to content

Commit

Permalink
ASoC: rt1308-sdw: fix random louder sound
Browse files Browse the repository at this point in the history
This patch uses a vendor register to check whether the system hibernated ever.
The driver will only set the preset when the driver brings up or the system hibernated.
It will avoid the unknown issue that makes the speaker output louder and can't control the volume.

Signed-off-by: Shuming Fan <shumingf@realtek.com
Link: https://lore.kernel.org/r/20230811093822.37573-1-shumingf@realtek.com
Signed-off-by: Mark Brown <broonie@kernel.org
  • Loading branch information
Shuming Fan authored and Mark Brown committed Aug 13, 2023
1 parent c1f848f commit 37aba31
Showing 1 changed file with 12 additions and 1 deletion.
13 changes: 12 additions & 1 deletion sound/soc/codecs/rt1308-sdw.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ static bool rt1308_volatile_register(struct device *dev, unsigned int reg)
case 0x300a:
case 0xc000:
case 0xc710:
case 0xcf01:
case 0xc860 ... 0xc863:
case 0xc870 ... 0xc873:
return true;
Expand Down Expand Up @@ -213,7 +214,7 @@ static int rt1308_io_init(struct device *dev, struct sdw_slave *slave)
{
struct rt1308_sdw_priv *rt1308 = dev_get_drvdata(dev);
int ret = 0;
unsigned int tmp;
unsigned int tmp, hibernation_flag;

if (rt1308->hw_init)
return 0;
Expand Down Expand Up @@ -242,6 +243,10 @@ static int rt1308_io_init(struct device *dev, struct sdw_slave *slave)

pm_runtime_get_noresume(&slave->dev);

regmap_read(rt1308->regmap, 0xcf01, &hibernation_flag);
if ((hibernation_flag != 0x00) && rt1308->first_hw_init)
goto _preset_ready_;

/* sw reset */
regmap_write(rt1308->regmap, RT1308_SDW_RESET, 0);

Expand Down Expand Up @@ -282,6 +287,12 @@ static int rt1308_io_init(struct device *dev, struct sdw_slave *slave)
regmap_write(rt1308->regmap, 0xc100, 0xd7);
regmap_write(rt1308->regmap, 0xc101, 0xd7);

/* apply BQ params */
rt1308_apply_bq_params(rt1308);

regmap_write(rt1308->regmap, 0xcf01, 0x01);

_preset_ready_:
if (rt1308->first_hw_init) {
regcache_cache_bypass(rt1308->regmap, false);
regcache_mark_dirty(rt1308->regmap);
Expand Down

0 comments on commit 37aba31

Please sign in to comment.