Commit 9a83563f authored by Dmitry Torokhov's avatar Dmitry Torokhov Committed by Jiri Kosina

HID: hiddev: use hid_hw_power instead of usbhid_get/put_power

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: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
Reviewed-by: default avatarAndy Shevchenko <andy.shevchenko@gmail.com>
Reviewed-by: default avatarBenjamin Tissoires <benjamin.tissoires@redhat.com>
Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
parent d36b7d4c
...@@ -1203,16 +1203,19 @@ static void usbhid_stop(struct hid_device *hid) ...@@ -1203,16 +1203,19 @@ static void usbhid_stop(struct hid_device *hid)
static int usbhid_power(struct hid_device *hid, int lvl) static int usbhid_power(struct hid_device *hid, int lvl)
{ {
struct usbhid_device *usbhid = hid->driver_data;
int r = 0; int r = 0;
switch (lvl) { switch (lvl) {
case PM_HINT_FULLON: case PM_HINT_FULLON:
r = usbhid_get_power(hid); r = usb_autopm_get_interface(usbhid->intf);
break; break;
case PM_HINT_NORMAL: case PM_HINT_NORMAL:
usbhid_put_power(hid); usb_autopm_put_interface(usbhid->intf);
break; break;
} }
return r; return r;
} }
...@@ -1492,21 +1495,6 @@ static int hid_post_reset(struct usb_interface *intf) ...@@ -1492,21 +1495,6 @@ static int hid_post_reset(struct usb_interface *intf)
return 0; 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 #ifdef CONFIG_PM
static int hid_resume_common(struct hid_device *hid, bool driver_suspended) static int hid_resume_common(struct hid_device *hid, bool driver_suspended)
{ {
......
...@@ -238,7 +238,7 @@ static int hiddev_release(struct inode * inode, struct file * file) ...@@ -238,7 +238,7 @@ static int hiddev_release(struct inode * inode, struct file * file)
if (!--list->hiddev->open) { if (!--list->hiddev->open) {
if (list->hiddev->exist) { if (list->hiddev->exist) {
hid_hw_close(list->hiddev->hid); hid_hw_close(list->hiddev->hid);
usbhid_put_power(list->hiddev->hid); hid_hw_power(list->hiddev->hid, PM_HINT_NORMAL);
} else { } else {
mutex_unlock(&list->hiddev->existancelock); mutex_unlock(&list->hiddev->existancelock);
kfree(list->hiddev); kfree(list->hiddev);
...@@ -299,19 +299,17 @@ static int hiddev_open(struct inode *inode, struct file *file) ...@@ -299,19 +299,17 @@ static int hiddev_open(struct inode *inode, struct file *file)
if (!list->hiddev->open++) if (!list->hiddev->open++)
if (list->hiddev->exist) { if (list->hiddev->exist) {
struct hid_device *hid = hiddev->hid; struct hid_device *hid = hiddev->hid;
res = usbhid_get_power(hid); res = hid_hw_power(hid, PM_HINT_FULLON);
if (res < 0) { if (res < 0)
res = -EIO;
goto bail_unlock; goto bail_unlock;
}
res = hid_hw_open(hid); res = hid_hw_open(hid);
if (res < 0) if (res < 0)
goto bail_put_power; goto bail_normal_power;
} }
mutex_unlock(&hiddev->existancelock); mutex_unlock(&hiddev->existancelock);
return 0; return 0;
bail_put_power: bail_normal_power:
usbhid_put_power(hid); hid_hw_power(hid, PM_HINT_NORMAL);
bail_unlock: bail_unlock:
mutex_unlock(&hiddev->existancelock); mutex_unlock(&hiddev->existancelock);
bail: bail:
......
...@@ -35,8 +35,6 @@ ...@@ -35,8 +35,6 @@
/* API provided by hid-core.c for USB HID drivers */ /* API provided by hid-core.c for USB HID drivers */
void usbhid_init_reports(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);
struct usb_interface *usbhid_find_interface(int minor); struct usb_interface *usbhid_find_interface(int minor);
/* iofl flags */ /* iofl flags */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment