diff options
author | Dimitris Papastamos <dp@opensource.wolfsonmicro.com> | 2011-09-27 06:25:07 -0400 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2011-09-27 08:27:09 -0400 |
commit | 25ed1156ddf99f6d8feb87d0992b2ecb1fef667a (patch) | |
tree | e253bb262eaac0576f7f1f1a0b31e1a82128e660 /drivers/base | |
parent | 523d9cfbb2094e095ff08a01c4eac10cc7d287c3 (diff) |
regmap: Remove redundant member `word_size' from regcache_rbtree_node
Signed-off-by: Dimitris Papastamos <dp@opensource.wolfsonmicro.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'drivers/base')
-rw-r--r-- | drivers/base/regmap/regcache-rbtree.c | 53 |
1 files changed, 30 insertions, 23 deletions
diff --git a/drivers/base/regmap/regcache-rbtree.c b/drivers/base/regmap/regcache-rbtree.c index 4d7ba4511755..dd1b937a0d84 100644 --- a/drivers/base/regmap/regcache-rbtree.c +++ b/drivers/base/regmap/regcache-rbtree.c | |||
@@ -23,8 +23,6 @@ struct regcache_rbtree_node { | |||
23 | struct rb_node node; | 23 | struct rb_node node; |
24 | /* base register handled by this block */ | 24 | /* base register handled by this block */ |
25 | unsigned int base_reg; | 25 | unsigned int base_reg; |
26 | /* number of bytes needed to represent the register index */ | ||
27 | unsigned int word_size; | ||
28 | /* block of adjacent registers */ | 26 | /* block of adjacent registers */ |
29 | void *block; | 27 | void *block; |
30 | /* number of registers available in the block */ | 28 | /* number of registers available in the block */ |
@@ -45,11 +43,12 @@ static inline void regcache_rbtree_get_base_top_reg( | |||
45 | } | 43 | } |
46 | 44 | ||
47 | static unsigned int regcache_rbtree_get_register( | 45 | static unsigned int regcache_rbtree_get_register( |
48 | struct regcache_rbtree_node *rbnode, unsigned int idx) | 46 | struct regcache_rbtree_node *rbnode, unsigned int idx, |
47 | unsigned int word_size) | ||
49 | { | 48 | { |
50 | unsigned int val; | 49 | unsigned int val; |
51 | 50 | ||
52 | switch (rbnode->word_size) { | 51 | switch (word_size) { |
53 | case 1: { | 52 | case 1: { |
54 | u8 *p = rbnode->block; | 53 | u8 *p = rbnode->block; |
55 | val = p[idx]; | 54 | val = p[idx]; |
@@ -68,9 +67,10 @@ static unsigned int regcache_rbtree_get_register( | |||
68 | } | 67 | } |
69 | 68 | ||
70 | static void regcache_rbtree_set_register(struct regcache_rbtree_node *rbnode, | 69 | static void regcache_rbtree_set_register(struct regcache_rbtree_node *rbnode, |
71 | unsigned int idx, unsigned int val) | 70 | unsigned int idx, unsigned int val, |
71 | unsigned int word_size) | ||
72 | { | 72 | { |
73 | switch (rbnode->word_size) { | 73 | switch (word_size) { |
74 | case 1: { | 74 | case 1: { |
75 | u8 *p = rbnode->block; | 75 | u8 *p = rbnode->block; |
76 | p[idx] = val; | 76 | p[idx] = val; |
@@ -217,7 +217,8 @@ static int regcache_rbtree_read(struct regmap *map, | |||
217 | regcache_rbtree_get_base_top_reg(rbnode, &base_reg, &top_reg); | 217 | regcache_rbtree_get_base_top_reg(rbnode, &base_reg, &top_reg); |
218 | if (reg >= base_reg && reg <= top_reg) { | 218 | if (reg >= base_reg && reg <= top_reg) { |
219 | reg_tmp = reg - base_reg; | 219 | reg_tmp = reg - base_reg; |
220 | *value = regcache_rbtree_get_register(rbnode, reg_tmp); | 220 | *value = regcache_rbtree_get_register(rbnode, reg_tmp, |
221 | map->cache_word_size); | ||
221 | return 0; | 222 | return 0; |
222 | } | 223 | } |
223 | } | 224 | } |
@@ -227,7 +228,8 @@ static int regcache_rbtree_read(struct regmap *map, | |||
227 | rbnode = regcache_rbtree_lookup(&rbtree_ctx->root, reg); | 228 | rbnode = regcache_rbtree_lookup(&rbtree_ctx->root, reg); |
228 | if (rbnode) { | 229 | if (rbnode) { |
229 | reg_tmp = reg - rbnode->base_reg; | 230 | reg_tmp = reg - rbnode->base_reg; |
230 | *value = regcache_rbtree_get_register(rbnode, reg_tmp); | 231 | *value = regcache_rbtree_get_register(rbnode, reg_tmp, |
232 | map->cache_word_size); | ||
231 | rbtree_ctx->cached_rbnode = rbnode; | 233 | rbtree_ctx->cached_rbnode = rbnode; |
232 | } else { | 234 | } else { |
233 | /* uninitialized registers default to 0 */ | 235 | /* uninitialized registers default to 0 */ |
@@ -240,19 +242,19 @@ static int regcache_rbtree_read(struct regmap *map, | |||
240 | 242 | ||
241 | static int regcache_rbtree_insert_to_block(struct regcache_rbtree_node *rbnode, | 243 | static int regcache_rbtree_insert_to_block(struct regcache_rbtree_node *rbnode, |
242 | unsigned int pos, unsigned int reg, | 244 | unsigned int pos, unsigned int reg, |
243 | unsigned int value) | 245 | unsigned int value, unsigned int word_size) |
244 | { | 246 | { |
245 | u8 *blk; | 247 | u8 *blk; |
246 | 248 | ||
247 | blk = krealloc(rbnode->block, | 249 | blk = krealloc(rbnode->block, |
248 | (rbnode->blklen + 1) * rbnode->word_size, GFP_KERNEL); | 250 | (rbnode->blklen + 1) * word_size, GFP_KERNEL); |
249 | if (!blk) | 251 | if (!blk) |
250 | return -ENOMEM; | 252 | return -ENOMEM; |
251 | 253 | ||
252 | /* insert the register value in the correct place in the rbnode block */ | 254 | /* insert the register value in the correct place in the rbnode block */ |
253 | memmove(blk + (pos + 1) * rbnode->word_size, | 255 | memmove(blk + (pos + 1) * word_size, |
254 | blk + pos * rbnode->word_size, | 256 | blk + pos * word_size, |
255 | (rbnode->blklen - pos) * rbnode->word_size); | 257 | (rbnode->blklen - pos) * word_size); |
256 | 258 | ||
257 | /* update the rbnode block, its size and the base register */ | 259 | /* update the rbnode block, its size and the base register */ |
258 | rbnode->block = blk; | 260 | rbnode->block = blk; |
@@ -260,7 +262,7 @@ static int regcache_rbtree_insert_to_block(struct regcache_rbtree_node *rbnode, | |||
260 | if (!pos) | 262 | if (!pos) |
261 | rbnode->base_reg = reg; | 263 | rbnode->base_reg = reg; |
262 | 264 | ||
263 | regcache_rbtree_set_register(rbnode, pos, value); | 265 | regcache_rbtree_set_register(rbnode, pos, value, word_size); |
264 | return 0; | 266 | return 0; |
265 | } | 267 | } |
266 | 268 | ||
@@ -284,10 +286,12 @@ static int regcache_rbtree_write(struct regmap *map, unsigned int reg, | |||
284 | regcache_rbtree_get_base_top_reg(rbnode, &base_reg, &top_reg); | 286 | regcache_rbtree_get_base_top_reg(rbnode, &base_reg, &top_reg); |
285 | if (reg >= base_reg && reg <= top_reg) { | 287 | if (reg >= base_reg && reg <= top_reg) { |
286 | reg_tmp = reg - base_reg; | 288 | reg_tmp = reg - base_reg; |
287 | val = regcache_rbtree_get_register(rbnode, reg_tmp); | 289 | val = regcache_rbtree_get_register(rbnode, reg_tmp, |
290 | map->cache_word_size); | ||
288 | if (val == value) | 291 | if (val == value) |
289 | return 0; | 292 | return 0; |
290 | regcache_rbtree_set_register(rbnode, reg_tmp, value); | 293 | regcache_rbtree_set_register(rbnode, reg_tmp, value, |
294 | map->cache_word_size); | ||
291 | return 0; | 295 | return 0; |
292 | } | 296 | } |
293 | } | 297 | } |
@@ -297,10 +301,12 @@ static int regcache_rbtree_write(struct regmap *map, unsigned int reg, | |||
297 | rbnode = regcache_rbtree_lookup(&rbtree_ctx->root, reg); | 301 | rbnode = regcache_rbtree_lookup(&rbtree_ctx->root, reg); |
298 | if (rbnode) { | 302 | if (rbnode) { |
299 | reg_tmp = reg - rbnode->base_reg; | 303 | reg_tmp = reg - rbnode->base_reg; |
300 | val = regcache_rbtree_get_register(rbnode, reg_tmp); | 304 | val = regcache_rbtree_get_register(rbnode, reg_tmp, |
305 | map->cache_word_size); | ||
301 | if (val == value) | 306 | if (val == value) |
302 | return 0; | 307 | return 0; |
303 | regcache_rbtree_set_register(rbnode, reg_tmp, value); | 308 | regcache_rbtree_set_register(rbnode, reg_tmp, value, |
309 | map->cache_word_size); | ||
304 | rbtree_ctx->cached_rbnode = rbnode; | 310 | rbtree_ctx->cached_rbnode = rbnode; |
305 | } else { | 311 | } else { |
306 | /* bail out early, no need to create the rbnode yet */ | 312 | /* bail out early, no need to create the rbnode yet */ |
@@ -320,7 +326,8 @@ static int regcache_rbtree_write(struct regmap *map, unsigned int reg, | |||
320 | else | 326 | else |
321 | pos = i; | 327 | pos = i; |
322 | ret = regcache_rbtree_insert_to_block(rbnode_tmp, pos, | 328 | ret = regcache_rbtree_insert_to_block(rbnode_tmp, pos, |
323 | reg, value); | 329 | reg, value, |
330 | map->cache_word_size); | ||
324 | if (ret) | 331 | if (ret) |
325 | return ret; | 332 | return ret; |
326 | rbtree_ctx->cached_rbnode = rbnode_tmp; | 333 | rbtree_ctx->cached_rbnode = rbnode_tmp; |
@@ -337,14 +344,13 @@ static int regcache_rbtree_write(struct regmap *map, unsigned int reg, | |||
337 | return -ENOMEM; | 344 | return -ENOMEM; |
338 | rbnode->blklen = 1; | 345 | rbnode->blklen = 1; |
339 | rbnode->base_reg = reg; | 346 | rbnode->base_reg = reg; |
340 | rbnode->word_size = map->cache_word_size; | 347 | rbnode->block = kmalloc(rbnode->blklen * map->cache_word_size, |
341 | rbnode->block = kmalloc(rbnode->blklen * rbnode->word_size, | ||
342 | GFP_KERNEL); | 348 | GFP_KERNEL); |
343 | if (!rbnode->block) { | 349 | if (!rbnode->block) { |
344 | kfree(rbnode); | 350 | kfree(rbnode); |
345 | return -ENOMEM; | 351 | return -ENOMEM; |
346 | } | 352 | } |
347 | regcache_rbtree_set_register(rbnode, 0, value); | 353 | regcache_rbtree_set_register(rbnode, 0, value, map->cache_word_size); |
348 | regcache_rbtree_insert(&rbtree_ctx->root, rbnode); | 354 | regcache_rbtree_insert(&rbtree_ctx->root, rbnode); |
349 | rbtree_ctx->cached_rbnode = rbnode; | 355 | rbtree_ctx->cached_rbnode = rbnode; |
350 | } | 356 | } |
@@ -367,7 +373,8 @@ static int regcache_rbtree_sync(struct regmap *map) | |||
367 | rbnode = rb_entry(node, struct regcache_rbtree_node, node); | 373 | rbnode = rb_entry(node, struct regcache_rbtree_node, node); |
368 | for (i = 0; i < rbnode->blklen; i++) { | 374 | for (i = 0; i < rbnode->blklen; i++) { |
369 | regtmp = rbnode->base_reg + i; | 375 | regtmp = rbnode->base_reg + i; |
370 | val = regcache_rbtree_get_register(rbnode, i); | 376 | val = regcache_rbtree_get_register(rbnode, i, |
377 | map->cache_word_size); | ||
371 | ret = regcache_lookup_reg(map, i); | 378 | ret = regcache_lookup_reg(map, i); |
372 | if (ret < 0) | 379 | if (ret < 0) |
373 | def = 0; | 380 | def = 0; |