Linux Sound subsystem development
 help / color / mirror / Atom feed
From: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
To: Mark Brown <broonie@kernel.org>,
	Liam Girdwood <lgirdwood@gmail.com>,
	Oder Chiou <oder_chiou@realtek.com>,
	Shuming Fan <shumingf@realtek.com>, Jack Yu <jack.yu@realtek.com>,
	Derek Fang <derek.fang@realtek.com>
Cc: Bard Liao <yung-chuan.liao@linux.intel.com>,
	linux-sound@vger.kernel.org, stable@vger.kernel.org
Subject: [PATCH 00/17] ASoC: Realtek codecs: sort the reg_defaults tables
Date: Wed,  5 Aug 2026 12:02:23 +0300	[thread overview]
Message-ID: <20260805090240.16991-1-peter.ujfalusi@linux.intel.com> (raw)

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


             reply	other threads:[~2026-08-05  9:02 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-05  9:02 Peter Ujfalusi [this message]
2026-08-05  9:02 ` [PATCH 01/17] ASoC: rt274: sort the register default table Peter Ujfalusi
2026-08-05  9:02 ` [PATCH 02/17] ASoC: rt286: " Peter Ujfalusi
2026-08-05  9:02 ` [PATCH 03/17] ASoC: rt298: " Peter Ujfalusi
2026-08-05  9:02 ` [PATCH 04/17] ASoC: rt700: drop duplicate reg_default entry Peter Ujfalusi
2026-08-05  9:02 ` [PATCH 05/17] ASoC: rt700: sort the register default table Peter Ujfalusi
2026-08-05  9:02 ` [PATCH 06/17] ASoC: rt711: " Peter Ujfalusi
2026-08-05  9:02 ` [PATCH 07/17] ASoC: rt711-sdca: sort the register default tables Peter Ujfalusi
2026-08-05  9:02 ` [PATCH 08/17] ASoC: rt712-sdca-dmic: sort the register default table Peter Ujfalusi
2026-08-05  9:02 ` [PATCH 09/17] ASoC: rt712-sdca-sdw: " Peter Ujfalusi
2026-08-05  9:02 ` [PATCH 10/17] ASoC: rt715: " Peter Ujfalusi
2026-08-05  9:02 ` [PATCH 11/17] ASoC: rt715-sdca: drop duplicate reg_default entries Peter Ujfalusi
2026-08-05  9:02 ` [PATCH 12/17] ASoC: rt715-sdca: sort the register default tables Peter Ujfalusi
2026-08-05  9:02 ` [PATCH 13/17] ASoC: rt721-sdca-sdw: sort the register default table Peter Ujfalusi
2026-08-05  9:02 ` [PATCH 14/17] ASoC: rt1017-sdca-sdw: " Peter Ujfalusi
2026-08-05  9:02 ` [PATCH 15/17] ASoC: rt1316-sdw: " Peter Ujfalusi
2026-08-05  9:02 ` [PATCH 16/17] ASoC: rt1318: " Peter Ujfalusi
2026-08-05  9:02 ` [PATCH 17/17] ASoC: rt1318-sdw: " Peter Ujfalusi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260805090240.16991-1-peter.ujfalusi@linux.intel.com \
    --to=peter.ujfalusi@linux.intel.com \
    --cc=broonie@kernel.org \
    --cc=derek.fang@realtek.com \
    --cc=jack.yu@realtek.com \
    --cc=lgirdwood@gmail.com \
    --cc=linux-sound@vger.kernel.org \
    --cc=oder_chiou@realtek.com \
    --cc=shumingf@realtek.com \
    --cc=stable@vger.kernel.org \
    --cc=yung-chuan.liao@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox