Hi Jean-Jacques, On Fri, 27 Sep 2019 at 07:22, Jean-Jacques Hiblot <jjhib...@ti.com> wrote: > > Most of new linux drivers are using managed-API to allocate resources. To > ease porting drivers from linux to u-boot, introduce devm_regmap_init() as
U-Boot Please always spell it that way. > a managed API to get a regmap from the device tree. > > Signed-off-by: Jean-Jacques Hiblot <jjhib...@ti.com> > --- > > drivers/core/regmap.c | 26 ++++++++++++++++++++++++++ > include/regmap.h | 19 +++++++++++++++++++ > 2 files changed, 45 insertions(+) Reviewed-by: Simon Glass <s...@chromium.org> Nit below > > diff --git a/drivers/core/regmap.c b/drivers/core/regmap.c > index e9e55c9d16..f69ff6d12f 100644 > --- a/drivers/core/regmap.c > +++ b/drivers/core/regmap.c > @@ -219,6 +219,32 @@ int regmap_init_mem(ofnode node, struct regmap **mapp) > > return 0; > } > + > +static void devm_regmap_release(struct udevice *dev, void *res) > +{ > + regmap_uninit(*(struct regmap **)res); > +} > + > +struct regmap *devm_regmap_init(struct udevice *dev, > + const struct regmap_bus *bus, > + void *bus_context, > + const struct regmap_config *config) > +{ > + int rc; > + struct regmap **mapp; > + > + mapp = devres_alloc(devm_regmap_release, sizeof(struct regmap *), > + __GFP_ZERO); > + if (unlikely(!mapp)) > + return ERR_PTR(-ENOMEM); > + > + rc = regmap_init_mem(dev_ofnode(dev), mapp); > + if (rc) > + return ERR_PTR(rc); > + > + devres_add(dev, mapp); > + return *mapp; > +} > #endif > > void *regmap_get_range(struct regmap *map, unsigned int range_num) > diff --git a/include/regmap.h b/include/regmap.h > index 0854200a9c..63a362d86d 100644 > --- a/include/regmap.h > +++ b/include/regmap.h > @@ -73,6 +73,9 @@ struct regmap_range { > ulong size; > }; > > +struct regmap_bus; > +struct regmap_config; > + > /** > * struct regmap - a way of accessing hardware/bus registers > * > @@ -332,6 +335,22 @@ int regmap_init_mem_platdata(struct udevice *dev, > fdt_val_t *reg, int count, > > int regmap_init_mem_index(ofnode node, struct regmap **mapp, int index); > > +/** > + * devm_regmap_init() - Initialise register map (device managed) > + * > + * @dev: Device that will be interacted with > + * @bus: Bus-specific callbacks to use with device (IGNORED) > + * @bus_context: Data passed to bus-specific callbacks (IGNORED) > + * @config: Configuration for register map (IGNORED) > + * @return > + * The return value will be an ERR_PTR() on error or a valid pointer to > + * a struct regmap. > + * The structure is automatically freed when the device is unbound > + */ > +struct regmap *devm_regmap_init(struct udevice *dev, > + const struct regmap_bus *bus, > + void *bus_context, > + const struct regmap_config *config); > /** > * regmap_get_range() - Obtain the base memory address of a regmap range > * > -- > 2.17.1 > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot