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

regmap: cache: Pass the map rather than the word size when updating values

It's more idiomatic to pass the map structure around and this means we
can use other bits of information from the map.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>

+39 -44
+4 -4
drivers/base/regmap/internal.h
··· 188 188 unsigned int reg, unsigned int value); 189 189 int regcache_sync(struct regmap *map); 190 190 191 - unsigned int regcache_get_val(const void *base, unsigned int idx, 192 - unsigned int word_size); 193 - bool regcache_set_val(void *base, unsigned int idx, 194 - unsigned int val, unsigned int word_size); 191 + unsigned int regcache_get_val(struct regmap *map, const void *base, 192 + unsigned int idx); 193 + bool regcache_set_val(struct regmap *map, void *base, unsigned int idx, 194 + unsigned int val); 195 195 int regcache_lookup_reg(struct regmap *map, unsigned int reg); 196 196 197 197 void regmap_async_complete_cb(struct regmap_async *async, int ret);
+2 -4
drivers/base/regmap/regcache-lzo.c
··· 260 260 ret = regcache_lzo_decompress_cache_block(map, lzo_block); 261 261 if (ret >= 0) 262 262 /* fetch the value from the cache */ 263 - *value = regcache_get_val(lzo_block->dst, blkpos, 264 - map->cache_word_size); 263 + *value = regcache_get_val(map, lzo_block->dst, blkpos); 265 264 266 265 kfree(lzo_block->dst); 267 266 /* restore the pointer and length of the compressed block */ ··· 303 304 } 304 305 305 306 /* write the new value to the cache */ 306 - if (regcache_set_val(lzo_block->dst, blkpos, value, 307 - map->cache_word_size)) { 307 + if (regcache_set_val(map, lzo_block->dst, blkpos, value)) { 308 308 kfree(lzo_block->dst); 309 309 goto out; 310 310 }
+25 -26
drivers/base/regmap/regcache-rbtree.c
··· 47 47 *top = rbnode->base_reg + ((rbnode->blklen - 1) * map->reg_stride); 48 48 } 49 49 50 - static unsigned int regcache_rbtree_get_register( 51 - struct regcache_rbtree_node *rbnode, unsigned int idx, 52 - unsigned int word_size) 50 + static unsigned int regcache_rbtree_get_register(struct regmap *map, 51 + struct regcache_rbtree_node *rbnode, unsigned int idx) 53 52 { 54 - return regcache_get_val(rbnode->block, idx, word_size); 53 + return regcache_get_val(map, rbnode->block, idx); 55 54 } 56 55 57 - static void regcache_rbtree_set_register(struct regcache_rbtree_node *rbnode, 58 - unsigned int idx, unsigned int val, 59 - unsigned int word_size) 56 + static void regcache_rbtree_set_register(struct regmap *map, 57 + struct regcache_rbtree_node *rbnode, 58 + unsigned int idx, unsigned int val) 60 59 { 61 - regcache_set_val(rbnode->block, idx, val, word_size); 60 + regcache_set_val(map, rbnode->block, idx, val); 62 61 } 63 62 64 63 static struct regcache_rbtree_node *regcache_rbtree_lookup(struct regmap *map, 65 - unsigned int reg) 64 + unsigned int reg) 66 65 { 67 66 struct regcache_rbtree_ctx *rbtree_ctx = map->cache; 68 67 struct rb_node *node; ··· 259 260 rbnode = regcache_rbtree_lookup(map, reg); 260 261 if (rbnode) { 261 262 reg_tmp = (reg - rbnode->base_reg) / map->reg_stride; 262 - *value = regcache_rbtree_get_register(rbnode, reg_tmp, 263 - map->cache_word_size); 263 + *value = regcache_rbtree_get_register(map, rbnode, reg_tmp); 264 264 } else { 265 265 return -ENOENT; 266 266 } ··· 268 270 } 269 271 270 272 271 - static int regcache_rbtree_insert_to_block(struct regcache_rbtree_node *rbnode, 273 + static int regcache_rbtree_insert_to_block(struct regmap *map, 274 + struct regcache_rbtree_node *rbnode, 272 275 unsigned int pos, unsigned int reg, 273 - unsigned int value, unsigned int word_size) 276 + unsigned int value) 274 277 { 275 278 u8 *blk; 276 279 277 280 blk = krealloc(rbnode->block, 278 - (rbnode->blklen + 1) * word_size, GFP_KERNEL); 281 + (rbnode->blklen + 1) * map->cache_word_size, 282 + GFP_KERNEL); 279 283 if (!blk) 280 284 return -ENOMEM; 281 285 282 286 /* insert the register value in the correct place in the rbnode block */ 283 - memmove(blk + (pos + 1) * word_size, 284 - blk + pos * word_size, 285 - (rbnode->blklen - pos) * word_size); 287 + memmove(blk + (pos + 1) * map->cache_word_size, 288 + blk + pos * map->cache_word_size, 289 + (rbnode->blklen - pos) * map->cache_word_size); 286 290 287 291 /* update the rbnode block, its size and the base register */ 288 292 rbnode->block = blk; ··· 292 292 if (!pos) 293 293 rbnode->base_reg = reg; 294 294 295 - regcache_rbtree_set_register(rbnode, pos, value, word_size); 295 + regcache_rbtree_set_register(map, rbnode, pos, value); 296 296 return 0; 297 297 } 298 298 ··· 314 314 rbnode = regcache_rbtree_lookup(map, reg); 315 315 if (rbnode) { 316 316 reg_tmp = (reg - rbnode->base_reg) / map->reg_stride; 317 - regcache_rbtree_set_register(rbnode, reg_tmp, value, 318 - map->cache_word_size); 317 + regcache_rbtree_set_register(map, rbnode, reg_tmp, value); 319 318 } else { 320 319 /* look for an adjacent register to the one we are about to add */ 321 320 for (node = rb_first(&rbtree_ctx->root); node; ··· 331 332 pos = i + 1; 332 333 else 333 334 pos = i; 334 - ret = regcache_rbtree_insert_to_block(rbnode_tmp, pos, 335 - reg, value, 336 - map->cache_word_size); 335 + ret = regcache_rbtree_insert_to_block(map, 336 + rbnode_tmp, 337 + pos, reg, 338 + value); 337 339 if (ret) 338 340 return ret; 339 341 rbtree_ctx->cached_rbnode = rbnode_tmp; ··· 357 357 kfree(rbnode); 358 358 return -ENOMEM; 359 359 } 360 - regcache_rbtree_set_register(rbnode, 0, value, map->cache_word_size); 360 + regcache_rbtree_set_register(map, rbnode, 0, value); 361 361 regcache_rbtree_insert(map, &rbtree_ctx->root, rbnode); 362 362 rbtree_ctx->cached_rbnode = rbnode; 363 363 } ··· 399 399 400 400 for (i = base; i < end; i++) { 401 401 regtmp = rbnode->base_reg + (i * map->reg_stride); 402 - val = regcache_rbtree_get_register(rbnode, i, 403 - map->cache_word_size); 402 + val = regcache_rbtree_get_register(map, rbnode, i); 404 403 405 404 /* Is this the hardware default? If so skip. */ 406 405 ret = regcache_lookup_reg(map, regtmp);
+8 -10
drivers/base/regmap/regcache.c
··· 58 58 59 59 /* calculate the size of reg_defaults */ 60 60 for (count = 0, i = 0; i < map->num_reg_defaults_raw; i++) { 61 - val = regcache_get_val(map->reg_defaults_raw, 62 - i, map->cache_word_size); 61 + val = regcache_get_val(map, map->reg_defaults_raw, i); 63 62 if (regmap_volatile(map, i * map->reg_stride)) 64 63 continue; 65 64 count++; ··· 74 75 /* fill the reg_defaults */ 75 76 map->num_reg_defaults = count; 76 77 for (i = 0, j = 0; i < map->num_reg_defaults_raw; i++) { 77 - val = regcache_get_val(map->reg_defaults_raw, 78 - i, map->cache_word_size); 78 + val = regcache_get_val(map, map->reg_defaults_raw, i); 79 79 if (regmap_volatile(map, i * map->reg_stride)) 80 80 continue; 81 81 map->reg_defaults[j].reg = i * map->reg_stride; ··· 415 417 } 416 418 EXPORT_SYMBOL_GPL(regcache_cache_bypass); 417 419 418 - bool regcache_set_val(void *base, unsigned int idx, 419 - unsigned int val, unsigned int word_size) 420 + bool regcache_set_val(struct regmap *map, void *base, unsigned int idx, 421 + unsigned int val) 420 422 { 421 - switch (word_size) { 423 + switch (map->cache_word_size) { 422 424 case 1: { 423 425 u8 *cache = base; 424 426 if (cache[idx] == val) ··· 446 448 return false; 447 449 } 448 450 449 - unsigned int regcache_get_val(const void *base, unsigned int idx, 450 - unsigned int word_size) 451 + unsigned int regcache_get_val(struct regmap *map, const void *base, 452 + unsigned int idx) 451 453 { 452 454 if (!base) 453 455 return -EINVAL; 454 456 455 - switch (word_size) { 457 + switch (map->cache_word_size) { 456 458 case 1: { 457 459 const u8 *cache = base; 458 460 return cache[idx];