Use usb_get_dev() to increment the reference count of the usb device
structure in order to avoid releasing the structure while it is still in
use. And use usb_put_dev() to decrement the reference count and thus,
when it will be equal to 0 the structure will be released.
Signed-off-by: Salah Triki <salah.triki@gmail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
 {
        struct elo_priv *priv;
        int ret;
+       struct usb_device *udev;
 
        priv = kzalloc(sizeof(*priv), GFP_KERNEL);
        if (!priv)
                return -ENOMEM;
 
        INIT_DELAYED_WORK(&priv->work, elo_work);
-       priv->usbdev = interface_to_usbdev(to_usb_interface(hdev->dev.parent));
+       udev = interface_to_usbdev(to_usb_interface(hdev->dev.parent));
+       priv->usbdev = usb_get_dev(udev);
 
        hid_set_drvdata(hdev, priv);
 
 {
        struct elo_priv *priv = hid_get_drvdata(hdev);
 
+       usb_put_dev(priv->usbdev);
+
        hid_hw_stop(hdev);
        cancel_delayed_work_sync(&priv->work);
        kfree(priv);