diff options
author | Simon Glass <sjg@chromium.org> | 2016-07-04 11:58:21 -0600 |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2016-07-14 20:40:24 -0600 |
commit | a951431e827cfd862a4c095e85e8650a6b8370f7 (patch) | |
tree | 7771446f5d52d71ac383bb6dabec4a38514f3be4 /drivers/core/regmap.c | |
parent | 3949a413edb2c2be6ad930a5ba4b240bbca53d08 (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.c | 34 |
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++) { |