HID: hid-mosart: support suspend/resume
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>
This commit is contained in:
Родитель
ad6d426702
Коммит
c25bcd3400
|
@ -234,6 +234,19 @@ static int mosart_probe(struct hid_device *hdev, const struct hid_device_id *id)
|
||||||
return ret;
|
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)
|
static void mosart_remove(struct hid_device *hdev)
|
||||||
{
|
{
|
||||||
hid_hw_stop(hdev);
|
hid_hw_stop(hdev);
|
||||||
|
@ -262,6 +275,9 @@ static struct hid_driver mosart_driver = {
|
||||||
.input_mapped = mosart_input_mapped,
|
.input_mapped = mosart_input_mapped,
|
||||||
.usage_table = mosart_grabbed_usages,
|
.usage_table = mosart_grabbed_usages,
|
||||||
.event = mosart_event,
|
.event = mosart_event,
|
||||||
|
#ifdef CONFIG_PM
|
||||||
|
.reset_resume = mosart_reset_resume,
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init mosart_init(void)
|
static int __init mosart_init(void)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче