From: Peter Wu <peter@lekensteyn.nl>
To: Jiri Kosina <jkosina@suse.cz>,
Benjamin Tissoires <benjamin.tissoires@redhat.com>,
Nestor Lopez Casado <nlopezcasad@logitech.com>
Cc: linux-input@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH 1/3] HID: logitech-hidpp: detect HID++ 2.0 errors too
Date: Tue, 16 Dec 2014 01:50:14 +0100 [thread overview]
Message-ID: <1418691016-30681-2-git-send-email-peter@lekensteyn.nl> (raw)
In-Reply-To: <1418691016-30681-1-git-send-email-peter@lekensteyn.nl>
Devices speaking HID++ 2.0 report a different error code (0xff). Detect
these errors too to avoid 5 second delays when the device reports an
error. Caught by... well, a bug in the QEMU emulation of this receiver.
Renamed fap to rap for HID++ 1.0 errors because it is more logical,
it has no functional difference.
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
---
drivers/hid/hid-logitech-hidpp.c | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/drivers/hid/hid-logitech-hidpp.c b/drivers/hid/hid-logitech-hidpp.c
index 2f420c0..ae23dec 100644
--- a/drivers/hid/hid-logitech-hidpp.c
+++ b/drivers/hid/hid-logitech-hidpp.c
@@ -105,6 +105,7 @@ struct hidpp_device {
};
+/* HID++ 1.0 error codes */
#define HIDPP_ERROR 0x8f
#define HIDPP_ERROR_SUCCESS 0x00
#define HIDPP_ERROR_INVALID_SUBID 0x01
@@ -119,6 +120,8 @@ struct hidpp_device {
#define HIDPP_ERROR_REQUEST_UNAVAILABLE 0x0a
#define HIDPP_ERROR_INVALID_PARAM_VALUE 0x0b
#define HIDPP_ERROR_WRONG_PIN_CODE 0x0c
+/* HID++ 2.0 error codes */
+#define HIDPP20_ERROR 0xff
static void hidpp_connect_event(struct hidpp_device *hidpp_dev);
@@ -192,9 +195,16 @@ static int hidpp_send_message_sync(struct hidpp_device *hidpp,
}
if (response->report_id == REPORT_ID_HIDPP_SHORT &&
- response->fap.feature_index == HIDPP_ERROR) {
+ response->rap.sub_id == HIDPP_ERROR) {
+ ret = response->rap.params[1];
+ dbg_hid("%s:got hidpp error %02X\n", __func__, ret);
+ goto exit;
+ }
+
+ if (response->report_id == REPORT_ID_HIDPP_LONG &&
+ response->fap.feature_index == HIDPP20_ERROR) {
ret = response->fap.params[1];
- dbg_hid("__hidpp_send_report got hidpp error %02X\n", ret);
+ dbg_hid("%s:got hidpp 2.0 error %02X\n", __func__, ret);
goto exit;
}
@@ -271,7 +281,8 @@ static inline bool hidpp_match_answer(struct hidpp_report *question,
static inline bool hidpp_match_error(struct hidpp_report *question,
struct hidpp_report *answer)
{
- return (answer->fap.feature_index == HIDPP_ERROR) &&
+ return ((answer->rap.sub_id == HIDPP_ERROR) ||
+ (answer->fap.feature_index == HIDPP20_ERROR)) &&
(answer->fap.funcindex_clientid == question->fap.feature_index) &&
(answer->fap.params[0] == question->fap.funcindex_clientid);
}
--
2.1.3
next prev parent reply other threads:[~2014-12-16 0:50 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-16 0:50 [PATCH 0/3] HID: logitech-{dj,hidpp}: more reliability fixes Peter Wu
2014-12-16 0:50 ` Peter Wu [this message]
2014-12-16 14:33 ` [PATCH 1/3] HID: logitech-hidpp: detect HID++ 2.0 errors too Benjamin Tissoires
2014-12-16 14:52 ` Peter Wu
2014-12-18 17:26 ` Peter Wu
2014-12-18 17:57 ` Benjamin Tissoires
2014-12-17 15:30 ` Benjamin Tissoires
2014-12-19 10:03 ` Jiri Kosina
2014-12-19 10:44 ` Jiri Kosina
2014-12-16 0:50 ` [PATCH 2/3] HID: logitech-{dj,hidpp}: check report length Peter Wu
2014-12-16 14:53 ` Benjamin Tissoires
2014-12-16 15:20 ` Peter Wu
2014-12-16 15:38 ` Benjamin Tissoires
2014-12-16 15:55 ` [PATCH v2 1/3] HID: logitech-dj: " Peter Wu
2014-12-16 15:55 ` [PATCH v2 2/3] HID: logitech-hidpp: check WTP " Peter Wu
2014-12-16 21:56 ` Benjamin Tissoires
2014-12-17 7:53 ` Jiri Kosina
2014-12-16 15:55 ` [PATCH v2 3/3] HID: logitech-hidpp: separate HID++ from WTP processing Peter Wu
2014-12-16 22:00 ` Benjamin Tissoires
2014-12-16 23:23 ` [PATCH " Peter Wu
2014-12-17 7:55 ` Jiri Kosina
2014-12-16 21:55 ` [PATCH v2 1/3] HID: logitech-dj: check report length Benjamin Tissoires
2014-12-17 7:53 ` Jiri Kosina
2014-12-19 10:48 ` [PATCH 2/3] HID: logitech-{dj,hidpp}: " Jiri Kosina
2014-12-16 0:50 ` [PATCH 3/3] HID: logitech-hidpp: avoid unintended fall-through Peter Wu
2014-12-16 14:54 ` Benjamin Tissoires
2014-12-17 15:32 ` Benjamin Tissoires
2014-12-19 10:45 ` 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=1418691016-30681-2-git-send-email-peter@lekensteyn.nl \
--to=peter@lekensteyn.nl \
--cc=benjamin.tissoires@redhat.com \
--cc=jkosina@suse.cz \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nlopezcasad@logitech.com \
/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
all inboxes | Powered by JetHome®