HID: hiddev: use hid_hw_open/close instead of usbhid_open/close
authorDmitry Torokhov <dmitry.torokhov@gmail.com>
Wed, 7 Jun 2017 06:59:31 +0000 (23:59 -0700)
committerJiri Kosina <jkosina@suse.cz>
Thu, 8 Jun 2017 11:56:08 +0000 (13:56 +0200)
Instead of calling into usbhid code directly, let's use the standard
accessors for the transport HID drivers, and stop clobbering their errors
with -EIO.

This also allows us make usbhid_open and close static.

Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/usbhid/hid-core.c
drivers/hid/usbhid/hiddev.c
drivers/hid/usbhid/usbhid.h

index 83772fa..fb0cf5d 100644 (file)
@@ -677,7 +677,7 @@ static int hid_get_class_descriptor(struct usb_device *dev, int ifnum,
        return result;
 }
 
-int usbhid_open(struct hid_device *hid)
+static int usbhid_open(struct hid_device *hid)
 {
        struct usbhid_device *usbhid = hid->driver_data;
        int res = 0;
@@ -722,7 +722,7 @@ done:
        return res;
 }
 
-void usbhid_close(struct hid_device *hid)
+static void usbhid_close(struct hid_device *hid)
 {
        struct usbhid_device *usbhid = hid->driver_data;
 
index 0e06368..b4f7147 100644 (file)
@@ -237,7 +237,7 @@ static int hiddev_release(struct inode * inode, struct file * file)
        mutex_lock(&list->hiddev->existancelock);
        if (!--list->hiddev->open) {
                if (list->hiddev->exist) {
-                       usbhid_close(list->hiddev->hid);
+                       hid_hw_close(list->hiddev->hid);
                        usbhid_put_power(list->hiddev->hid);
                } else {
                        mutex_unlock(&list->hiddev->existancelock);
@@ -282,11 +282,9 @@ static int hiddev_open(struct inode *inode, struct file *file)
         */
        if (list->hiddev->exist) {
                if (!list->hiddev->open++) {
-                       res = usbhid_open(hiddev->hid);
-                       if (res < 0) {
-                               res = -EIO;
+                       res = hid_hw_open(hiddev->hid);
+                       if (res < 0)
                                goto bail;
-                       }
                }
        } else {
                res = -ENODEV;
@@ -306,10 +304,14 @@ static int hiddev_open(struct inode *inode, struct file *file)
                                res = -EIO;
                                goto bail_unlock;
                        }
-                       usbhid_open(hid);
+                       res = hid_hw_open(hid);
+                       if (res < 0)
+                               goto bail_put_power;
                }
        mutex_unlock(&hiddev->existancelock);
        return 0;
+bail_put_power:
+       usbhid_put_power(hid);
 bail_unlock:
        mutex_unlock(&hiddev->existancelock);
 bail:
@@ -935,7 +937,7 @@ void hiddev_disconnect(struct hid_device *hid)
 
        if (hiddev->open) {
                mutex_unlock(&hiddev->existancelock);
-               usbhid_close(hiddev->hid);
+               hid_hw_close(hiddev->hid);
                wake_up_interruptible(&hiddev->wait);
        } else {
                mutex_unlock(&hiddev->existancelock);
index fa47d66..83ef5c1 100644 (file)
@@ -34,8 +34,6 @@
 #include <linux/input.h>
 
 /*  API provided by hid-core.c for USB HID drivers */
-void usbhid_close(struct hid_device *hid);
-int usbhid_open(struct hid_device *hid);
 void usbhid_init_reports(struct hid_device *hid);
 int usbhid_get_power(struct hid_device *hid);
 void usbhid_put_power(struct hid_device *hid);