1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| int regmap_init_mem(ofnode node, struct regmap **mapp) { ofnode parent; struct regmap_range *range; struct regmap *map; int count; int addr_len, size_len, both_len; int len; int index; int ret;
parent = ofnode_get_parent(node); addr_len = ofnode_read_simple_addr_cells(parent); size_len = ofnode_read_simple_size_cells(parent); both_len = addr_len + size_len; len = ofnode_read_size(node, "reg"); len /= sizeof(fdt32_t); count = len / both_len; map = regmap_alloc(count); for (range = map->ranges, index = 0; count > 0; count--, range++, index++) { ret = init_range(node, range, addr_len, size_len, index); if (ret) goto err; }
if (ofnode_read_bool(node, "little-endian")) map->endianness = REGMAP_LITTLE_ENDIAN; else if (ofnode_read_bool(node, "big-endian")) map->endianness = REGMAP_BIG_ENDIAN; else if (ofnode_read_bool(node, "native-endian")) map->endianness = REGMAP_NATIVE_ENDIAN; else map->endianness = REGMAP_NATIVE_ENDIAN;
*mapp = map;
return 0; }
|