diff options
author | Masahiro Yamada <yamada.masahiro@socionext.com> | 2018-04-19 12:14:03 +0900 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2018-05-07 15:49:51 -0400 |
commit | d35812368a590ebe1a5c92199a1a57ce3e80722e (patch) | |
tree | c1ff594293463470564010fd57e7cbbd03bb35a0 /drivers/core | |
parent | 5ccc2c21307e186722ca9966bad0e03189c237c5 (diff) | |
download | u-boot-d35812368a590ebe1a5c92199a1a57ce3e80722e.tar.gz |
regmap: change regmap_init_mem() to take ofnode instead udevice
Currently, regmap_init_mem() takes a udevice. This requires the node
has already been associated with a device. It prevents syscon/regmap
from behaving like those in Linux.
Change the first argumenet to take a device node.
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Acked-by: Neil Armstrong <narmstrong@baylibre.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'drivers/core')
-rw-r--r-- | drivers/core/regmap.c | 11 | ||||
-rw-r--r-- | drivers/core/syscon-uclass.c | 2 |
2 files changed, 6 insertions, 7 deletions
diff --git a/drivers/core/regmap.c b/drivers/core/regmap.c index 0f787ab4e1..fabcc5f53a 100644 --- a/drivers/core/regmap.c +++ b/drivers/core/regmap.c @@ -50,7 +50,7 @@ int regmap_init_mem_platdata(struct udevice *dev, fdt_val_t *reg, int count, return 0; } #else -int regmap_init_mem(struct udevice *dev, struct regmap **mapp) +int regmap_init_mem(ofnode node, struct regmap **mapp) { struct regmap_range *range; struct regmap *map; @@ -58,14 +58,13 @@ int regmap_init_mem(struct udevice *dev, struct regmap **mapp) int addr_len, size_len, both_len; int len; int index; - ofnode node = dev_ofnode(dev); struct resource r; - addr_len = dev_read_simple_addr_cells(dev->parent); - size_len = dev_read_simple_size_cells(dev->parent); + addr_len = ofnode_read_simple_addr_cells(ofnode_get_parent(node)); + size_len = ofnode_read_simple_size_cells(ofnode_get_parent(node)); both_len = addr_len + size_len; - len = dev_read_size(dev, "reg"); + len = ofnode_read_size(node, "reg"); if (len < 0) return len; len /= sizeof(fdt32_t); @@ -86,7 +85,7 @@ int regmap_init_mem(struct udevice *dev, struct regmap **mapp) range->size = r.end - r.start + 1; } else { range->start = fdtdec_get_addr_size_fixed(gd->fdt_blob, - dev_of_offset(dev), "reg", index, + ofnode_to_offset(node), "reg", index, addr_len, size_len, &sz, true); range->size = sz; } diff --git a/drivers/core/syscon-uclass.c b/drivers/core/syscon-uclass.c index 96408dea7e..62ba462158 100644 --- a/drivers/core/syscon-uclass.c +++ b/drivers/core/syscon-uclass.c @@ -40,7 +40,7 @@ static int syscon_pre_probe(struct udevice *dev) return regmap_init_mem_platdata(dev, plat->reg, ARRAY_SIZE(plat->reg), &priv->regmap); #else - return regmap_init_mem(dev, &priv->regmap); + return regmap_init_mem(dev_ofnode(dev), &priv->regmap); #endif } |