Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

regmap: slimbus: add support to multi read/write

SLIMbus supports upto 16 bytes in value management messages,
so add support to read/writes upto 16 bytes.

This also removes redundant single register reg_read/reg_write.

Also useful for paged register access on SLIMbus interfaced codecs.

Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: Mark Brown <broonie@kernel.org>

authored by

Srinivas Kandagatla and committed by
Mark Brown
e76ad18b ce397d21

+7 -16
+7 -16
drivers/base/regmap/regmap-slimbus.c
··· 7 7 8 8 #include "internal.h" 9 9 10 - static int regmap_slimbus_byte_reg_read(void *context, unsigned int reg, 11 - unsigned int *val) 10 + static int regmap_slimbus_write(void *context, const void *data, size_t count) 12 11 { 13 12 struct slim_device *sdev = context; 14 - int v; 15 13 16 - v = slim_readb(sdev, reg); 17 - 18 - if (v < 0) 19 - return v; 20 - 21 - *val = v; 22 - 23 - return 0; 14 + return slim_write(sdev, *(u16 *)data, count - 2, (u8 *)data + 2); 24 15 } 25 16 26 - static int regmap_slimbus_byte_reg_write(void *context, unsigned int reg, 27 - unsigned int val) 17 + static int regmap_slimbus_read(void *context, const void *reg, size_t reg_size, 18 + void *val, size_t val_size) 28 19 { 29 20 struct slim_device *sdev = context; 30 21 31 - return slim_writeb(sdev, reg, val); 22 + return slim_read(sdev, *(u16 *)reg, val_size, val); 32 23 } 33 24 34 25 static struct regmap_bus regmap_slimbus_bus = { 35 - .reg_write = regmap_slimbus_byte_reg_write, 36 - .reg_read = regmap_slimbus_byte_reg_read, 26 + .write = regmap_slimbus_write, 27 + .read = regmap_slimbus_read, 37 28 .reg_format_endian_default = REGMAP_ENDIAN_LITTLE, 38 29 .val_format_endian_default = REGMAP_ENDIAN_LITTLE, 39 30 };