On Fri, Mar 18, 2022 at 03:37:20PM +0100, Takashi Iwai wrote: > So is it like below? I'll build another kernel with that. > > > Thanks! > > Takashi > > -- 8< -- > From: José Expósito <jose.exposito89@xxxxxxxxx> > Subject: [PATCH] HID: multitouch: fix Dell Precision 7550 and 7750 button type > > The touchpad present in the Dell Precision 7550 and 7750 laptops > reports a HID_DG_BUTTONTYPE of type MT_BUTTONTYPE_CLICKPAD. However, > the device is not a clickpad, it is a touchpad with physical buttons. > > In order to fix this issue, a quirk for the device was introduced in > libinput [1] [2] to disable the INPUT_PROP_BUTTONPAD property: > > [Precision 7x50 Touchpad] > MatchBus=i2c > MatchUdevType=touchpad > MatchDMIModalias=dmi:*svnDellInc.:pnPrecision7?50* > AttrInputPropDisable=INPUT_PROP_BUTTONPAD > > However, because of the change introduced in 37ef4c19b4 ("Input: clear > BTN_RIGHT/MIDDLE on buttonpads") the BTN_RIGHT key bit is not mapped > anymore breaking the device right click button. > > In order to fix the issue, create a quirk for the device forcing its > button type to touchpad regardless of the value reported by the > firmware. > > [1] https://gitlab.freedesktop.org/libinput/libinput/-/merge_requests/481 > [2] https://bugzilla.redhat.com/show_bug.cgi?id=1868789 > > [ modified MT_CLS_BUTTONTYPE_TOUCHPAD quirk bits to base on MT_CLS_WIN8 > as suggested by Benjamin -- tiwai ] > > Fixes: 37ef4c19b4 ("Input: clear BTN_RIGHT/MIDDLE on buttonpads") > Signed-off-by: José Expósito <jose.exposito89@xxxxxxxxx> > Signed-off-by: Takashi Iwai <tiwai@xxxxxxx> > > --- > drivers/hid/hid-ids.h | 3 +++ > drivers/hid/hid-multitouch.c | 20 ++++++++++++++++++++ > 2 files changed, 23 insertions(+) > > --- a/drivers/hid/hid-ids.h > +++ b/drivers/hid/hid-ids.h > @@ -285,6 +285,9 @@ > > #define USB_VENDOR_ID_CIDC 0x1677 > > +#define USB_VENDOR_ID_CIRQUE_CORP 0x0488 > +#define USB_DEVICE_ID_DELL_PRECISION_7X50 0x120A > + > #define USB_VENDOR_ID_CJTOUCH 0x24b8 > #define USB_DEVICE_ID_CJTOUCH_MULTI_TOUCH_0020 0x0020 > #define USB_DEVICE_ID_CJTOUCH_MULTI_TOUCH_0040 0x0040 > --- a/drivers/hid/hid-multitouch.c > +++ b/drivers/hid/hid-multitouch.c > @@ -71,6 +71,7 @@ MODULE_LICENSE("GPL"); > #define MT_QUIRK_SEPARATE_APP_REPORT BIT(19) > #define MT_QUIRK_FORCE_MULTI_INPUT BIT(20) > #define MT_QUIRK_DISABLE_WAKEUP BIT(21) > +#define MT_QUIRK_BUTTONTYPE_TOUCHPAD BIT(22) > > #define MT_INPUTMODE_TOUCHSCREEN 0x02 > #define MT_INPUTMODE_TOUCHPAD 0x03 > @@ -194,6 +195,7 @@ static void mt_post_parse(struct mt_devi > #define MT_CLS_WIN_8_FORCE_MULTI_INPUT 0x0015 > #define MT_CLS_WIN_8_DISABLE_WAKEUP 0x0016 > #define MT_CLS_WIN_8_NO_STICKY_FINGERS 0x0017 > +#define MT_CLS_BUTTONTYPE_TOUCHPAD 0x0018 > > /* vendor specific classes */ > #define MT_CLS_3M 0x0101 > @@ -302,6 +304,15 @@ static const struct mt_class mt_classes[ > MT_QUIRK_CONTACT_CNT_ACCURATE | > MT_QUIRK_WIN8_PTP_BUTTONS, > .export_all_inputs = true }, > + { .name = MT_CLS_BUTTONTYPE_TOUCHPAD, > + .quirks = MT_QUIRK_ALWAYS_VALID | > + MT_QUIRK_IGNORE_DUPLICATES | > + MT_QUIRK_HOVERING | > + MT_QUIRK_CONTACT_CNT_ACCURATE | > + MT_QUIRK_STICKY_FINGERS | > + MT_QUIRK_WIN8_PTP_BUTTONS |, > + MT_QUIRK_BUTTONTYPE_TOUCHPAD, > + .export_all_inputs = true }, > > /* > * vendor specific classes > @@ -1286,6 +1297,9 @@ static int mt_touch_input_configured(str > (app->buttons_count == 1)) > td->is_buttonpad = true; > > + if (app->quirks & MT_QUIRK_BUTTONTYPE_TOUCHPAD) > + td->is_buttonpad = false; > + > if (td->is_buttonpad) > __set_bit(INPUT_PROP_BUTTONPAD, input->propbit); > > @@ -1875,6 +1889,12 @@ static const struct hid_device_id mt_dev > MT_USB_DEVICE(USB_VENDOR_ID_CHUNGHWAT, > USB_DEVICE_ID_CHUNGHWAT_MULTITOUCH) }, > > + /* Cirque Corp (Dell Precision 7550 and 7750 touchpad) */ > + { .driver_data = MT_CLS_BUTTONTYPE_TOUCHPAD, > + HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8, > + USB_VENDOR_ID_CIRQUE_CORP, > + USB_DEVICE_ID_DELL_PRECISION_7X50) }, > + > /* CJTouch panels */ > { .driver_data = MT_CLS_NSMU, > MT_USB_DEVICE(USB_VENDOR_ID_CJTOUCH, Yes, that is the correct patch. The original reporter just emailed me and confirmed that the patch works and that the class used by the device is MT_CLS_WIN_8, as Benjamin pointed out. I'll wait a couple of days before sending the patch to the mailing list so the other users can test it as well. Thanks for the quick response, Jose