Skip to content

Commit

Permalink
HID: hiddev: use hid_hw_power instead of usbhid_get/put_power
Browse files Browse the repository at this point in the history
Instead of calling into usbhid code directly, let's use the standard
accessors for the transport HID drivers, and stop clobbering their error
codes with -EIO.

This also allows us to remove usbhid_get/put_power(), leaving only
usbhid_power().

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>
  • Loading branch information
Dmitry Torokhov authored and Jiri Kosina committed Jun 8, 2017
1 parent d36b7d4 commit 9a83563
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 27 deletions.
22 changes: 5 additions & 17 deletions drivers/hid/usbhid/hid-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -1203,16 +1203,19 @@ static void usbhid_stop(struct hid_device *hid)

static int usbhid_power(struct hid_device *hid, int lvl)
{
struct usbhid_device *usbhid = hid->driver_data;
int r = 0;

switch (lvl) {
case PM_HINT_FULLON:
r = usbhid_get_power(hid);
r = usb_autopm_get_interface(usbhid->intf);
break;

case PM_HINT_NORMAL:
usbhid_put_power(hid);
usb_autopm_put_interface(usbhid->intf);
break;
}

return r;
}

Expand Down Expand Up @@ -1492,21 +1495,6 @@ static int hid_post_reset(struct usb_interface *intf)
return 0;
}

int usbhid_get_power(struct hid_device *hid)
{
struct usbhid_device *usbhid = hid->driver_data;

return usb_autopm_get_interface(usbhid->intf);
}

void usbhid_put_power(struct hid_device *hid)
{
struct usbhid_device *usbhid = hid->driver_data;

usb_autopm_put_interface(usbhid->intf);
}


#ifdef CONFIG_PM
static int hid_resume_common(struct hid_device *hid, bool driver_suspended)
{
Expand Down
14 changes: 6 additions & 8 deletions drivers/hid/usbhid/hiddev.c
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ static int hiddev_release(struct inode * inode, struct file * file)
if (!--list->hiddev->open) {
if (list->hiddev->exist) {
hid_hw_close(list->hiddev->hid);
usbhid_put_power(list->hiddev->hid);
hid_hw_power(list->hiddev->hid, PM_HINT_NORMAL);
} else {
mutex_unlock(&list->hiddev->existancelock);
kfree(list->hiddev);
Expand Down Expand Up @@ -299,19 +299,17 @@ static int hiddev_open(struct inode *inode, struct file *file)
if (!list->hiddev->open++)
if (list->hiddev->exist) {
struct hid_device *hid = hiddev->hid;
res = usbhid_get_power(hid);
if (res < 0) {
res = -EIO;
res = hid_hw_power(hid, PM_HINT_FULLON);
if (res < 0)
goto bail_unlock;
}
res = hid_hw_open(hid);
if (res < 0)
goto bail_put_power;
goto bail_normal_power;
}
mutex_unlock(&hiddev->existancelock);
return 0;
bail_put_power:
usbhid_put_power(hid);
bail_normal_power:
hid_hw_power(hid, PM_HINT_NORMAL);
bail_unlock:
mutex_unlock(&hiddev->existancelock);
bail:
Expand Down
2 changes: 0 additions & 2 deletions drivers/hid/usbhid/usbhid.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,6 @@

/* API provided by hid-core.c for USB HID drivers */
void usbhid_init_reports(struct hid_device *hid);
int usbhid_get_power(struct hid_device *hid);
void usbhid_put_power(struct hid_device *hid);
struct usb_interface *usbhid_find_interface(int minor);

/* iofl flags */
Expand Down

0 comments on commit 9a83563

Please sign in to comment.