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

iio: accel: adxl313: make use of regmap cache

Setup regmap cache to cache register configuration, reducing bus traffic
for repeated accesses to non volatile registers.

Reviewed-by: Andy Shevchenko <andy@kernel.org>
Signed-off-by: Lothar Rubusch <l.rubusch@gmail.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://patch.msgid.link/20250702230819.19353-2-l.rubusch@gmail.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

authored by

Lothar Rubusch and committed by
Jonathan Cameron
ec489d91 1a4deda6

+33
+3
drivers/iio/accel/adxl313.h
··· 22 22 #define ADXL313_REG_BW_RATE 0x2C 23 23 #define ADXL313_REG_POWER_CTL 0x2D 24 24 #define ADXL313_REG_INT_MAP 0x2F 25 + #define ADXL313_REG_INT_SOURCE 0x30 25 26 #define ADXL313_REG_DATA_FORMAT 0x31 26 27 #define ADXL313_REG_DATA_AXIS(index) (0x32 + ((index) * 2)) 27 28 #define ADXL313_REG_FIFO_CTL 0x38 ··· 54 53 extern const struct regmap_access_table adxl312_writable_regs_table; 55 54 extern const struct regmap_access_table adxl313_writable_regs_table; 56 55 extern const struct regmap_access_table adxl314_writable_regs_table; 56 + 57 + bool adxl313_is_volatile_reg(struct device *dev, unsigned int reg); 57 58 58 59 enum adxl313_device_type { 59 60 ADXL312,
+18
drivers/iio/accel/adxl313_core.c
··· 46 46 }; 47 47 EXPORT_SYMBOL_NS_GPL(adxl314_readable_regs_table, "IIO_ADXL313"); 48 48 49 + bool adxl313_is_volatile_reg(struct device *dev, unsigned int reg) 50 + { 51 + switch (reg) { 52 + case ADXL313_REG_DATA_AXIS(0): 53 + case ADXL313_REG_DATA_AXIS(1): 54 + case ADXL313_REG_DATA_AXIS(2): 55 + case ADXL313_REG_DATA_AXIS(3): 56 + case ADXL313_REG_DATA_AXIS(4): 57 + case ADXL313_REG_DATA_AXIS(5): 58 + case ADXL313_REG_FIFO_STATUS: 59 + case ADXL313_REG_INT_SOURCE: 60 + return true; 61 + default: 62 + return false; 63 + } 64 + } 65 + EXPORT_SYMBOL_NS_GPL(adxl313_is_volatile_reg, "IIO_ADXL313"); 66 + 49 67 static int adxl312_check_id(struct device *dev, 50 68 struct adxl313_data *data) 51 69 {
+6
drivers/iio/accel/adxl313_i2c.c
··· 21 21 .rd_table = &adxl312_readable_regs_table, 22 22 .wr_table = &adxl312_writable_regs_table, 23 23 .max_register = 0x39, 24 + .volatile_reg = adxl313_is_volatile_reg, 25 + .cache_type = REGCACHE_MAPLE, 24 26 }, 25 27 [ADXL313] = { 26 28 .reg_bits = 8, ··· 30 28 .rd_table = &adxl313_readable_regs_table, 31 29 .wr_table = &adxl313_writable_regs_table, 32 30 .max_register = 0x39, 31 + .volatile_reg = adxl313_is_volatile_reg, 32 + .cache_type = REGCACHE_MAPLE, 33 33 }, 34 34 [ADXL314] = { 35 35 .reg_bits = 8, ··· 39 35 .rd_table = &adxl314_readable_regs_table, 40 36 .wr_table = &adxl314_writable_regs_table, 41 37 .max_register = 0x39, 38 + .volatile_reg = adxl313_is_volatile_reg, 39 + .cache_type = REGCACHE_MAPLE, 42 40 }, 43 41 }; 44 42
+6
drivers/iio/accel/adxl313_spi.c
··· 24 24 .max_register = 0x39, 25 25 /* Setting bits 7 and 6 enables multiple-byte read */ 26 26 .read_flag_mask = BIT(7) | BIT(6), 27 + .volatile_reg = adxl313_is_volatile_reg, 28 + .cache_type = REGCACHE_MAPLE, 27 29 }, 28 30 [ADXL313] = { 29 31 .reg_bits = 8, ··· 35 33 .max_register = 0x39, 36 34 /* Setting bits 7 and 6 enables multiple-byte read */ 37 35 .read_flag_mask = BIT(7) | BIT(6), 36 + .volatile_reg = adxl313_is_volatile_reg, 37 + .cache_type = REGCACHE_MAPLE, 38 38 }, 39 39 [ADXL314] = { 40 40 .reg_bits = 8, ··· 46 42 .max_register = 0x39, 47 43 /* Setting bits 7 and 6 enables multiple-byte read */ 48 44 .read_flag_mask = BIT(7) | BIT(6), 45 + .volatile_reg = adxl313_is_volatile_reg, 46 + .cache_type = REGCACHE_MAPLE, 49 47 }, 50 48 }; 51 49