HID: uclogic: Re-initialize tablets on resume
authorNikolai Kondrashov <spbnick@gmail.com>
Sun, 10 Feb 2019 10:13:52 +0000 (12:13 +0200)
committerBenjamin Tissoires <benjamin.tissoires@redhat.com>
Thu, 21 Feb 2019 11:00:53 +0000 (12:00 +0100)
Re-initialize UC-Logic tablets on resume. UC-Logic tablet initialization
and parameter retrieval cannot be separated for the large part, so
simply discard the retrieved parameters after initialization.

Signed-off-by: Nikolai Kondrashov <spbnick@gmail.com>
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
drivers/hid/hid-uclogic-core.c

index 72a3a43..8f8e445 100644 (file)
@@ -178,6 +178,23 @@ failure:
        return rc;
 }
 
+#ifdef CONFIG_PM
+static int uclogic_resume(struct hid_device *hdev)
+{
+       int rc;
+       struct uclogic_params params;
+
+       /* Re-initialize the device, but discard parameters */
+       rc = uclogic_params_init(&params, hdev);
+       if (rc != 0)
+               hid_err(hdev, "failed to re-initialize the device\n");
+       else
+               uclogic_params_cleanup(&params);
+
+       return rc;
+}
+#endif
+
 static int uclogic_raw_event(struct hid_device *hdev,
                                struct hid_report *report,
                                u8 *data, int size)
@@ -261,6 +278,10 @@ static struct hid_driver uclogic_driver = {
        .raw_event = uclogic_raw_event,
        .input_mapping = uclogic_input_mapping,
        .input_configured = uclogic_input_configured,
+#ifdef CONFIG_PM
+       .resume           = uclogic_resume,
+       .reset_resume     = uclogic_resume,
+#endif
 };
 module_hid_driver(uclogic_driver);