error = hid_parse(hdev);
        if (error) {
                hid_err(hdev, "parse failed\n");
-               goto fail;
+               return error;
        }
 
        if (hdev->collection->usage == COUGAR_VENDOR_USAGE) {
        error = hid_hw_start(hdev, connect_mask);
        if (error) {
                hid_err(hdev, "hw start failed\n");
-               goto fail;
+               return error;
        }
 
        error = cougar_bind_shared_data(hdev, cougar);
 
 fail_stop_and_cleanup:
        hid_hw_stop(hdev);
-fail:
-       hid_set_drvdata(hdev, NULL);
        return error;
 }
 
 
        return ret;
 }
 
-static void gfrm_remove(struct hid_device *hdev)
-{
-       hid_hw_stop(hdev);
-       hid_set_drvdata(hdev, NULL);
-}
-
 static const struct hid_device_id gfrm_devices[] = {
        { HID_BLUETOOTH_DEVICE(0x58, 0x2000),
                .driver_data = GFRM100 },
        .name = "gfrm",
        .id_table = gfrm_devices,
        .probe = gfrm_probe,
-       .remove = gfrm_remove,
        .input_mapping = gfrm_input_mapping,
        .raw_event = gfrm_raw_event,
        .input_configured = gfrm_input_configured,
 
 
        led_classdev_unregister(&data_pointer->led_micmute);
        led_classdev_unregister(&data_pointer->led_mute);
-
-       hid_set_drvdata(hdev, NULL);
 }
 
 static void lenovo_remove_cptkbd(struct hid_device *hdev)
 
        data = kzalloc(sizeof(struct picolcd_data), GFP_KERNEL);
        if (data == NULL) {
                hid_err(hdev, "can't allocate space for Minibox PicoLCD device data\n");
-               error = -ENOMEM;
-               goto err_no_cleanup;
+               return -ENOMEM;
        }
 
        spin_lock_init(&data->lock);
        hid_hw_stop(hdev);
 err_cleanup_data:
        kfree(data);
-err_no_cleanup:
-       hid_set_drvdata(hdev, NULL);
-
        return error;
 }
 
        picolcd_exit_cir(data);
        picolcd_exit_keys(data);
 
-       hid_set_drvdata(hdev, NULL);
        mutex_destroy(&data->mutex);
        /* Finally, clean up the picolcd data itself */
        kfree(data);
 
        }
        spin_unlock_irqrestore(&data->lock, flags);
        mfd_remove_devices(&hdev->dev);
-       hid_set_drvdata(hdev, NULL);
        mutex_destroy(&data->mutex);
 }