]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
regmap: Allow devices to specify regmap range start and size in config
authorPratyush Yadav <p.yadav@ti.com>
Thu, 24 Sep 2020 04:34:15 +0000 (10:04 +0530)
committerTom Rini <trini@konsulko.com>
Wed, 30 Sep 2020 15:55:22 +0000 (11:55 -0400)
Some devices need to calculate the regmap base address at runtime. This
makes it impossible to use device tree to get the regmap base. Instead,
allow devices to specify it in the regmap config. This will create a
regmap with a single range that corresponds to the start and size given
by the driver.

Signed-off-by: Pratyush Yadav <p.yadav@ti.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
drivers/core/regmap.c
include/regmap.h

index a9087df32b9b405a6502137932ac32145e2687a8..a3da0cf7c3f8fbc7562443e8f63635a20cc20578 100644 (file)
@@ -283,7 +283,11 @@ struct regmap *devm_regmap_init(struct udevice *dev,
        if (unlikely(!mapp))
                return ERR_PTR(-ENOMEM);
 
-       rc = regmap_init_mem(dev_ofnode(dev), mapp);
+       if (config && config->r_size != 0)
+               rc = regmap_init_mem_range(dev_ofnode(dev), config->r_start,
+                                          config->r_size, mapp);
+       else
+               rc = regmap_init_mem(dev_ofnode(dev), mapp);
        if (rc)
                return ERR_PTR(rc);
 
index 7c8ad04759937900c4d0c01a7869e6b96048422a..7a6fcc7f53b92a9005a399aa5033c3983747ab2b 100644 (file)
@@ -84,10 +84,16 @@ struct regmap_bus;
  *                     REGMAP_SIZE_32 if set to 0.
  * @reg_offset_shift   Left shift the register offset by this value before
  *                     performing read or write.
+ * @r_start:           If specified, the regmap is created with one range
+ *                     which starts at this address, instead of finding the
+ *                     start from device tree.
+ * @r_size:            Same as above for the range size
  */
 struct regmap_config {
        enum regmap_size_t width;
        u32 reg_offset_shift;
+       ulong r_start;
+       ulong r_size;
 };
 
 /**