]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ASoC: cs35l56: Use reg_base to offset addresses on SoundWire
authorRichard Fitzgerald <rf@opensource.cirrus.com>
Tue, 19 May 2026 13:54:34 +0000 (14:54 +0100)
committerMark Brown <broonie@kernel.org>
Tue, 19 May 2026 13:59:53 +0000 (14:59 +0100)
Set the reg_base member of regmap_config for SoundWire so that
the regmap core will apply the 0x8000 offset to addresses, instead
of doing it within our low-level regmap read/write callbacks.

Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
Link: https://patch.msgid.link/20260519135435.479949-3-rf@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/cs35l56-sdw.c
sound/soc/codecs/cs35l56-shared.c

index d5b9e5f71de29dae52f78652d41c3c6c691da994..d9dcca1e952fe342e645c63ff843d61d9e4faedd 100644 (file)
@@ -59,8 +59,6 @@ static int cs35l56_sdw_slow_read(struct sdw_slave *peripheral, unsigned int reg,
 {
        int ret, i;
 
-       reg += CS35L56_SDW_ADDR_OFFSET;
-
        for (i = 0; i < val_size; i += sizeof(u32)) {
                /* Poll for bus bridge idle */
                ret = cs35l56_sdw_poll_mem_status(peripheral,
@@ -123,11 +121,9 @@ static int cs35l56_sdw_read(void *context, const void *reg_buf,
 
        reg = le32_to_cpu(*(const __le32 *)reg_buf);
 
-       if (cs35l56_is_otp_register(reg))
+       if (cs35l56_is_otp_register(reg - CS35L56_SDW_ADDR_OFFSET))
                return cs35l56_sdw_slow_read(peripheral, reg, buf8, val_size);
 
-       reg += CS35L56_SDW_ADDR_OFFSET;
-
        if (val_size == 4)
                return cs35l56_sdw_read_one(peripheral, reg, val_buf);
 
@@ -186,7 +182,6 @@ static int cs35l56_sdw_gather_write(void *context,
        int ret;
 
        reg = le32_to_cpu(*(const __le32 *)reg_buf);
-       reg += CS35L56_SDW_ADDR_OFFSET;
 
        if (val_size == 4)
                return cs35l56_sdw_write_one(peripheral, reg, src_be);
index 795e2764d67ec83f7a3cbe232af465f0c3916a7f..8e3538e28fade3641a66f2fde8394d09f02a4e8c 100644 (file)
@@ -1880,6 +1880,7 @@ EXPORT_SYMBOL_NS_GPL(cs35l56_regmap_spi, "SND_SOC_CS35L56_SHARED");
 
 const struct regmap_config cs35l56_regmap_sdw = {
        .reg_bits = 32,
+       .reg_base = 0x8000,
        .val_bits = 32,
        .reg_stride = 4,
        .reg_format_endian = REGMAP_ENDIAN_LITTLE,
@@ -1915,6 +1916,7 @@ const struct regmap_config cs35l63_regmap_sdw = {
        .reg_bits = 32,
        .val_bits = 32,
        .reg_stride = 4,
+       .reg_base = 0x8000,
        .reg_format_endian = REGMAP_ENDIAN_LITTLE,
        .val_format_endian = REGMAP_ENDIAN_BIG,
        .max_register = CS35L56_DSP1_PMEM_5114,