···15641564}15651565EXPORT_SYMBOL_GPL(regmap_bulk_write);1566156615671567+/*15681568+ * regmap_multi_reg_write(): Write multiple registers to the device15691569+ *15701570+ * where the set of register are supplied in any order15711571+ *15721572+ * @map: Register map to write to15731573+ * @regs: Array of structures containing register,value to be written15741574+ * @num_regs: Number of registers to write15751575+ *15761576+ * This function is intended to be used for writing a large block of data15771577+ * atomically to the device in single transfer for those I2C client devices15781578+ * that implement this alternative block write mode.15791579+ *15801580+ * A value of zero will be returned on success, a negative errno will15811581+ * be returned in error cases.15821582+ */15831583+int regmap_multi_reg_write(struct regmap *map, struct reg_default *regs,15841584+ int num_regs)15851585+{15861586+ int ret = 0, i;15871587+15881588+ for (i = 0; i < num_regs; i++) {15891589+ int reg = regs[i].reg;15901590+ if (reg % map->reg_stride)15911591+ return -EINVAL;15921592+ }15931593+15941594+ map->lock(map->lock_arg);15951595+15961596+ for (i = 0; i < num_regs; i++) {15971597+ ret = _regmap_write(map, regs[i].reg, regs[i].def);15981598+ if (ret != 0)15991599+ goto out;16001600+ }16011601+out:16021602+ map->unlock(map->lock_arg);16031603+16041604+ return ret;16051605+}16061606+EXPORT_SYMBOL_GPL(regmap_multi_reg_write);16071607+15671608/**15681609 * regmap_raw_write_async(): Write raw values to one or more registers15691610 * asynchronously
+2
include/linux/regmap.h
···379379 const void *val, size_t val_len);380380int regmap_bulk_write(struct regmap *map, unsigned int reg, const void *val,381381 size_t val_count);382382+int regmap_multi_reg_write(struct regmap *map, struct reg_default *regs,383383+ int num_regs);382384int regmap_raw_write_async(struct regmap *map, unsigned int reg,383385 const void *val, size_t val_len);384386int regmap_read(struct regmap *map, unsigned int reg, unsigned int *val);