[PATCH 00/17] ASoC: Realtek codecs: sort the reg_defaults tables
Peter Ujfalusi <[email protected]> Wed, 5 Aug 2026 12:02:23 +0300
| Newsgroups | org.kernel.vger.linux-sound,org.kernel.vger.stable |
|---|---|
| Message-ID | <[email protected]> |
Hi,
reg_defaults must be sorted by ascending register address as
regcache_lookup_reg() locates the entries in it with bsearch(), see commit
fd80df352ba1 ("regcache: Add support for sorting defaults arrays").
These tables have entries which are out of order, so the binary search does
not find part of them. For those registers regcache_reg_needs_sync()
cannot compare the cached value against the default and reports that a sync
is needed, so they are written to the device on every regcache_sync() even
when they were never touched.
On a RT712-VA this is not silent: the MIC_ARRAY function does not exist on
that part, so the extra writes are NAKed by the codec and the bus driver
reports
soundwire_intel.link.0: Msg ignored for Slave 6 (for addr: 0x8e00)
for every resume. For the other tables the extra writes are accepted and
only cost bus bandwidth on every runtime resume.
The sorting patches only reorder the existing entries, the text of every
entry is kept verbatim and no default value is changed. Each table was
verified by evaluating the register addresses and replaying lib/bsearch.c
on them.
Entries not reachable by the binary search, per table:
rt274_reg 7 (of 33)
rt286_reg 7 (of 39)
rt298_reg 7 (of 39)
rt700_reg_defaults 6 (of 320)
rt711_reg_defaults 5 (of 269)
rt711_sdca_reg_defaults 1 (of 54)
rt711_sdca_mbq_defaults 2 (of 25)
rt712_sdca_dmic_reg_defaults 3 (of 42)
rt712_sdca_reg_defaults 4 (of 19)
rt715_reg_defaults 25 (of 323)
rt715_reg_defaults_sdca 7 (of 78)
rt715_mbq_reg_defaults_sdca 1 (of 32)
rt721_sdca_reg_defaults 12 (of 41)
rt1017_sdca_reg_defaults 4 (of 110)
rt1316_reg_defaults 1 (of 47)
rt1318_reg 2 (of 142)
rt1318_reg_defaults 3 (of 81)
rt700 and rt715-sdca also have entries listed twice, those are dropped in
separate patches first so that the sorting patches are pure reorders.
Found by an audit of all reg_defaults tables under sound/. Other codec
drivers have unsorted reg_defaults too, those are not addressed here.
Regards,
Peter
Peter Ujfalusi (17):
ASoC: rt274: sort the register default table
ASoC: rt286: sort the register default table
ASoC: rt298: sort the register default table
ASoC: rt700: drop duplicate reg_default entry
ASoC: rt700: sort the register default table
ASoC: rt711: sort the register default table
ASoC: rt711-sdca: sort the register default tables
ASoC: rt712-sdca-dmic: sort the register default table
ASoC: rt712-sdca-sdw: sort the register default table
ASoC: rt715: sort the register default table
ASoC: rt715-sdca: drop duplicate reg_default entries
ASoC: rt715-sdca: sort the register default tables
ASoC: rt721-sdca-sdw: sort the register default table
ASoC: rt1017-sdca-sdw: sort the register default table
ASoC: rt1316-sdw: sort the register default table
ASoC: rt1318: sort the register default table
ASoC: rt1318-sdw: sort the register default table
sound/soc/codecs/rt1017-sdca-sdw.h | 10 +++++-----
sound/soc/codecs/rt1316-sdw.c | 2 +-
sound/soc/codecs/rt1318-sdw.c | 2 +-
sound/soc/codecs/rt1318.c | 4 ++--
sound/soc/codecs/rt274.c | 8 ++++----
sound/soc/codecs/rt286.c | 12 +++++------
sound/soc/codecs/rt298.c | 12 +++++------
sound/soc/codecs/rt700-sdw.h | 11 +++++-----
sound/soc/codecs/rt711-sdca-sdw.h | 6 +++---
sound/soc/codecs/rt711-sdw.h | 10 +++++-----
sound/soc/codecs/rt712-sdca-dmic.h | 6 ++++--
sound/soc/codecs/rt712-sdca-sdw.h | 11 +++++-----
sound/soc/codecs/rt715-sdca-sdw.h | 12 ++++-------
sound/soc/codecs/rt715-sdw.h | 32 +++++++++++++++---------------
sound/soc/codecs/rt721-sdca-sdw.h | 28 +++++++++++++-------------
15 files changed, 82 insertions(+), 84 deletions(-)
base-commit: 05eebef3c7b2e8595fdd1bd46912aac9c1de8587
--
2.55.0