aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hid/usbhid/hid-core.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/hid/usbhid/hid-core.c')
-rw-r--r--drivers/hid/usbhid/hid-core.c14
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);