aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/base
diff options
context:
space:
mode:
authorDimitris Papastamos <dp@opensource.wolfsonmicro.com>2011-09-27 06:25:07 -0400
committerMark Brown <broonie@opensource.wolfsonmicro.com>2011-09-27 08:27:09 -0400
commit25ed1156ddf99f6d8feb87d0992b2ecb1fef667a (patch)
treee253bb262eaac0576f7f1f1a0b31e1a82128e660 /drivers/base
parent523d9cfbb2094e095ff08a01c4eac10cc7d287c3 (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.c53
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
47static unsigned int regcache_rbtree_get_register( 45static 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
70static void regcache_rbtree_set_register(struct regcache_rbtree_node *rbnode, 69static 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
241static int regcache_rbtree_insert_to_block(struct regcache_rbtree_node *rbnode, 243static 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;