| From 120f3e6ff76209ee2f62a64e5e7e9d70274df42b Mon Sep 17 00:00:00 2001 |
| From: Johan Hovold <johan@kernel.org> |
| Date: Fri, 2 Jan 2026 12:14:12 +0100 |
| Subject: ASoC: codecs: wsa884x: fix codec initialisation |
| |
| From: Johan Hovold <johan@kernel.org> |
| |
| commit 120f3e6ff76209ee2f62a64e5e7e9d70274df42b upstream. |
| |
| The soundwire update_status() callback may be called multiple times with |
| the same ATTACHED status but initialisation should only be done when |
| transitioning from UNATTACHED to ATTACHED. |
| |
| Fix the inverted hw_init flag which was set to false instead of true |
| after initialisation which defeats its purpose and may result in |
| repeated unnecessary initialisation. |
| |
| Similarly, the initial state of the flag was also inverted so that the |
| codec would only be initialised and brought out of regmap cache only |
| mode if its status first transitions to UNATTACHED. |
| |
| Fixes: aa21a7d4f68a ("ASoC: codecs: wsa884x: Add WSA884x family of speakers") |
| Cc: stable@vger.kernel.org # 6.5 |
| Cc: Krzysztof Kozlowski <krzk@kernel.org> |
| Signed-off-by: Johan Hovold <johan@kernel.org> |
| Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com> |
| Tested-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com> |
| Reviewed-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com> |
| Link: https://patch.msgid.link/20260102111413.9605-4-johan@kernel.org |
| Signed-off-by: Mark Brown <broonie@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| sound/soc/codecs/wsa884x.c | 3 +-- |
| 1 file changed, 1 insertion(+), 2 deletions(-) |
| |
| --- a/sound/soc/codecs/wsa884x.c |
| +++ b/sound/soc/codecs/wsa884x.c |
| @@ -1534,7 +1534,7 @@ static void wsa884x_init(struct wsa884x_ |
| |
| wsa884x_set_gain_parameters(wsa884x); |
| |
| - wsa884x->hw_init = false; |
| + wsa884x->hw_init = true; |
| } |
| |
| static int wsa884x_update_status(struct sdw_slave *slave, |
| @@ -2109,7 +2109,6 @@ static int wsa884x_probe(struct sdw_slav |
| |
| /* Start in cache-only until device is enumerated */ |
| regcache_cache_only(wsa884x->regmap, true); |
| - wsa884x->hw_init = true; |
| |
| if (IS_REACHABLE(CONFIG_HWMON)) { |
| struct device *hwmon; |