return -EINVAL;
        }
 
+       rbtn_data = devm_kzalloc(&device->dev, sizeof(*rbtn_data), GFP_KERNEL);
+       if (!rbtn_data)
+               return -ENOMEM;
+
        ret = rbtn_acquire(device, true);
        if (ret < 0) {
                dev_err(&device->dev, "Cannot enable device\n");
                return ret;
        }
 
-       rbtn_data = devm_kzalloc(&device->dev, sizeof(*rbtn_data), GFP_KERNEL);
-       if (!rbtn_data)
-               return -ENOMEM;
-
        rbtn_data->type = type;
        device->driver_data = rbtn_data;
 
                break;
        default:
                ret = -EINVAL;
+               break;
        }
+       if (ret)
+               rbtn_acquire(device, false);
 
        return ret;
-
 }
 
 static void rbtn_remove(struct acpi_device *device)
        }
 
        rbtn_acquire(device, false);
-       device->driver_data = NULL;
 }
 
 static void rbtn_notify(struct acpi_device *device, u32 event)