summaryrefslogtreecommitdiff
path: root/drivers/core/regmap.c
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2016-07-04 11:58:21 -0600
committerSimon Glass <sjg@chromium.org>2016-07-14 20:40:24 -0600
commita951431e827cfd862a4c095e85e8650a6b8370f7 (patch)
tree7771446f5d52d71ac383bb6dabec4a38514f3be4 /drivers/core/regmap.c
parent3949a413edb2c2be6ad930a5ba4b240bbca53d08 (diff)
dm: core: Move regmap allocation into a separate function
We plan to add a new way of creating a regmap for of-platdata. Move the allocation code into a separate function so that it can be shared. Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'drivers/core/regmap.c')
-rw-r--r--drivers/core/regmap.c34
1 files changed, 22 insertions, 12 deletions
diff --git a/drivers/core/regmap.c b/drivers/core/regmap.c
index 7e073cf9c0..dcb1a30d5f 100644
--- a/drivers/core/regmap.c
+++ b/drivers/core/regmap.c
@@ -15,6 +15,27 @@
DECLARE_GLOBAL_DATA_PTR;
+static struct regmap *regmap_alloc_count(int count)
+{
+ struct regmap *map;
+
+ map = malloc(sizeof(struct regmap));
+ if (!map)
+ return NULL;
+ if (count <= 1) {
+ map->range = &map->base_range;
+ } else {
+ map->range = malloc(count * sizeof(struct regmap_range));
+ if (!map->range) {
+ free(map);
+ return NULL;
+ }
+ }
+ map->range_count = count;
+
+ return map;
+}
+
#if CONFIG_IS_ENABLED(OF_PLATDATA)
int regmap_init_mem_platdata(struct udevice *dev, fdt32_t *reg, int size,
struct regmap **mapp)
@@ -45,22 +66,11 @@ int regmap_init_mem(struct udevice *dev, struct regmap **mapp)
if (!cell || !count)
return -EINVAL;
- map = malloc(sizeof(struct regmap));
+ map = regmap_alloc_count(count);
if (!map)
return -ENOMEM;
- if (count <= 1) {
- map->range = &map->base_range;
- } else {
- map->range = malloc(count * sizeof(struct regmap_range));
- if (!map->range) {
- free(map);
- return -ENOMEM;
- }
- }
-
map->base = fdtdec_get_number(cell, addr_len);
- map->range_count = count;
for (range = map->range; count > 0;
count--, cell += both_len, range++) {