regmap: Question about devices with unequal register sizes

From: Daniel Mack
Date: Sat Feb 16 2013 - 12:04:16 EST

Hi Mark and everyone,

I'm writing a driver for an I2C audio codec which has an unusual
register map. The datasheet can be found here:

The register layout is described on page 26, and they call their
registers 'subaddresses'. Up to sub-address 0x1c, I see no problem
mapping that to a simple 8-bit regmap layout, but above that, access
gets trickier because registers change their sizes, which breaks the cache.

So for example, in order to set the 'Downmix input MUX register', the
host is expected to send the sub-address 0x21, followed by 4 consecutive
bytes containing the values. 0x21 is, however, not the correct offset in
the register cache, as 0x20 ('Input MUX register') is also 4 bytes in
size. Higher registers also have to be written in 20 byte blocks.

I thought about registering multiple regmaps with the i2c device, but
that turns out not to play well with ASoC, which always takes the first
regmap for the device.

Are ranges within in the regmap_config what I want here? I haven't yet
figured how to use them accordingly though.

Thanks for sharing any ideas.

Best regards,
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at
Please read the FAQ at