mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 17:47:41 +02:00
ASoC: codecs: tas675x: use READ_ONCE for params to be used concurrently
active_playback_dais and active_capture_dais are written atomically via
set_bit()/clear_bit() and can be read concurrently from the
fault_check_work delayed work handler.
fault_check_work already uses READ_ONCE; extend the same guard to all other
reads in tas675x_hw_params() and tas675x_mute_stream().
Fixes: 133c81f844 ("ASoC: codecs: Add TAS67524 quad-channel audio amplifier driver")
Signed-off-by: Sen Wang <sen@ti.com>
Link: https://patch.msgid.link/20260630183126.2588322-2-sen@ti.com
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
dc59e4fea9
commit
12272cb1b2
|
|
@ -1133,7 +1133,7 @@ static int tas675x_hw_params(struct snd_pcm_substream *substream,
|
|||
* Single clock domain: SDIN and SDOUT share one SCLK/FSYNC pair,
|
||||
* so all active DAIs must use the same sample rate.
|
||||
*/
|
||||
if ((tas->active_playback_dais || tas->active_capture_dais) &&
|
||||
if ((READ_ONCE(tas->active_playback_dais) || READ_ONCE(tas->active_capture_dais)) &&
|
||||
tas->rate && tas->rate != rate) {
|
||||
dev_err(component->dev,
|
||||
"Rate %u conflicts with active rate %u\n",
|
||||
|
|
@ -1397,14 +1397,14 @@ static int tas675x_mute_stream(struct snd_soc_dai *dai, int mute, int direction)
|
|||
set_bit(dai->id, &tas->active_playback_dais);
|
||||
|
||||
/* Last playback stream */
|
||||
if (mute && !tas->active_playback_dais) {
|
||||
if (mute && !READ_ONCE(tas->active_playback_dais)) {
|
||||
ret = tas675x_set_state_all(tas, TAS675X_STATE_SLEEP_BOTH);
|
||||
regmap_read(tas->regmap, TAS675X_CLK_FAULT_LATCHED_REG, &discard);
|
||||
return ret;
|
||||
}
|
||||
|
||||
return tas675x_set_state_all(tas,
|
||||
tas->active_playback_dais ?
|
||||
READ_ONCE(tas->active_playback_dais) ?
|
||||
TAS675X_STATE_PLAY_BOTH :
|
||||
TAS675X_STATE_SLEEP_BOTH);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user