Hi All, On 11/2/20 2:36 PM, Hans de Goede wrote: > Some quad/bluetooth keyboards, such as the Dinovo Edge (Y-RAY81) have a > builtin touchpad. In this case when asking the receiver for paired devices, > we get only 1 paired device with a device_type of REPORT_TYPE_KEYBOARD. > > This means that we do not instantiate a second dj_hiddev for the mouse > (as we normally would) and thus there is no place for us to forward the > mouse input reports to, causing the touchpad part of the keyboard to not > work. > > There is no way for us to detect these keyboards, so this commit adds > an array with device-ids for such keyboards and when a keyboard is on > this list it adds STD_MOUSE to the reports_supported bitmap for the > dj_hiddev created for the keyboard fixing the touchpad not working. > > Using a list of device-ids for this is not ideal, but there are only > very few such keyboards so this should be fine. Besides the Dinovo Edge, > other known wireless Logitech keyboards with a builtin touchpad are: > > * Dinovo Mini (TODO add its device-id to the list) > * K400 (uses a unifying receiver so is not affected) > * K600 (uses a unifying receiver so is not affected) > > Cc: stable@xxxxxxxxxxxxxxx > BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1811424 > Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx> ping? This is a bug fix for a regression caused by: Commit f2113c3020ef ("HID: logitech-dj: add support for Logitech Bluetooth Mini-Receiver") Specifically that commit caused the builtin touchpad to stop working on Logitech Dinovo Edge keyboards and this fixes this. I realize now that I forgot to add a: Fixes: f2113c3020ef ("HID: logitech-dj: add support for Logitech Bluetooth Mini-Receiver") Tag, let me know if you want a v2 for that. Regardless since this is a bug fix, it would be good if we can get this merged into one of the upcoming 5.10-rc#s. Even without the Dinovo Mini id added this is still worthwhile to get the reported regression fixed and we can add the Dinovo Mini id later. Regards, Hans > --- > drivers/hid/hid-logitech-dj.c | 19 +++++++++++++++++++ > 1 file changed, 19 insertions(+) > > diff --git a/drivers/hid/hid-logitech-dj.c b/drivers/hid/hid-logitech-dj.c > index ea1e40530f85..9ed7260b9593 100644 > --- a/drivers/hid/hid-logitech-dj.c > +++ b/drivers/hid/hid-logitech-dj.c > @@ -867,11 +867,23 @@ static void logi_dj_recv_queue_notification(struct dj_receiver_dev *djrcv_dev, > schedule_work(&djrcv_dev->work); > } > > +/* > + * Some quad/bluetooth keyboards have a builtin touchpad in this case we see > + * only 1 paired device with a device_type of REPORT_TYPE_KEYBOARD. For the > + * touchpad to work we must also forward mouse input reports to the dj_hiddev > + * created for the keyboard (instead of forwarding them to a second paired > + * device with a device_type of REPORT_TYPE_MOUSE as we normally would). > + */ > +static const u16 kbd_builtin_touchpad_ids[] = { > + 0xb309, /* Dinovo Edge */ > +}; > + > static void logi_hidpp_dev_conn_notif_equad(struct hid_device *hdev, > struct hidpp_event *hidpp_report, > struct dj_workitem *workitem) > { > struct dj_receiver_dev *djrcv_dev = hid_get_drvdata(hdev); > + int i, id; > > workitem->type = WORKITEM_TYPE_PAIRED; > workitem->device_type = hidpp_report->params[HIDPP_PARAM_DEVICE_INFO] & > @@ -883,6 +895,13 @@ static void logi_hidpp_dev_conn_notif_equad(struct hid_device *hdev, > workitem->reports_supported |= STD_KEYBOARD | MULTIMEDIA | > POWER_KEYS | MEDIA_CENTER | > HIDPP; > + id = (workitem->quad_id_msb << 8) | workitem->quad_id_lsb; > + for (i = 0; i < ARRAY_SIZE(kbd_builtin_touchpad_ids); i++) { > + if (id == kbd_builtin_touchpad_ids[i]) { > + workitem->reports_supported |= STD_MOUSE; > + break; > + } > + } > break; > case REPORT_TYPE_MOUSE: > workitem->reports_supported |= STD_MOUSE | HIDPP; >