]> git.sur5r.net Git - u-boot/blobdiff - include/regmap.h
dm: sunxi: Use DM for MMC and SATA on all A10 boards
[u-boot] / include / regmap.h
index eccf7707f456568de6cd371d6d971e71bd403ee6..6a574eaa41294a740a688f3bc717c0ba68afcf8f 100644 (file)
@@ -1,8 +1,7 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
 /*
  * Copyright (c) 2015 Google, Inc
  * Written by Simon Glass <sjg@chromium.org>
- *
- * 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