return ret;
 }
 
-static int quickstart_acpi_config(struct quickstart_acpi *quickstart, char *bid)
+static int quickstart_acpi_config(struct quickstart_acpi *quickstart)
 {
-       int len = strlen(bid);
+       char *bid = acpi_device_bid(quickstart->device);
+       char *name;
        int ret;
 
+       name = kmalloc(strlen(bid) + 1, GFP_KERNEL);
+       if (!name)
+               return -ENOMEM;
+
        /* Add button to list */
        ret = quickstart_btnlst_add(&quickstart->btn);
-       if (ret)
+       if (ret < 0) {
+               kfree(name);
                return ret;
-
-       quickstart->btn->name = kzalloc(len + 1, GFP_KERNEL);
-       if (!quickstart->btn->name) {
-               quickstart_btnlst_free();
-               return -ENOMEM;
        }
+
+       quickstart->btn->name = name;
        strcpy(quickstart->btn->name, bid);
 
        return 0;
        device->driver_data = quickstart;
 
        /* Add button to list and initialize some stuff */
-       ret = quickstart_acpi_config(quickstart, acpi_device_bid(device));
+       ret = quickstart_acpi_config(quickstart);
        if (ret < 0)
                goto fail_config;