Loading drivers/base/regmap/regmap-i2c.c +17 −0 Original line number Diff line number Diff line Loading @@ -111,4 +111,21 @@ struct regmap *regmap_init_i2c(struct i2c_client *i2c, } EXPORT_SYMBOL_GPL(regmap_init_i2c); /** * devm_regmap_init_i2c(): Initialise managed register map * * @i2c: Device that will be interacted with * @config: Configuration for register map * * The return value will be an ERR_PTR() on error or a valid pointer * to a struct regmap. The regmap will be automatically freed by the * device management code. */ struct regmap *devm_regmap_init_i2c(struct i2c_client *i2c, const struct regmap_config *config) { return devm_regmap_init(&i2c->dev, ®map_i2c, config); } EXPORT_SYMBOL_GPL(devm_regmap_init_i2c); MODULE_LICENSE("GPL"); drivers/base/regmap/regmap-spi.c +17 −0 Original line number Diff line number Diff line Loading @@ -70,4 +70,21 @@ struct regmap *regmap_init_spi(struct spi_device *spi, } EXPORT_SYMBOL_GPL(regmap_init_spi); /** * devm_regmap_init_spi(): Initialise register map * * @spi: Device that will be interacted with * @config: Configuration for register map * * The return value will be an ERR_PTR() on error or a valid pointer * to a struct regmap. The map will be automatically freed by the * device management code. */ struct regmap *devm_regmap_init_spi(struct spi_device *spi, const struct regmap_config *config) { return devm_regmap_init(&spi->dev, ®map_spi, config); } EXPORT_SYMBOL_GPL(devm_regmap_init_spi); MODULE_LICENSE("GPL"); drivers/base/regmap/regmap.c +39 −0 Original line number Diff line number Diff line Loading @@ -306,6 +306,45 @@ err: } EXPORT_SYMBOL_GPL(regmap_init); static void devm_regmap_release(struct device *dev, void *res) { regmap_exit(*(struct regmap **)res); } /** * devm_regmap_init(): Initialise managed register map * * @dev: Device that will be interacted with * @bus: Bus-specific callbacks to use with device * @config: Configuration for register map * * The return value will be an ERR_PTR() on error or a valid pointer * to a struct regmap. This function should generally not be called * directly, it should be called by bus-specific init functions. The * map will be automatically freed by the device management code. */ struct regmap *devm_regmap_init(struct device *dev, const struct regmap_bus *bus, const struct regmap_config *config) { struct regmap **ptr, *regmap; ptr = devres_alloc(devm_regmap_release, sizeof(*ptr), GFP_KERNEL); if (!ptr) return ERR_PTR(-ENOMEM); regmap = regmap_init(dev, bus, config); if (!IS_ERR(regmap)) { *ptr = regmap; devres_add(dev, ptr); } else { devres_free(ptr); } return regmap; } EXPORT_SYMBOL_GPL(devm_regmap_init); /** * regmap_reinit_cache(): Reinitialise the current register cache * Loading include/linux/regmap.h +8 −0 Original line number Diff line number Diff line Loading @@ -132,6 +132,14 @@ struct regmap *regmap_init_i2c(struct i2c_client *i2c, struct regmap *regmap_init_spi(struct spi_device *dev, const struct regmap_config *config); struct regmap *devm_regmap_init(struct device *dev, const struct regmap_bus *bus, const struct regmap_config *config); struct regmap *devm_regmap_init_i2c(struct i2c_client *i2c, const struct regmap_config *config); struct regmap *devm_regmap_init_spi(struct spi_device *dev, const struct regmap_config *config); void regmap_exit(struct regmap *map); int regmap_reinit_cache(struct regmap *map, const struct regmap_config *config); Loading Loading
drivers/base/regmap/regmap-i2c.c +17 −0 Original line number Diff line number Diff line Loading @@ -111,4 +111,21 @@ struct regmap *regmap_init_i2c(struct i2c_client *i2c, } EXPORT_SYMBOL_GPL(regmap_init_i2c); /** * devm_regmap_init_i2c(): Initialise managed register map * * @i2c: Device that will be interacted with * @config: Configuration for register map * * The return value will be an ERR_PTR() on error or a valid pointer * to a struct regmap. The regmap will be automatically freed by the * device management code. */ struct regmap *devm_regmap_init_i2c(struct i2c_client *i2c, const struct regmap_config *config) { return devm_regmap_init(&i2c->dev, ®map_i2c, config); } EXPORT_SYMBOL_GPL(devm_regmap_init_i2c); MODULE_LICENSE("GPL");
drivers/base/regmap/regmap-spi.c +17 −0 Original line number Diff line number Diff line Loading @@ -70,4 +70,21 @@ struct regmap *regmap_init_spi(struct spi_device *spi, } EXPORT_SYMBOL_GPL(regmap_init_spi); /** * devm_regmap_init_spi(): Initialise register map * * @spi: Device that will be interacted with * @config: Configuration for register map * * The return value will be an ERR_PTR() on error or a valid pointer * to a struct regmap. The map will be automatically freed by the * device management code. */ struct regmap *devm_regmap_init_spi(struct spi_device *spi, const struct regmap_config *config) { return devm_regmap_init(&spi->dev, ®map_spi, config); } EXPORT_SYMBOL_GPL(devm_regmap_init_spi); MODULE_LICENSE("GPL");
drivers/base/regmap/regmap.c +39 −0 Original line number Diff line number Diff line Loading @@ -306,6 +306,45 @@ err: } EXPORT_SYMBOL_GPL(regmap_init); static void devm_regmap_release(struct device *dev, void *res) { regmap_exit(*(struct regmap **)res); } /** * devm_regmap_init(): Initialise managed register map * * @dev: Device that will be interacted with * @bus: Bus-specific callbacks to use with device * @config: Configuration for register map * * The return value will be an ERR_PTR() on error or a valid pointer * to a struct regmap. This function should generally not be called * directly, it should be called by bus-specific init functions. The * map will be automatically freed by the device management code. */ struct regmap *devm_regmap_init(struct device *dev, const struct regmap_bus *bus, const struct regmap_config *config) { struct regmap **ptr, *regmap; ptr = devres_alloc(devm_regmap_release, sizeof(*ptr), GFP_KERNEL); if (!ptr) return ERR_PTR(-ENOMEM); regmap = regmap_init(dev, bus, config); if (!IS_ERR(regmap)) { *ptr = regmap; devres_add(dev, ptr); } else { devres_free(ptr); } return regmap; } EXPORT_SYMBOL_GPL(devm_regmap_init); /** * regmap_reinit_cache(): Reinitialise the current register cache * Loading
include/linux/regmap.h +8 −0 Original line number Diff line number Diff line Loading @@ -132,6 +132,14 @@ struct regmap *regmap_init_i2c(struct i2c_client *i2c, struct regmap *regmap_init_spi(struct spi_device *dev, const struct regmap_config *config); struct regmap *devm_regmap_init(struct device *dev, const struct regmap_bus *bus, const struct regmap_config *config); struct regmap *devm_regmap_init_i2c(struct i2c_client *i2c, const struct regmap_config *config); struct regmap *devm_regmap_init_spi(struct spi_device *dev, const struct regmap_config *config); void regmap_exit(struct regmap *map); int regmap_reinit_cache(struct regmap *map, const struct regmap_config *config); Loading