int regmap_register_patch(struct regmap *map, const struct reg_default *regs,
                          int num_regs)
 {
+       struct reg_default *p;
        int i, ret;
        bool bypass;
 
-       /* If needed the implementation can be extended to support this */
-       if (map->patch)
-               return -EBUSY;
-
        map->lock(map->lock_arg);
 
        bypass = map->cache_bypass;
                }
        }
 
-       map->patch = kcalloc(num_regs, sizeof(struct reg_default), GFP_KERNEL);
-       if (map->patch != NULL) {
-               memcpy(map->patch, regs,
-                      num_regs * sizeof(struct reg_default));
-               map->patch_regs = num_regs;
+       p = krealloc(map->patch,
+                    sizeof(struct reg_default) * (map->patch_regs + num_regs),
+                    GFP_KERNEL);
+       if (p) {
+               memcpy(p + map->patch_regs, regs, num_regs * sizeof(*regs));
+               map->patch = p;
+               map->patch_regs += num_regs;
        } else {
                ret = -ENOMEM;
        }