From: John Reid <owlman.lists@gmail.com>
To: Benjamin Tissoires <benjamin.tissoires@redhat.com>,
Jiri Kosina <jkosina@suse.cz>,
Jonathan Oppenheim <lejono@gmail.com>,
linux-input@vger.kernel.org
Subject: Re: [PATCH] HID: lenovo: add support for Lenovo ThinkPad Keyboard Pro unit
Date: Sat, 02 May 2015 17:45:00 +1000 [thread overview]
Message-ID: <5544807C.1080301@gmail.com> (raw)
In-Reply-To: <1430511765-28209-1-git-send-email-benjamin.tissoires@redhat.com>
Hi Benjamin, all,
Keyboard works just fine now, along with the Wacom digitiser. Thank you
very much for you help linux-input folks :)
Might I suggest that the macro is renamed from
USB_DEVICE_ID_LENOVO_TPPRODOCK to something like
USB_DEVICE_ID_LENOVO_TPHELIXPROKDB as this better reflects the product
name in self documenting code? Technically this is a dockable keyboard
specific to the Helix tablet, and there is also a separate "dock" available.
Sorry for the tardy response. Been setting up a development environment.
Jono, I did a merge between
https://git.kernel.org/cgit/linux/kernel/git/jikos/hid.git/log/?h=for-next
tag v4.1-rc1 and
https://git.kernel.org/cgit/linux/kernel/git/jikos/hid.git/log/?h=for-next
at commit d92189ebbdcd0eb180317d8cd6d46c57ac9a3dc0. That way I pulled in
all the latest changes so that I'm not testing bugs that have already
been fixed. I'll update the ThinkWiki page to reflect this. I'm also
going to try my hand at setting up a launchpad PPA for packaging patched
kernels, xf86-input-libinput etc. until they make it into the ubuntu
mainline repositories.
cheers,
John
On 02/05/15 06:22, Benjamin Tissoires wrote:
> This dock is used with the Thinkpad Helix 2 but suffers from an error
> in the report descriptor where an usage max is 65535.
>
> Add a report fixup for it and make the keyboard working.
>
> Tested-by: Jonathan Oppenheim <lejono@gmail.com>
> Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
> ---
>
> Jonathan,
>
> Compared to the patch I sent you last week, the only difference is that
> I removed a remnant debug line :)
>
> Cheers,
> Benjamin
>
> drivers/hid/hid-core.c | 1 +
> drivers/hid/hid-ids.h | 1 +
> drivers/hid/hid-lenovo.c | 31 +++++++++++++++++++++++++++++++
> 3 files changed, 33 insertions(+)
>
> diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
> index 722a925..c2baf8c 100644
> --- a/drivers/hid/hid-core.c
> +++ b/drivers/hid/hid-core.c
> @@ -1851,6 +1851,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
> { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_TPKBD) },
> { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_CUSBKBD) },
> { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_CBTKBD) },
> + { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_TPPRODOCK) },
> #endif
> { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_MX3000_RECEIVER) },
> { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER) },
> diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
> index b24caf8..e5b86e0 100644
> --- a/drivers/hid/hid-ids.h
> +++ b/drivers/hid/hid-ids.h
> @@ -585,6 +585,7 @@
> #define USB_DEVICE_ID_LENOVO_TPKBD 0x6009
> #define USB_DEVICE_ID_LENOVO_CUSBKBD 0x6047
> #define USB_DEVICE_ID_LENOVO_CBTKBD 0x6048
> +#define USB_DEVICE_ID_LENOVO_TPPRODOCK 0x6067
>
> #define USB_VENDOR_ID_LG 0x1fd2
> #define USB_DEVICE_ID_LG_MULTITOUCH 0x0064
> diff --git a/drivers/hid/hid-lenovo.c b/drivers/hid/hid-lenovo.c
> index 78608d6..4e291d5 100644
> --- a/drivers/hid/hid-lenovo.c
> +++ b/drivers/hid/hid-lenovo.c
> @@ -43,6 +43,35 @@ struct lenovo_drvdata_cptkbd {
>
> #define map_key_clear(c) hid_map_usage_clear(hi, usage, bit, max, EV_KEY, (c))
>
> +static const __u8 lenovo_pro_dock_need_fixup_collection[] = {
> + 0x05, 0x88, /* Usage Page (Vendor Usage Page 0x88) */
> + 0x09, 0x01, /* Usage (Vendor Usage 0x01) */
> + 0xa1, 0x01, /* Collection (Application) */
> + 0x85, 0x04, /* Report ID (4) */
> + 0x19, 0x00, /* Usage Minimum (0) */
> + 0x2a, 0xff, 0xff, /* Usage Maximum (65535) */
> +};
> +
> +static __u8 *lenovo_report_fixup(struct hid_device *hdev, __u8 *rdesc,
> + unsigned int *rsize)
> +{
> + switch (hdev->product) {
> + case USB_DEVICE_ID_LENOVO_TPPRODOCK:
> + /* the fixups that need to be done:
> + * - get a reasonable usage max for the vendor collection
> + * 0x8801 from the report ID 4
> + */
> + if (*rsize >= 153 &&
> + memcmp(&rdesc[140], lenovo_pro_dock_need_fixup_collection,
> + sizeof(lenovo_pro_dock_need_fixup_collection)) == 0) {
> + rdesc[151] = 0x01;
> + rdesc[152] = 0x00;
> + }
> + break;
> + }
> + return rdesc;
> +}
> +
> static int lenovo_input_mapping_tpkbd(struct hid_device *hdev,
> struct hid_input *hi, struct hid_field *field,
> struct hid_usage *usage, unsigned long **bit, int *max)
> @@ -784,6 +813,7 @@ static const struct hid_device_id lenovo_devices[] = {
> { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_TPKBD) },
> { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_CUSBKBD) },
> { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_CBTKBD) },
> + { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_TPPRODOCK) },
> { }
> };
>
> @@ -797,6 +827,7 @@ static struct hid_driver lenovo_driver = {
> .probe = lenovo_probe,
> .remove = lenovo_remove,
> .raw_event = lenovo_raw_event,
> + .report_fixup = lenovo_report_fixup,
> };
> module_hid_driver(lenovo_driver);
>
>
next prev parent reply other threads:[~2015-05-02 7:45 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-01 20:22 [PATCH] HID: lenovo: add support for Lenovo ThinkPad Keyboard Pro unit Benjamin Tissoires
2015-05-02 7:45 ` John Reid [this message]
2015-05-02 8:28 ` John Reid
2015-05-04 8:04 ` Jiri Kosina
2015-05-04 16:03 ` John Reid
2015-05-07 8:31 ` Jiri Kosina
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=5544807C.1080301@gmail.com \
--to=owlman.lists@gmail.com \
--cc=benjamin.tissoires@redhat.com \
--cc=jkosina@suse.cz \
--cc=lejono@gmail.com \
--cc=linux-input@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).