Commit a951431e authored by Simon Glass's avatar Simon Glass

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: default avatarSimon Glass <sjg@chromium.org>
parent 3949a413
......@@ -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++) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment