]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ASoC: cs35l56: Fix illegal writes to OTP_MEM registers
authorRichard Fitzgerald <rf@opensource.cirrus.com>
Tue, 28 Apr 2026 11:52:28 +0000 (12:52 +0100)
committerMark Brown <broonie@kernel.org>
Tue, 28 Apr 2026 23:41:14 +0000 (08:41 +0900)
Mark the OTP_MEM registers as volatile so that regcache_sync() will not
attempt to write to them.

These registers hold a constant, and originally they were marked as
readable non-volatile so that this value would be read into the regmap
cache. The problem with this is regcache_sync() issues a write for any
cached register that does not have a reg_default.

Though these registers are constants and writing them in normal use
cannot change OTP, it is illegal for the host to write to them.

Fixes: e1830f66f6c6 ("ASoC: cs35l56: Add helper functions for amp calibration")
Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
Link: https://patch.msgid.link/20260428115228.158252-1-rf@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/cs35l56-shared.c

index e05d975ba7945b30b487f56bf6ba147899655d04..033e56d5e9db4ae848c5e61dde9457721923ce6d 100644 (file)
@@ -108,8 +108,6 @@ int cs35l56_set_patch(struct cs35l56_base *cs35l56_base)
 EXPORT_SYMBOL_NS_GPL(cs35l56_set_patch, "SND_SOC_CS35L56_SHARED");
 
 static const struct reg_default cs35l56_reg_defaults[] = {
-       /* no defaults for OTP_MEM - first read populates cache */
-
        { CS35L56_ASP1_ENABLES1,                0x00000000 },
        { CS35L56_ASP1_CONTROL1,                0x00000028 },
        { CS35L56_ASP1_CONTROL2,                0x18180200 },
@@ -138,8 +136,6 @@ static const struct reg_default cs35l56_reg_defaults[] = {
 };
 
 static const struct reg_default cs35l63_reg_defaults[] = {
-       /* no defaults for OTP_MEM - first read populates cache */
-
        { CS35L56_ASP1_ENABLES1,                0x00000000 },
        { CS35L56_ASP1_CONTROL1,                0x00000028 },
        { CS35L56_ASP1_CONTROL2,                0x18180200 },
@@ -282,6 +278,9 @@ static bool cs35l56_common_volatile_reg(unsigned int reg)
        case CS35L56_GLOBAL_ENABLES:               /* owned by firmware */
        case CS35L56_BLOCK_ENABLES:                /* owned by firmware */
        case CS35L56_BLOCK_ENABLES2:               /* owned by firmware */
+       case CS35L56_OTP_MEM_53:
+       case CS35L56_OTP_MEM_54:
+       case CS35L56_OTP_MEM_55:
        case CS35L56_SYNC_GPIO1_CFG ... CS35L56_ASP2_DIO_GPIO13_CFG:
        case CS35L56_UPDATE_REGS:
        case CS35L56_REFCLK_INPUT:                 /* owned by firmware */