diff options
| author | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2017-06-07 02:59:32 -0400 |
|---|---|---|
| committer | Jiri Kosina <jkosina@suse.cz> | 2017-06-08 07:56:09 -0400 |
| commit | 9a83563fb3f926cbf0d5992d5c70d760c445ba09 (patch) | |
| tree | 1e30ec96a2628fee9a1ada2641f7c68103372982 | |
| parent | d36b7d4c271b2f93127e7e7cc007b5768a296594 (diff) | |
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: 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>
| -rw-r--r-- | drivers/hid/usbhid/hid-core.c | 22 | ||||
| -rw-r--r-- | drivers/hid/usbhid/hiddev.c | 14 | ||||
| -rw-r--r-- | drivers/hid/usbhid/usbhid.h | 2 |
3 files changed, 11 insertions, 27 deletions
diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c index fb0cf5d70504..62b660622265 100644 --- a/drivers/hid/usbhid/hid-core.c +++ b/drivers/hid/usbhid/hid-core.c | |||
| @@ -1203,16 +1203,19 @@ static void usbhid_stop(struct hid_device *hid) | |||
| 1203 | 1203 | ||
| 1204 | static int usbhid_power(struct hid_device *hid, int lvl) | 1204 | static int usbhid_power(struct hid_device *hid, int lvl) |
| 1205 | { | 1205 | { |
| 1206 | struct usbhid_device *usbhid = hid->driver_data; | ||
| 1206 | int r = 0; | 1207 | int r = 0; |
| 1207 | 1208 | ||
| 1208 | switch (lvl) { | 1209 | switch (lvl) { |
| 1209 | case PM_HINT_FULLON: | 1210 | case PM_HINT_FULLON: |
| 1210 | r = usbhid_get_power(hid); | 1211 | r = usb_autopm_get_interface(usbhid->intf); |
| 1211 | break; | 1212 | break; |
| 1213 | |||
| 1212 | case PM_HINT_NORMAL: | 1214 | case PM_HINT_NORMAL: |
| 1213 | usbhid_put_power(hid); | 1215 | usb_autopm_put_interface(usbhid->intf); |
| 1214 | break; | 1216 | break; |
| 1215 | } | 1217 | } |
| 1218 | |||
| 1216 | return r; | 1219 | return r; |
| 1217 | } | 1220 | } |
| 1218 | 1221 | ||
| @@ -1492,21 +1495,6 @@ static int hid_post_reset(struct usb_interface *intf) | |||
| 1492 | return 0; | 1495 | return 0; |
| 1493 | } | 1496 | } |
| 1494 | 1497 | ||
| 1495 | int usbhid_get_power(struct hid_device *hid) | ||
| 1496 | { | ||
| 1497 | struct usbhid_device *usbhid = hid->driver_data; | ||
| 1498 | |||
| 1499 | return usb_autopm_get_interface(usbhid->intf); | ||
| 1500 | } | ||
| 1501 | |||
| 1502 | void usbhid_put_power(struct hid_device *hid) | ||
| 1503 | { | ||
| 1504 | struct usbhid_device *usbhid = hid->driver_data; | ||
| 1505 | |||
| 1506 | usb_autopm_put_interface(usbhid->intf); | ||
| 1507 | } | ||
| 1508 | |||
| 1509 | |||
| 1510 | #ifdef CONFIG_PM | 1498 | #ifdef CONFIG_PM |
| 1511 | static int hid_resume_common(struct hid_device *hid, bool driver_suspended) | 1499 | static int hid_resume_common(struct hid_device *hid, bool driver_suspended) |
| 1512 | { | 1500 | { |
diff --git a/drivers/hid/usbhid/hiddev.c b/drivers/hid/usbhid/hiddev.c index b4f714752245..7d749b19c27c 100644 --- a/drivers/hid/usbhid/hiddev.c +++ b/drivers/hid/usbhid/hiddev.c | |||
| @@ -238,7 +238,7 @@ static int hiddev_release(struct inode * inode, struct file * file) | |||
| 238 | if (!--list->hiddev->open) { | 238 | if (!--list->hiddev->open) { |
| 239 | if (list->hiddev->exist) { | 239 | if (list->hiddev->exist) { |
| 240 | hid_hw_close(list->hiddev->hid); | 240 | hid_hw_close(list->hiddev->hid); |
| 241 | usbhid_put_power(list->hiddev->hid); | 241 | hid_hw_power(list->hiddev->hid, PM_HINT_NORMAL); |
| 242 | } else { | 242 | } else { |
| 243 | mutex_unlock(&list->hiddev->existancelock); | 243 | mutex_unlock(&list->hiddev->existancelock); |
| 244 | kfree(list->hiddev); | 244 | kfree(list->hiddev); |
| @@ -299,19 +299,17 @@ static int hiddev_open(struct inode *inode, struct file *file) | |||
| 299 | if (!list->hiddev->open++) | 299 | if (!list->hiddev->open++) |
| 300 | if (list->hiddev->exist) { | 300 | if (list->hiddev->exist) { |
| 301 | struct hid_device *hid = hiddev->hid; | 301 | struct hid_device *hid = hiddev->hid; |
| 302 | res = usbhid_get_power(hid); | 302 | res = hid_hw_power(hid, PM_HINT_FULLON); |
| 303 | if (res < 0) { | 303 | if (res < 0) |
| 304 | res = -EIO; | ||
| 305 | goto bail_unlock; | 304 | goto bail_unlock; |
| 306 | } | ||
| 307 | res = hid_hw_open(hid); | 305 | res = hid_hw_open(hid); |
| 308 | if (res < 0) | 306 | if (res < 0) |
| 309 | goto bail_put_power; | 307 | goto bail_normal_power; |
| 310 | } | 308 | } |
| 311 | mutex_unlock(&hiddev->existancelock); | 309 | mutex_unlock(&hiddev->existancelock); |
| 312 | return 0; | 310 | return 0; |
| 313 | bail_put_power: | 311 | bail_normal_power: |
| 314 | usbhid_put_power(hid); | 312 | hid_hw_power(hid, PM_HINT_NORMAL); |
| 315 | bail_unlock: | 313 | bail_unlock: |
| 316 | mutex_unlock(&hiddev->existancelock); | 314 | mutex_unlock(&hiddev->existancelock); |
| 317 | bail: | 315 | bail: |
diff --git a/drivers/hid/usbhid/usbhid.h b/drivers/hid/usbhid/usbhid.h index 83ef5c14aa92..ffcd329b3c3b 100644 --- a/drivers/hid/usbhid/usbhid.h +++ b/drivers/hid/usbhid/usbhid.h | |||
| @@ -35,8 +35,6 @@ | |||
| 35 | 35 | ||
| 36 | /* API provided by hid-core.c for USB HID drivers */ | 36 | /* API provided by hid-core.c for USB HID drivers */ |
| 37 | void usbhid_init_reports(struct hid_device *hid); | 37 | void usbhid_init_reports(struct hid_device *hid); |
| 38 | int usbhid_get_power(struct hid_device *hid); | ||
| 39 | void usbhid_put_power(struct hid_device *hid); | ||
| 40 | struct usb_interface *usbhid_find_interface(int minor); | 38 | struct usb_interface *usbhid_find_interface(int minor); |
| 41 | 39 | ||
| 42 | /* iofl flags */ | 40 | /* iofl flags */ |
