regmap: Add devm_regmap_init()

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
a managed API to get a regmap from the device tree.

Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Pratyush Yadav <p.yadav@ti.com>
This commit is contained in:
Jean-Jacques Hiblot 2020-09-24 10:04:10 +05:30 committed by Tom Rini
parent 88e6a60e4a
commit ffb22f6b84
2 changed files with 47 additions and 0 deletions

View File

@ -14,7 +14,10 @@
#include <regmap.h>
#include <asm/io.h>
#include <dm/of_addr.h>
#include <dm/devres.h>
#include <linux/ioport.h>
#include <linux/compat.h>
#include <linux/err.h>
DECLARE_GLOBAL_DATA_PTR;
@ -228,6 +231,32 @@ err:
return ret;
}
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)

View File

@ -75,6 +75,9 @@ struct regmap_range {
ulong size;
};
struct regmap_bus;
struct regmap_config;
/**
* struct regmap - a way of accessing hardware/bus registers
*
@ -335,6 +338,21 @@ 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 a valid pointer to a struct regmap or a ERR_PTR() on error.
* 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
*