[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