diff options
author | Benjamin Tissoires <benjamin.tissoires@redhat.com> | 2018-10-12 16:05:25 +0200 |
---|---|---|
committer | Jiri Kosina <jkosina@suse.cz> | 2018-10-26 17:27:13 +0200 |
commit | 7dd8db68949a7acc5bd528ee0ecb8f8720f49921 (patch) | |
tree | b79112615f9b8a838019c093434b666037278633 | |
parent | 6298944d8f57f40ee2a3e6dcea1253e78d7a9969 (diff) | |
download | hid-for-4.20/upstream-fixes.tar.gz |
HID: alps: allow incoming reports when only the trackstick is openedfor-4.20/upstream-fixes
If userspace only reads the trackstick node, and no one is listening to
the touchpad nor the hidraw node then, the device is not powered on.
Add open/close callbacks to allow users to disable the touchpad in Gnome
while keeping the trackstick active.
Link: https://bugzilla.redhat.com/show_bug.cgi?id=1559632
Link: https://gitlab.gnome.org/GNOME/mutter/issues/128
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
-rw-r--r-- | drivers/hid/hid-alps.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/hid/hid-alps.c b/drivers/hid/hid-alps.c index aec253b4415689..3cd7229b6e5465 100644 --- a/drivers/hid/hid-alps.c +++ b/drivers/hid/hid-alps.c @@ -660,6 +660,20 @@ exit: return ret; } +static int alps_sp_open(struct input_dev *dev) +{ + struct hid_device *hid = input_get_drvdata(dev); + + return hid_hw_open(hid); +} + +static void alps_sp_close(struct input_dev *dev) +{ + struct hid_device *hid = input_get_drvdata(dev); + + hid_hw_close(hid); +} + static int alps_input_configured(struct hid_device *hdev, struct hid_input *hi) { struct alps_dev *data = hid_get_drvdata(hdev); @@ -733,6 +747,10 @@ static int alps_input_configured(struct hid_device *hdev, struct hid_input *hi) input2->id.version = input->id.version; input2->dev.parent = input->dev.parent; + input_set_drvdata(input2, hdev); + input2->open = alps_sp_open; + input2->close = alps_sp_close; + __set_bit(EV_KEY, input2->evbit); data->sp_btn_cnt = (data->sp_btn_info & 0x0F); for (i = 0; i < data->sp_btn_cnt; i++) |