HID: hid-mosart: support suspend/resume
authorBenjamin Tissoires <benjamin.tissoires@enac.fr>
Mon, 13 Dec 2010 14:59:13 +0000 (15:59 +0100)
committerJiri Kosina <jkosina@suse.cz>
Tue, 14 Dec 2010 10:40:51 +0000 (11:40 +0100)
The device has 2 modes. The first one is an emulation of a touchscreen
by sending left and right button, and the second mode is the one used in
dual-touch (sending trackingID, touch and else).

In case of a suspend/resume, the device switch back to the first mode
described above (with left and right buttons).
This adds a hook in .reset_resume for the device to be switched to
the correct mode (I just copied the code in mosart_probe).

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@enac.fr>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/hid-mosart.c

index acd8a4983c09569cc10191a6a9e4b862d5c64ca9..15d03811f96a08d90efc80661f71eba0a7675273 100644 (file)
@@ -234,6 +234,19 @@ static int mosart_probe(struct hid_device *hdev, const struct hid_device_id *id)
        return ret;
 }
 
+#ifdef CONFIG_PM
+static int mosart_reset_resume(struct hid_device *hdev)
+{
+       struct hid_report_enum *re = hdev->report_enum
+                                               + HID_FEATURE_REPORT;
+       struct hid_report *r = re->report_id_hash[7];
+
+       r->field[0]->value[0] = 0x02;
+       usbhid_submit_report(hdev, r, USB_DIR_OUT);
+       return 0;
+}
+#endif
+
 static void mosart_remove(struct hid_device *hdev)
 {
        hid_hw_stop(hdev);
@@ -262,6 +275,9 @@ static struct hid_driver mosart_driver = {
        .input_mapped = mosart_input_mapped,
        .usage_table = mosart_grabbed_usages,
        .event = mosart_event,
+#ifdef CONFIG_PM
+       .reset_resume = mosart_reset_resume,
+#endif
 };
 
 static int __init mosart_init(void)