diff options
author | Shenghao Ding <shenghao-ding@ti.com> | 2023-08-17 17:32:56 +0800 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2023-08-17 13:09:12 +0100 |
commit | 3d521f9f3663ba7a22e56d339c6632f0ca787371 (patch) | |
tree | e41f8f42cc1a3171a53d4b4c6670b54a14cea04f | |
parent | 2d218b45848b92b03b220bf4d9bef29f058f866f (diff) | |
download | lwn-3d521f9f3663ba7a22e56d339c6632f0ca787371.tar.gz lwn-3d521f9f3663ba7a22e56d339c6632f0ca787371.zip |
ASoC: tas2781: fixed register access error when switching to other chips
fixed register access error when switching to other tas2781 -- refresh the page
inside regmap on the switched tas2781
Signed-off-by: Shenghao Ding <shenghao-ding@ti.com>
Link: https://lore.kernel.org/r/20230817093257.951-1-shenghao-ding@ti.com
Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r-- | sound/soc/codecs/tas2781-comlib.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/sound/soc/codecs/tas2781-comlib.c b/sound/soc/codecs/tas2781-comlib.c index a88c6c28a394..ffb26e4a7e2f 100644 --- a/sound/soc/codecs/tas2781-comlib.c +++ b/sound/soc/codecs/tas2781-comlib.c @@ -57,16 +57,17 @@ static int tasdevice_change_chn_book(struct tasdevice_priv *tas_priv, if (client->addr != tasdev->dev_addr) { client->addr = tasdev->dev_addr; - if (tasdev->cur_book == book) { - ret = regmap_write(map, - TASDEVICE_PAGE_SELECT, 0); - if (ret < 0) { - dev_err(tas_priv->dev, "%s, E=%d\n", - __func__, ret); - goto out; - } + /* All tas2781s share the same regmap, clear the page + * inside regmap once switching to another tas2781. + * Register 0 at any pages and any books inside tas2781 + * is the same one for page-switching. + */ + ret = regmap_write(map, TASDEVICE_PAGE_SELECT, 0); + if (ret < 0) { + dev_err(tas_priv->dev, "%s, E=%d\n", + __func__, ret); + goto out; } - goto out; } if (tasdev->cur_book != book) { |