Skip to content

Commit 06f799f

Browse files
jmaneyrol-invnmehmetb0
authored andcommitted
iio: imu: inv_icm42600: add register caching in the regmap
BugLink: https://bugs.launchpad.net/bugs/2106770 Register caching is improving bus access a lot because of the register window bank setting. Previously, bank register was set for every register access. Now with caching, it happens only when changing bank which is very infrequent. Signed-off-by: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com> Link: https://lore.kernel.org/r/20240607081039.789079-1-inv.git-commit@tdk.com Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> (cherry picked from commit 50cfe81) [diewald: prerequisite for c0f866d iio: imu: inv_icm42600: fix spi burst write not supported] Signed-off-by: Manuel Diewald <manuel.diewald@canonical.com> Signed-off-by: Mehmet Basaran <mehmet.basaran@canonical.com>
1 parent e7b6419 commit 06f799f

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

drivers/iio/imu/inv_icm42600/inv_icm42600_core.c

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,56 @@ static const struct regmap_range_cfg inv_icm42600_regmap_ranges[] = {
3535
},
3636
};
3737

38+
static const struct regmap_range inv_icm42600_regmap_volatile_yes_ranges[] = {
39+
/* Sensor data registers */
40+
regmap_reg_range(0x001D, 0x002A),
41+
/* INT status, FIFO, APEX data */
42+
regmap_reg_range(0x002D, 0x0038),
43+
/* Signal path reset */
44+
regmap_reg_range(0x004B, 0x004B),
45+
/* FIFO lost packets */
46+
regmap_reg_range(0x006C, 0x006D),
47+
/* Timestamp value */
48+
regmap_reg_range(0x1062, 0x1064),
49+
};
50+
51+
static const struct regmap_range inv_icm42600_regmap_volatile_no_ranges[] = {
52+
regmap_reg_range(0x0000, 0x001C),
53+
regmap_reg_range(0x006E, 0x1061),
54+
regmap_reg_range(0x1065, 0x4FFF),
55+
};
56+
57+
static const struct regmap_access_table inv_icm42600_regmap_volatile_accesses[] = {
58+
{
59+
.yes_ranges = inv_icm42600_regmap_volatile_yes_ranges,
60+
.n_yes_ranges = ARRAY_SIZE(inv_icm42600_regmap_volatile_yes_ranges),
61+
.no_ranges = inv_icm42600_regmap_volatile_no_ranges,
62+
.n_no_ranges = ARRAY_SIZE(inv_icm42600_regmap_volatile_no_ranges),
63+
},
64+
};
65+
66+
static const struct regmap_range inv_icm42600_regmap_rd_noinc_no_ranges[] = {
67+
regmap_reg_range(0x0000, INV_ICM42600_REG_FIFO_DATA - 1),
68+
regmap_reg_range(INV_ICM42600_REG_FIFO_DATA + 1, 0x4FFF),
69+
};
70+
71+
static const struct regmap_access_table inv_icm42600_regmap_rd_noinc_accesses[] = {
72+
{
73+
.no_ranges = inv_icm42600_regmap_rd_noinc_no_ranges,
74+
.n_no_ranges = ARRAY_SIZE(inv_icm42600_regmap_rd_noinc_no_ranges),
75+
},
76+
};
77+
3878
const struct regmap_config inv_icm42600_regmap_config = {
79+
.name = "inv_icm42600",
3980
.reg_bits = 8,
4081
.val_bits = 8,
4182
.max_register = 0x4FFF,
4283
.ranges = inv_icm42600_regmap_ranges,
4384
.num_ranges = ARRAY_SIZE(inv_icm42600_regmap_ranges),
85+
.volatile_table = inv_icm42600_regmap_volatile_accesses,
86+
.rd_noinc_table = inv_icm42600_regmap_rd_noinc_accesses,
87+
.cache_type = REGCACHE_RBTREE,
4488
};
4589
EXPORT_SYMBOL_NS_GPL(inv_icm42600_regmap_config, IIO_ICM42600);
4690

0 commit comments

Comments
 (0)