switch (config->id) {
        case NVMEM_DEVID_NONE:
-               dev_set_name(&nvmem->dev, "%s", config->name);
+               rval = dev_set_name(&nvmem->dev, "%s", config->name);
                break;
        case NVMEM_DEVID_AUTO:
-               dev_set_name(&nvmem->dev, "%s%d", config->name, nvmem->id);
+               rval = dev_set_name(&nvmem->dev, "%s%d", config->name, nvmem->id);
                break;
        default:
-               dev_set_name(&nvmem->dev, "%s%d",
+               rval = dev_set_name(&nvmem->dev, "%s%d",
                             config->name ? : "nvmem",
                             config->name ? config->id : nvmem->id);
                break;
        }
 
+       if (rval) {
+               ida_free(&nvmem_ida, nvmem->id);
+               kfree(nvmem);
+               return ERR_PTR(rval);
+       }
+
        nvmem->read_only = device_property_present(config->dev, "read-only") ||
                           config->read_only || !nvmem->reg_write;