Skip to content
This repository was archived by the owner on Nov 8, 2023. It is now read-only.

Commit 611b7eb

Browse files
Jim Wylderbroonie
authored andcommitted
regmap-i2c: Subtract reg size from max_write
Currently, when an adapter defines a max_write_len quirk, the data will be chunked into data sizes equal to the max_write_len quirk value. But the payload will be increased by the size of the register address before transmission. The resulting value always ends up larger than the limit set by the quirk. Avoid this error by setting regmap's max_write to the quirk's max_write_len minus the number of bytes for the register and padding. This allows the chunking to work correctly for this limited case without impacting other use-cases. Signed-off-by: Jim Wylder <jwylder@google.com> Link: https://msgid.link/r/20240523211437.2839942-1-jwylder@google.com Signed-off-by: Mark Brown <broonie@kernel.org>
1 parent 1613e60 commit 611b7eb

File tree

1 file changed

+2
-1
lines changed

1 file changed

+2
-1
lines changed

drivers/base/regmap/regmap-i2c.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,8 @@ static const struct regmap_bus *regmap_get_i2c_bus(struct i2c_client *i2c,
350350

351351
if (quirks->max_write_len &&
352352
(bus->max_raw_write == 0 || bus->max_raw_write > quirks->max_write_len))
353-
max_write = quirks->max_write_len;
353+
max_write = quirks->max_write_len -
354+
(config->reg_bits + config->pad_bits) / BITS_PER_BYTE;
354355

355356
if (max_read || max_write) {
356357
ret_bus = kmemdup(bus, sizeof(*bus), GFP_KERNEL);

0 commit comments

Comments
 (0)