From: Mark Brown Date: Fri, 24 Mar 2023 22:58:42 +0000 (+0000) Subject: regmap: Support paging for buses with reg_read()/reg_write() X-Git-Tag: v6.6.7~3025^2~9 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f18ee501e233a2b830a0c84a2e780ab02d946c04;p=platform%2Fkernel%2Flinux-starfive.git 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 Link: https://lore.kernel.org/r/20230324-regmap-reg-read-write-page-v1-1-1fbc0dac67ae@kernel.org --- diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c index a4e4367..473b65b 100644 --- a/drivers/base/regmap/regmap.c +++ b/drivers/base/regmap/regmap.c @@ -1945,6 +1945,15 @@ static int _regmap_bus_reg_write(void *context, unsigned int reg, unsigned int val) { struct regmap *map = context; + struct regmap_range_node *range; + int ret; + + range = _regmap_range_lookup(map, reg); + if (range) { + ret = _regmap_select_page(map, ®, range, 1); + if (ret != 0) + return ret; + } reg = regmap_reg_addr(map, reg); 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, unsigned int *val) { struct regmap *map = context; + struct regmap_range_node *range; + int ret; + + range = _regmap_range_lookup(map, reg); + if (range) { + ret = _regmap_select_page(map, ®, range, 1); + if (ret != 0) + return ret; + } reg = regmap_reg_addr(map, reg); return map->bus->reg_read(map->bus_context, reg, val);