Skip to content

Commit f18ee50

Browse files
committed
regmap: Support paging for buses with reg_read()/reg_write()
We don't currently support paging for regmaps where the I/O happens through bus provided reg_read() and reg_write() operatons, we simply ignore the range since nothing is wired up properly. Wire things up. Signed-off-by: Mark Brown <broonie@kernel.org> Link: https://lore.kernel.org/r/20230324-regmap-reg-read-write-page-v1-1-1fbc0dac67ae@kernel.org
1 parent 2d38e86 commit f18ee50

1 file changed

Lines changed: 18 additions & 0 deletions

File tree

drivers/base/regmap/regmap.c

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1945,6 +1945,15 @@ static int _regmap_bus_reg_write(void *context, unsigned int reg,
19451945
unsigned int val)
19461946
{
19471947
struct regmap *map = context;
1948+
struct regmap_range_node *range;
1949+
int ret;
1950+
1951+
range = _regmap_range_lookup(map, reg);
1952+
if (range) {
1953+
ret = _regmap_select_page(map, &reg, range, 1);
1954+
if (ret != 0)
1955+
return ret;
1956+
}
19481957

19491958
reg = regmap_reg_addr(map, reg);
19501959
return map->bus->reg_write(map->bus_context, reg, val);
@@ -2842,6 +2851,15 @@ static int _regmap_bus_reg_read(void *context, unsigned int reg,
28422851
unsigned int *val)
28432852
{
28442853
struct regmap *map = context;
2854+
struct regmap_range_node *range;
2855+
int ret;
2856+
2857+
range = _regmap_range_lookup(map, reg);
2858+
if (range) {
2859+
ret = _regmap_select_page(map, &reg, range, 1);
2860+
if (ret != 0)
2861+
return ret;
2862+
}
28452863

28462864
reg = regmap_reg_addr(map, reg);
28472865
return map->bus->reg_read(map->bus_context, reg, val);

0 commit comments

Comments
 (0)