From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
To: Hans de Goede <hdegoede@redhat.com>
Cc: Jiri Kosina <jikos@kernel.org>,
"open list:HID CORE LAYER" <linux-input@vger.kernel.org>,
"3.8+" <stable@vger.kernel.org>
Subject: Re: [PATCH 1/3] HID: logitech-dj: Handle quad/bluetooth keyboards with a builtin trackpad
Date: Tue, 10 Nov 2020 19:29:09 +0100 [thread overview]
Message-ID: <ab1788a1-1f23-45bd-72e8-fadcea82514f@redhat.com> (raw)
In-Reply-To: <e3817ab8-906e-cb98-91db-ffb4cc821788@redhat.com>
Hi Hans,
On Tue, Nov 10, 2020 at 2:17 PM Hans de Goede <hdegoede@redhat.com> wrote:
>
> 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@vger.kernel.org
> > BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1811424
> > Signed-off-by: Hans de Goede <hdegoede@redhat.com>
>
> ping? This is a bug fix for a regression caused by:
Series looks good. I tried to enable the Dinovo Mini this afternoon (see
patch below), but it's not that clean and easy...
>
> 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.
I guess you want the tag on all 3 patches, not just the first.
If so, I can try to push it later today or tomorrow.
>
> 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.
Yeah, the Dinovo Mini will come later.
My current WIP is the following:
---
diff --git a/drivers/hid/hid-logitech-dj.c b/drivers/hid/hid-logitech-dj.c
index 1cafb65428b0..1c7857bf3290 100644
--- a/drivers/hid/hid-logitech-dj.c
+++ b/drivers/hid/hid-logitech-dj.c
@@ -84,6 +84,7 @@
#define STD_MOUSE BIT(2)
#define MULTIMEDIA BIT(3)
#define POWER_KEYS BIT(4)
+#define BT_MOUSE BIT(5)
#define MEDIA_CENTER BIT(8)
#define KBD_LEDS BIT(14)
/* Fake (bitnr > NUMBER_OF_HID_REPORTS) bit to track HID++ capability */
@@ -333,6 +334,47 @@ static const char mse_bluetooth_descriptor[] = {
0xC0, /* END_COLLECTION */
};
+/* Mouse descriptor (5) for Bluetooth receiver, low-res hwheel, 8 buttons */
+static const char mse5_bluetooth_descriptor[] = {
+ 0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */
+ 0x09, 0x02, /* Usage (Mouse) */
+ 0xa1, 0x01, /* Collection (Application) */
+ 0x85, 0x05, /* Report ID (5) */
+ 0x09, 0x01, /* Usage (Pointer) */
+ 0xa1, 0x00, /* Collection (Physical) */
+ 0x05, 0x09, /* Usage Page (Button) */
+ 0x19, 0x01, /* Usage Minimum (1) */
+ 0x29, 0x08, /* Usage Maximum (8) */
+ 0x15, 0x00, /* Logical Minimum (0) */
+ 0x25, 0x01, /* Logical Maximum (1) */
+ 0x95, 0x08, /* Report Count (8) */
+ 0x75, 0x01, /* Report Size (1) */
+ 0x81, 0x02, /* Input (Data,Var,Abs) */
+ 0x05, 0x01, /* Usage Page (Generic Desktop) */
+ 0x16, 0x01, 0xf8, /* Logical Minimum (-2047) */
+ 0x26, 0xff, 0x07, /* Logical Maximum (2047) */
+ 0x75, 0x0c, /* Report Size (12) */
+ 0x95, 0x02, /* Report Count (2) */
+ 0x09, 0x30, /* Usage (X) */
+ 0x09, 0x31, /* Usage (Y) */
+ 0x81, 0x06, /* Input (Data,Var,Rel) */
+ 0x15, 0x81, /* Logical Minimum (-127) */
+ 0x25, 0x7f, /* Logical Maximum (127) */
+ 0x75, 0x08, /* Report Size (8) */
+ 0x95, 0x01, /* Report Count (1) */
+ 0x09, 0x38, /* Usage (Wheel) */
+ 0x81, 0x06, /* Input (Data,Var,Rel) */
+ 0x05, 0x0c, /* Usage Page (Consumer Devices) */
+ 0x0a, 0x38, 0x02, /* Usage (AC Pan) */
+ 0x15, 0x81, /* Logical Minimum (-127) */
+ 0x25, 0x7f, /* Logical Maximum (127) */
+ 0x75, 0x08, /* Report Size (8) */
+ 0x95, 0x01, /* Report Count (1) */
+ 0x81, 0x06, /* Input (Data,Var,Rel) */
+ 0xc0, /* End Collection */
+ 0xc0, /* End Collection */
+};
+
/* Gaming Mouse descriptor (2) */
static const char mse_high_res_descriptor[] = {
0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */
@@ -877,6 +919,10 @@ static const u16 kbd_builtin_touchpad_ids[] = {
0xb309, /* Dinovo Edge */
};
+static const u16 kbd_builtin_touchpad5_ids[] = {
+ 0xb30c, /* Dinovo Mini */
+};
+
static void logi_hidpp_dev_conn_notif_equad(struct hid_device *hdev,
struct hidpp_event *hidpp_report,
struct dj_workitem *workitem)
@@ -901,6 +947,12 @@ static void logi_hidpp_dev_conn_notif_equad(struct hid_device *hdev,
break;
}
}
+ for (i = 0; i < ARRAY_SIZE(kbd_builtin_touchpad5_ids); i++) {
+ if (id == kbd_builtin_touchpad5_ids[i]) {
+ workitem->reports_supported |= BT_MOUSE;
+ break;
+ }
+ }
break;
case REPORT_TYPE_MOUSE:
workitem->reports_supported |= STD_MOUSE | HIDPP;
@@ -1368,6 +1420,13 @@ static int logi_dj_ll_parse(struct hid_device *hid)
sizeof(mse_descriptor));
}
+ if (djdev->reports_supported & BT_MOUSE) {
+ dbg_hid("%s: sending a mouse descriptor, reports_supported: %llx\n",
+ __func__, djdev->reports_supported);
+ rdcat(rdesc, &rsize, mse5_bluetooth_descriptor,
+ sizeof(mse5_bluetooth_descriptor));
+ }
+
if (djdev->reports_supported & MULTIMEDIA) {
dbg_hid("%s: sending a multimedia report descriptor: %llx\n",
__func__, djdev->reports_supported);
@@ -1907,6 +1966,14 @@ static const struct hid_device_id logi_dj_receivers[] = {
HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH,
0xc71c),
.driver_data = recvr_type_bluetooth},
+ { /* Logitech DiNovo Mini HID++ / bluetooth receiver mouse intf. */
+ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH,
+ 0xc71e),
+ .driver_data = recvr_type_bluetooth},
+ { /* Logitech DiNovo Mini HID++ / bluetooth receiver keyboard intf. */
+ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH,
+ 0xc71f),
+ .driver_data = recvr_type_bluetooth},
{}
};
---
And the keyboard is not sending the proper KEY_MEDIA like with the
hid-logitech.ko driver. So this WIP can not go into a stable tree.
Cheers,
Benjamin
next prev parent reply other threads:[~2020-11-10 18:29 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-02 13:36 [PATCH 1/3] HID: logitech-dj: Handle quad/bluetooth keyboards with a builtin trackpad Hans de Goede
2020-11-02 13:36 ` [PATCH 2/3] HID: logitech-hidpp: Add HIDPP_CONSUMER_VENDOR_KEYS quirk for the Dinovo Edge Hans de Goede
2020-11-02 13:36 ` [PATCH 3/3] HID: Add Logitech Dinovo Edge battery quirk Hans de Goede
2020-11-02 13:44 ` [PATCH 1/3] HID: logitech-dj: Handle quad/bluetooth keyboards with a builtin trackpad Hans de Goede
2020-11-10 13:16 ` Hans de Goede
2020-11-10 18:29 ` Benjamin Tissoires [this message]
2020-11-11 11:06 ` Hans de Goede
2020-11-12 15:49 ` Benjamin Tissoires
2020-11-14 11:03 ` Hans de Goede
2020-11-14 14:45 ` Hans de Goede
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ab1788a1-1f23-45bd-72e8-fadcea82514f@redhat.com \
--to=benjamin.tissoires@redhat.com \
--cc=hdegoede@redhat.com \
--cc=jikos@kernel.org \
--cc=linux-input@vger.kernel.org \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).