* [PATCH 1/2] regmap: core: Provide regmap_can_raw_write() operation @ 2013-03-27 13:06 Mark Brown 2013-03-27 13:06 ` [PATCH 2/2] regmap: cache: Use raw I/O to sync rbtrees if we can Mark Brown 0 siblings, 1 reply; 2+ messages in thread From: Mark Brown @ 2013-03-27 13:06 UTC (permalink / raw) To: linux-kernel; +Cc: Mark Brown Mainly useful internally but exported since this is a public API that's being checked for. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> --- drivers/base/regmap/regmap.c | 15 ++++++++++++--- include/linux/regmap.h | 1 + 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c index 9174c9d..9ab1e1f 100644 --- a/drivers/base/regmap/regmap.c +++ b/drivers/base/regmap/regmap.c @@ -1097,6 +1097,17 @@ int _regmap_raw_write(struct regmap *map, unsigned int reg, return ret; } +/** + * regmap_can_raw_write - Test if regmap_raw_write() is supported + * + * @map: Map to check. + */ +bool regmap_can_raw_write(struct regmap *map) +{ + return map->bus && map->format.format_val && map->format.format_reg; +} +EXPORT_SYMBOL_GPL(regmap_can_raw_write); + static int _regmap_bus_formatted_write(void *context, unsigned int reg, unsigned int val) { @@ -1220,12 +1231,10 @@ int regmap_raw_write(struct regmap *map, unsigned int reg, { int ret; - if (!map->bus) + if (!regmap_can_raw_write(map)) return -EINVAL; if (val_len % map->format.val_bytes) return -EINVAL; - if (reg % map->reg_stride) - return -EINVAL; map->lock(map->lock_arg); diff --git a/include/linux/regmap.h b/include/linux/regmap.h index bf77dfd..02d84e2 100644 --- a/include/linux/regmap.h +++ b/include/linux/regmap.h @@ -389,6 +389,7 @@ int regmap_update_bits_check(struct regmap *map, unsigned int reg, bool *change); int regmap_get_val_bytes(struct regmap *map); int regmap_async_complete(struct regmap *map); +bool regmap_can_raw_write(struct regmap *map); int regcache_sync(struct regmap *map); int regcache_sync_region(struct regmap *map, unsigned int min, -- 1.7.10.4 ^ permalink raw reply [flat|nested] 2+ messages in thread
* [PATCH 2/2] regmap: cache: Use raw I/O to sync rbtrees if we can 2013-03-27 13:06 [PATCH 1/2] regmap: core: Provide regmap_can_raw_write() operation Mark Brown @ 2013-03-27 13:06 ` Mark Brown 0 siblings, 0 replies; 2+ messages in thread From: Mark Brown @ 2013-03-27 13:06 UTC (permalink / raw) To: linux-kernel; +Cc: Mark Brown This will bring no meaningful benefit by itself, it is done as a separate commit to aid bisection if there are problems with the following commits adding support for coalescing adjacent writes. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> --- drivers/base/regmap/regcache-rbtree.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/drivers/base/regmap/regcache-rbtree.c b/drivers/base/regmap/regcache-rbtree.c index 792a760..382a6de 100644 --- a/drivers/base/regmap/regcache-rbtree.c +++ b/drivers/base/regmap/regcache-rbtree.c @@ -55,6 +55,12 @@ static unsigned int regcache_rbtree_get_register(struct regmap *map, return regcache_get_val(map, rbnode->block, idx); } +static const void *regcache_rbtree_get_reg_addr(struct regmap *map, + struct regcache_rbtree_node *rbnode, unsigned int idx) +{ + return regcache_get_val_addr(map, rbnode->block, idx); +} + static void regcache_rbtree_set_register(struct regmap *map, struct regcache_rbtree_node *rbnode, unsigned int idx, unsigned int val) @@ -442,6 +448,7 @@ static int regcache_rbtree_sync(struct regmap *map, unsigned int min, struct regcache_rbtree_node *rbnode; unsigned int regtmp; unsigned int val; + const void *addr; int ret; int i, base, end; @@ -480,7 +487,17 @@ static int regcache_rbtree_sync(struct regmap *map, unsigned int min, continue; map->cache_bypass = 1; - ret = _regmap_write(map, regtmp, val); + + if (regmap_can_raw_write(map)) { + addr = regcache_rbtree_get_reg_addr(map, + rbnode, i); + ret = _regmap_raw_write(map, regtmp, addr, + map->format.val_bytes, + false); + } else { + ret = _regmap_write(map, regtmp, val); + } + map->cache_bypass = 0; if (ret) return ret; -- 1.7.10.4 ^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2013-03-27 13:06 UTC | newest] Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2013-03-27 13:06 [PATCH 1/2] regmap: core: Provide regmap_can_raw_write() operation Mark Brown 2013-03-27 13:06 ` [PATCH 2/2] regmap: cache: Use raw I/O to sync rbtrees if we can Mark Brown
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®