X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=include%2Fregmap.h;h=6a574eaa41294a740a688f3bc717c0ba68afcf8f;hb=c960ef29cd1bffccb84366cc6ca9c290cb3c36a0;hp=eccf7707f456568de6cd371d6d971e71bd403ee6;hpb=7a1af7a79bd79ded6a78d0c1afdbc3353669e313;p=u-boot diff --git a/include/regmap.h b/include/regmap.h index eccf7707f4..6a574eaa41 100644 --- a/include/regmap.h +++ b/include/regmap.h @@ -1,8 +1,7 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ /* * Copyright (c) 2015 Google, Inc * Written by Simon Glass - * - * SPDX-License-Identifier: GPL-2.0+ */ #ifndef __REGMAP_H @@ -22,15 +21,12 @@ struct regmap_range { /** * struct regmap - a way of accessing hardware/bus registers * - * @base: Base address of register map * @range_count: Number of ranges available within the map - * @range: Pointer to the list of ranges, allocated if @range_count > 1 - * @base_range: If @range_count is <= 1, @range points here + * @ranges: Array of ranges */ struct regmap { - phys_addr_t base; int range_count; - struct regmap_range *range, base_range; + struct regmap_range ranges[0]; }; /* @@ -46,15 +42,41 @@ int regmap_read(struct regmap *map, uint offset, uint *valp); #define regmap_read32(map, ptr, member, valp) \ regmap_read(map, (uint32_t *)(ptr)->member - (uint32_t *)(ptr), valp) +/** + * regmap_update_bits() - Perform a read/modify/write using a mask + * + * @map: The map returned by regmap_init_mem*() + * @offset: Offset of the memory + * @mask: Mask to apply to the read value + * @val: Value to apply to the value to write + */ +int regmap_update_bits(struct regmap *map, uint offset, uint mask, uint val); + /** * regmap_init_mem() - Set up a new register map that uses memory access * * Use regmap_uninit() to free it. * + * @node: Device node that uses this map + * @mapp: Returns allocated map + */ +int regmap_init_mem(ofnode node, struct regmap **mapp); + +/** + * regmap_init_mem_platdata() - Set up a new memory register map for of-platdata + * + * This creates a new regmap with a list of regions passed in, rather than + * using the device tree. It only supports 32-bit machines. + * + * Use regmap_uninit() to free it. + * * @dev: Device that uses this map + * @reg: List of address, size pairs + * @count: Number of pairs (e.g. 1 if the regmap has a single entry) * @mapp: Returns allocated map */ -int regmap_init_mem(struct udevice *dev, struct regmap **mapp); +int regmap_init_mem_platdata(struct udevice *dev, fdt_val_t *reg, int count, + struct regmap **mapp); /** * regmap_get_range() - Obtain the base memory address of a regmap range