diff options
Diffstat (limited to 'drivers/hid/usbhid/hid-core.c')
-rw-r--r-- | drivers/hid/usbhid/hid-core.c | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c index 8e0c4bf94ebc..1f9e56bfeaa0 100644 --- a/drivers/hid/usbhid/hid-core.c +++ b/drivers/hid/usbhid/hid-core.c | |||
@@ -1493,7 +1493,7 @@ static int hid_suspend(struct usb_interface *intf, pm_message_t message) | |||
1493 | { | 1493 | { |
1494 | struct hid_device *hid = usb_get_intfdata(intf); | 1494 | struct hid_device *hid = usb_get_intfdata(intf); |
1495 | struct usbhid_device *usbhid = hid->driver_data; | 1495 | struct usbhid_device *usbhid = hid->driver_data; |
1496 | int status; | 1496 | int status = 0; |
1497 | bool driver_suspended = false; | 1497 | bool driver_suspended = false; |
1498 | 1498 | ||
1499 | if (PMSG_IS_AUTO(message)) { | 1499 | if (PMSG_IS_AUTO(message)) { |
@@ -1520,19 +1520,15 @@ static int hid_suspend(struct usb_interface *intf, pm_message_t message) | |||
1520 | } | 1520 | } |
1521 | 1521 | ||
1522 | } else { | 1522 | } else { |
1523 | if (hid->driver && hid->driver->suspend) { | 1523 | /* TODO: resume() might need to handle suspend failure */ |
1524 | if (hid->driver && hid->driver->suspend) | ||
1524 | status = hid->driver->suspend(hid, message); | 1525 | status = hid->driver->suspend(hid, message); |
1525 | if (status < 0) | ||
1526 | return status; | ||
1527 | } | ||
1528 | driver_suspended = true; | 1526 | driver_suspended = true; |
1529 | spin_lock_irq(&usbhid->lock); | 1527 | spin_lock_irq(&usbhid->lock); |
1530 | set_bit(HID_SUSPENDED, &usbhid->iofl); | 1528 | set_bit(HID_SUSPENDED, &usbhid->iofl); |
1531 | spin_unlock_irq(&usbhid->lock); | 1529 | spin_unlock_irq(&usbhid->lock); |
1532 | if (usbhid_wait_io(hid) < 0) { | 1530 | if (usbhid_wait_io(hid) < 0) |
1533 | status = -EIO; | 1531 | status = -EIO; |
1534 | goto failed; | ||
1535 | } | ||
1536 | } | 1532 | } |
1537 | 1533 | ||
1538 | hid_cancel_delayed_stuff(usbhid); | 1534 | hid_cancel_delayed_stuff(usbhid); |
@@ -1544,7 +1540,7 @@ static int hid_suspend(struct usb_interface *intf, pm_message_t message) | |||
1544 | goto failed; | 1540 | goto failed; |
1545 | } | 1541 | } |
1546 | dev_dbg(&intf->dev, "suspend\n"); | 1542 | dev_dbg(&intf->dev, "suspend\n"); |
1547 | return 0; | 1543 | return status; |
1548 | 1544 | ||
1549 | failed: | 1545 | failed: |
1550 | hid_resume_common(hid, driver_suspended); | 1546 | hid_resume_common(hid, driver_suspended); |