Loading drivers/base/regmap/regmap.c +41 −0 Original line number Diff line number Diff line Loading @@ -1564,6 +1564,47 @@ out: } EXPORT_SYMBOL_GPL(regmap_bulk_write); /* * regmap_multi_reg_write(): Write multiple registers to the device * * where the set of register are supplied in any order * * @map: Register map to write to * @regs: Array of structures containing register,value to be written * @num_regs: Number of registers to write * * This function is intended to be used for writing a large block of data * atomically to the device in single transfer for those I2C client devices * that implement this alternative block write mode. * * A value of zero will be returned on success, a negative errno will * be returned in error cases. */ int regmap_multi_reg_write(struct regmap *map, struct reg_default *regs, int num_regs) { int ret = 0, i; for (i = 0; i < num_regs; i++) { int reg = regs[i].reg; if (reg % map->reg_stride) return -EINVAL; } map->lock(map->lock_arg); for (i = 0; i < num_regs; i++) { ret = _regmap_write(map, regs[i].reg, regs[i].def); if (ret != 0) goto out; } out: map->unlock(map->lock_arg); return ret; } EXPORT_SYMBOL_GPL(regmap_multi_reg_write); /** * regmap_raw_write_async(): Write raw values to one or more registers * asynchronously Loading include/linux/regmap.h +2 −0 Original line number Diff line number Diff line Loading @@ -379,6 +379,8 @@ int regmap_raw_write(struct regmap *map, unsigned int reg, const void *val, size_t val_len); int regmap_bulk_write(struct regmap *map, unsigned int reg, const void *val, size_t val_count); int regmap_multi_reg_write(struct regmap *map, struct reg_default *regs, int num_regs); int regmap_raw_write_async(struct regmap *map, unsigned int reg, const void *val, size_t val_len); int regmap_read(struct regmap *map, unsigned int reg, unsigned int *val); Loading Loading
drivers/base/regmap/regmap.c +41 −0 Original line number Diff line number Diff line Loading @@ -1564,6 +1564,47 @@ out: } EXPORT_SYMBOL_GPL(regmap_bulk_write); /* * regmap_multi_reg_write(): Write multiple registers to the device * * where the set of register are supplied in any order * * @map: Register map to write to * @regs: Array of structures containing register,value to be written * @num_regs: Number of registers to write * * This function is intended to be used for writing a large block of data * atomically to the device in single transfer for those I2C client devices * that implement this alternative block write mode. * * A value of zero will be returned on success, a negative errno will * be returned in error cases. */ int regmap_multi_reg_write(struct regmap *map, struct reg_default *regs, int num_regs) { int ret = 0, i; for (i = 0; i < num_regs; i++) { int reg = regs[i].reg; if (reg % map->reg_stride) return -EINVAL; } map->lock(map->lock_arg); for (i = 0; i < num_regs; i++) { ret = _regmap_write(map, regs[i].reg, regs[i].def); if (ret != 0) goto out; } out: map->unlock(map->lock_arg); return ret; } EXPORT_SYMBOL_GPL(regmap_multi_reg_write); /** * regmap_raw_write_async(): Write raw values to one or more registers * asynchronously Loading
include/linux/regmap.h +2 −0 Original line number Diff line number Diff line Loading @@ -379,6 +379,8 @@ int regmap_raw_write(struct regmap *map, unsigned int reg, const void *val, size_t val_len); int regmap_bulk_write(struct regmap *map, unsigned int reg, const void *val, size_t val_count); int regmap_multi_reg_write(struct regmap *map, struct reg_default *regs, int num_regs); int regmap_raw_write_async(struct regmap *map, unsigned int reg, const void *val, size_t val_len); int regmap_read(struct regmap *map, unsigned int reg, unsigned int *val); Loading