]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/base/regmap/regmap.c
Merge remote-tracking branches 'regmap/topic/defaults', 'regmap/topic/irq' and 'regma...
[linux.git] / drivers / base / regmap / regmap.c
index e5eef6f1408a22de71f5e217a26ea64aee629d8b..7111d04f26218be0529f4702cb1b361ae07a0b00 100644 (file)
@@ -945,11 +945,10 @@ EXPORT_SYMBOL_GPL(devm_regmap_init);
 static void regmap_field_init(struct regmap_field *rm_field,
        struct regmap *regmap, struct reg_field reg_field)
 {
-       int field_bits = reg_field.msb - reg_field.lsb + 1;
        rm_field->regmap = regmap;
        rm_field->reg = reg_field.reg;
        rm_field->shift = reg_field.lsb;
-       rm_field->mask = ((BIT(field_bits) - 1) << reg_field.lsb);
+       rm_field->mask = GENMASK(reg_field.msb, reg_field.lsb);
        rm_field->id_size = reg_field.id_size;
        rm_field->id_offset = reg_field.id_offset;
 }
@@ -2318,7 +2317,7 @@ int regmap_bulk_read(struct regmap *map, unsigned int reg, void *val,
                                          &ival);
                        if (ret != 0)
                                return ret;
-                       memcpy(val + (i * val_bytes), &ival, val_bytes);
+                       map->format.format_val(val + (i * val_bytes), ival, 0);
                }
        }
 
@@ -2583,10 +2582,7 @@ int regmap_register_patch(struct regmap *map, const struct reg_default *regs,
        map->async = true;
 
        ret = _regmap_multi_reg_write(map, regs, num_regs);
-       if (ret != 0)
-               goto out;
 
-out:
        map->async = false;
        map->cache_bypass = bypass;