|
|
@@ -561,6 +561,16 @@ struct regmap *__regmap_init(struct device *dev,
|
|
|
}
|
|
|
map->lock_arg = map;
|
|
|
}
|
|
|
+
|
|
|
+ /*
|
|
|
+ * When we write in fast-paths with regmap_bulk_write() don't allocate
|
|
|
+ * scratch buffers with sleeping allocations.
|
|
|
+ */
|
|
|
+ if ((bus && bus->fast_io) || config->fast_io)
|
|
|
+ map->alloc_flags = GFP_ATOMIC;
|
|
|
+ else
|
|
|
+ map->alloc_flags = GFP_KERNEL;
|
|
|
+
|
|
|
map->format.reg_bytes = DIV_ROUND_UP(config->reg_bits, 8);
|
|
|
map->format.pad_bytes = config->pad_bits / 8;
|
|
|
map->format.val_bytes = DIV_ROUND_UP(config->val_bits, 8);
|
|
|
@@ -1786,7 +1796,7 @@ out:
|
|
|
if (!val_count)
|
|
|
return -EINVAL;
|
|
|
|
|
|
- wval = kmemdup(val, val_count * val_bytes, GFP_KERNEL);
|
|
|
+ wval = kmemdup(val, val_count * val_bytes, map->alloc_flags);
|
|
|
if (!wval) {
|
|
|
dev_err(map->dev, "Error in memory allocation\n");
|
|
|
return -ENOMEM;
|