Message ID | 20200924043418.5355-7-p.yadav@ti.com |
---|---|
State | Accepted |
Commit | d8babb9598ce237ffb1feccb576c66a21c52e5f7 |
Delegated to: | Tom Rini |
Headers | show |
Series | regmap: Add managed API, regmap fields, regmap config | expand |
On Thu, Sep 24, 2020 at 10:04:15AM +0530, Pratyush Yadav wrote: > 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> Applied to u-boot/next, thanks!
diff --git a/drivers/core/regmap.c b/drivers/core/regmap.c index a9087df32b..a3da0cf7c3 100644 --- a/drivers/core/regmap.c +++ b/drivers/core/regmap.c @@ -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); diff --git a/include/regmap.h b/include/regmap.h index 7c8ad04759..7a6fcc7f53 100644 --- a/include/regmap.h +++ b/include/regmap.h @@ -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; }; /**