regcache.c (c0cc6fe1d09e3f1baecbdf8922473c8e7d3a5317) | regcache.c (f01ee60fffa4dc6c77122121233a793f7f696e67) |
---|---|
1/* 2 * Register cache access API 3 * 4 * Copyright 2011 Wolfson Microelectronics plc 5 * 6 * Author: Dimitris Papastamos <dp@opensource.wolfsonmicro.com> 7 * 8 * This program is free software; you can redistribute it and/or modify --- 45 unchanged lines hidden (view full) --- 54 map->reg_defaults_raw = tmp_buf; 55 map->cache_free = 1; 56 } 57 58 /* calculate the size of reg_defaults */ 59 for (count = 0, i = 0; i < map->num_reg_defaults_raw; i++) { 60 val = regcache_get_val(map->reg_defaults_raw, 61 i, map->cache_word_size); | 1/* 2 * Register cache access API 3 * 4 * Copyright 2011 Wolfson Microelectronics plc 5 * 6 * Author: Dimitris Papastamos <dp@opensource.wolfsonmicro.com> 7 * 8 * This program is free software; you can redistribute it and/or modify --- 45 unchanged lines hidden (view full) --- 54 map->reg_defaults_raw = tmp_buf; 55 map->cache_free = 1; 56 } 57 58 /* calculate the size of reg_defaults */ 59 for (count = 0, i = 0; i < map->num_reg_defaults_raw; i++) { 60 val = regcache_get_val(map->reg_defaults_raw, 61 i, map->cache_word_size); |
62 if (regmap_volatile(map, i)) | 62 if (regmap_volatile(map, i * map->reg_stride)) |
63 continue; 64 count++; 65 } 66 67 map->reg_defaults = kmalloc(count * sizeof(struct reg_default), 68 GFP_KERNEL); 69 if (!map->reg_defaults) { 70 ret = -ENOMEM; 71 goto err_free; 72 } 73 74 /* fill the reg_defaults */ 75 map->num_reg_defaults = count; 76 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); | 63 continue; 64 count++; 65 } 66 67 map->reg_defaults = kmalloc(count * sizeof(struct reg_default), 68 GFP_KERNEL); 69 if (!map->reg_defaults) { 70 ret = -ENOMEM; 71 goto err_free; 72 } 73 74 /* fill the reg_defaults */ 75 map->num_reg_defaults = count; 76 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); |
79 if (regmap_volatile(map, i)) | 79 if (regmap_volatile(map, i * map->reg_stride)) |
80 continue; | 80 continue; |
81 map->reg_defaults[j].reg = i; | 81 map->reg_defaults[j].reg = i * map->reg_stride; |
82 map->reg_defaults[j].def = val; 83 j++; 84 } 85 86 return 0; 87 88err_free: 89 if (map->cache_free) 90 kfree(map->reg_defaults_raw); 91 92 return ret; 93} 94 95int regcache_init(struct regmap *map, const struct regmap_config *config) 96{ 97 int ret; 98 int i; 99 void *tmp_buf; 100 | 82 map->reg_defaults[j].def = val; 83 j++; 84 } 85 86 return 0; 87 88err_free: 89 if (map->cache_free) 90 kfree(map->reg_defaults_raw); 91 92 return ret; 93} 94 95int regcache_init(struct regmap *map, const struct regmap_config *config) 96{ 97 int ret; 98 int i; 99 void *tmp_buf; 100 |
101 for (i = 0; i < config->num_reg_defaults; i++) 102 if (config->reg_defaults[i].reg % map->reg_stride) 103 return -EINVAL; 104 |
|
101 if (map->cache_type == REGCACHE_NONE) { 102 map->cache_bypass = true; 103 return 0; 104 } 105 106 for (i = 0; i < ARRAY_SIZE(cache_types); i++) 107 if (cache_types[i]->type == map->cache_type) 108 break; --- 164 unchanged lines hidden (view full) --- 273 trace_regcache_sync(map->dev, name, "start"); 274 275 if (!map->cache_dirty) 276 goto out; 277 278 /* Apply any patch first */ 279 map->cache_bypass = 1; 280 for (i = 0; i < map->patch_regs; i++) { | 105 if (map->cache_type == REGCACHE_NONE) { 106 map->cache_bypass = true; 107 return 0; 108 } 109 110 for (i = 0; i < ARRAY_SIZE(cache_types); i++) 111 if (cache_types[i]->type == map->cache_type) 112 break; --- 164 unchanged lines hidden (view full) --- 277 trace_regcache_sync(map->dev, name, "start"); 278 279 if (!map->cache_dirty) 280 goto out; 281 282 /* Apply any patch first */ 283 map->cache_bypass = 1; 284 for (i = 0; i < map->patch_regs; i++) { |
285 if (map->patch[i].reg % map->reg_stride) { 286 ret = -EINVAL; 287 goto out; 288 } |
|
281 ret = _regmap_write(map, map->patch[i].reg, map->patch[i].def); 282 if (ret != 0) { 283 dev_err(map->dev, "Failed to write %x = %x: %d\n", 284 map->patch[i].reg, map->patch[i].def, ret); 285 goto out; 286 } 287 } 288 map->cache_bypass = 0; --- 203 unchanged lines hidden --- | 289 ret = _regmap_write(map, map->patch[i].reg, map->patch[i].def); 290 if (ret != 0) { 291 dev_err(map->dev, "Failed to write %x = %x: %d\n", 292 map->patch[i].reg, map->patch[i].def, ret); 293 goto out; 294 } 295 } 296 map->cache_bypass = 0; --- 203 unchanged lines hidden --- |