HID: multitouch: do not blindly set EV_KEY or EV_ABS bits
PATCH 1/1 HID: multitouch: do not blindly set EV_KEY or EV_ABS bits
Now that input core insists on having dev->absinfo when device claims to generate EV_ABS in its dev->evbit, we should not be blindly setting that bit.
The code in question might have been needed before input_set_abs_params() started setting EV_ABS in device's evbit, but not anymore, and is now breaking devices such as SMART SPNL-6075 Touchscreen.
---
Jiri, Benjamin, I marked it for stable as it causes regressions in 4.12 reported by users. Please take a look.
drivers/hid/hid-multitouch.c | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-)
drivers/hid/hid-multitouch.c +4 -12
@@ -595,16 +595,6 @@ static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,return 0 ; } -static int mt_touch_input_mapped (struct hid_device *hdev,struct hid_input *hi, -struct hid_field *field,struct hid_usage *usage, -unsigned long **bit,int *max) -{ -if (usage->type ==EV_KEY || usage->type ==EV_ABS ) -set_bit (usage->type, hi->input->evbit); - -return -1 ; -} -static int mt_compute_slot (struct mt_device *td,struct input_dev *input) {__s32 quirks = td->mtclass.quirks;
@@ -905,8 +895,10 @@ static int mt_input_mapped(struct hid_device *hdev, struct hid_input *hi,return 0 ;if (field->application ==HID_DG_TOUCHSCREEN || - field->application ==HID_DG_TOUCHPAD ) -return mt_touch_input_mapped (hdev, hi, field, usage, bit, max); + field->application ==HID_DG_TOUCHPAD ) { +/* We own these mappings, tell hid-input to ignore them */ +return -1 ; + }/* let hid-core decide for the others */ return 0 ;
Signature · 5 lines
2.13.2.725.g09c95d1e9-goog -- Dmitry
Quoted 13 lines · Dmitry Torokhov
Now that input core insists on having
dev->absinfowhen device claims to generateEV_ABSin itsdev->evbit, we should not be blindly setting that bit.The code in question might have been needed before
input_set_abs_params()started settingEV_ABSin device's evbit, but not anymore, and is now breaking devices such as SMART SPNL-6075 Touchscreen.Fixes 6ecfe51b4082 ("Input: refuse to register absolute devices ...")Reported-by Matthias Fend <[email protected]>Tested-by Matthias Fend <[email protected]>Signed-off-by Dmitry Torokhov <[email protected]>
Quoted 4 lines
---
Jiri, Benjamin, I marked it for stable as it causes regressions in 4.12 reported by users. Please take a look.
set_bit(usage->type, input->evbit); is called by hid-input.c when the return code is positive, so we should be safe here.
Cheers,
Benjamin
Quoted 44 lines
drivers/hid/hid-multitouch.c | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-)drivers/hid/hid-multitouch.c +4
-12@@ -595,16 +595,6 @@ static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,return 0 ; } -static int mt_touch_input_mapped (struct hid_device *hdev,struct hid_input *hi, -struct hid_field *field,struct hid_usage *usage, -unsigned long **bit,int *max) -{ -if (usage->type ==EV_KEY || usage->type ==EV_ABS ) -set_bit (usage->type, hi->input->evbit); - -return -1 ; -} -static int mt_compute_slot (struct mt_device *td,struct input_dev *input) {__s32 quirks = td->mtclass.quirks;@@ -905,8 +895,10 @@ static int mt_input_mapped(struct hid_device *hdev, struct hid_input *hi,return 0 ;if (field->application ==HID_DG_TOUCHSCREEN || - field->application ==HID_DG_TOUCHPAD ) -return mt_touch_input_mapped (hdev, hi, field, usage, bit, max); + field->application ==HID_DG_TOUCHPAD ) { +/* We own these mappings, tell hid-input to ignore them */ +return -1 ; + }/* let hid-core decide for the others */ return 0 ;Signature · 5 lines
2.13.2.725.g09c95d1e9-goog -- Dmitry
Jiri Kosina
maintainerQuoted 13 lines · Dmitry Torokhov
Now that input core insists on having
dev->absinfowhen device claims to generateEV_ABSin itsdev->evbit, we should not be blindly setting that bit.The code in question might have been needed before
input_set_abs_params()started settingEV_ABSin device's evbit, but not anymore, and is now breaking devices such as SMART SPNL-6075 Touchscreen.Fixes 6ecfe51b4082 ("Input: refuse to register absolute devices ...")Reported-by Matthias Fend <[email protected]>Tested-by Matthias Fend <[email protected]>Signed-off-by Dmitry Torokhov <[email protected]>
Quoted 4 lines
---
Jiri, Benjamin, I marked it for stable as it causes regressions in 4.12 reported by users. Please take a look.
Thanks for a quick fix, Dmitry. Queued in for-4.13/upstream-fixes branch.
Signature · 2 lines
Jiri Kosina SUSE Labs