Repository navigation
Conversation
The component probe resets the amp and reinitialises the register cache, which clears the SDOUT idle slot mask and the force-0 enable. The idle slot setup cached in the driver data survives the reset, though, so when the card binds again and set_tdm_idle() asks for the same mask and mode, it returns early and the force-0 enable is never written. set_bclk_ratio() writes the mask again but not the enable. On the J713 every rebind of the speaker card left the two amps that force their idle slots to zero without the enable, and the other two amps' voltage sense words then came back with the top bit set in about a quarter of the frames. The speaker protection daemon reads those as a voltage without current and holds the speakers at a safe level. Clear the cached setup after the reset, so that the next set_tdm_idle() writes it. Signed-off-by: Erik Bourget <erik@ebourget.net>
This was referenced Nov 1, 2026
Contributor
Author
|
Superseded by #820, where this is commit 19, unchanged. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
After the speaker card binds a second time, the amps that fill idle TDM slots lose their force-0 enable, and the other amps' sense words go bad. This writes the idle slot setup again after the reset the component probe does.
What happens
tas2764_codec_probe()resets the amp and reinitialises the register cache. That clears the SDOUT idle slot mask (SDOUT_HIZ_1..4) and the force-0 enable (SDOUT_HIZ_9bit 7). The idle slot setup cached in the driver data (idle_slot_config) survives the reset, though, because the module stays loaded. So when the card binds again,set_tdm_idle()is asked for the same mask and mode and returns early, and the enable is never written.set_bclk_ratio()writes the mask again, but not the enable.On the J713 the two amps with
dai-tdm-idle-mode = "zero"(left and right woofer, masks0xf0f0and0x0f0f) ended up with the masks set and the enable clear. The right woofer's and right tweeter's voltage sense words then came back with the top bit set in about a quarter of the frames. The speaker protection daemon read that as a voltage with no current, charged the worst case, and held the speakers at the card's safe level, so there was no audible sound.Any rebind triggers it. A plain
rmmod snd_soc_macaudio; modprobe snd_soc_macaudiois enough, as is reloadingsnd-soc-aopwith #759.The change
Clear
idle_slot_configright after the reset in the component probe, so the nextset_tdm_idle()writes the mask and the enable again. System sleep is unaffected: it keeps the cache and syncs it back.Testing (J713)
Reading
SDOUT_HIZ_9on the two idle-filling amps through the regmap debugfs:snd-soc-aopreload (with #759)0x800x000x000x800x800x80snd-soc-aopreload: the right woofer's and right tweeter's voltage channels each had about 11,700 of 48,000 words with the top bit set.--strictis clean;