Commit a6be8569 authored by David Herrmann's avatar David Herrmann Committed by Jiri Kosina

HID: wiimote: work around broken DRM_KAI on GEN10

GEN10 and earlier devices seem to not support DRM_KAI if we run in basic
IR mode. Use DRM_KAIE instead. This might increases overhead slightly as
the extension port is read and streamed but we stream accelerometer data
constantly, too, so this is negligible.

Note that our parsers are hardcoded on IR-formats, so we cannot actually
use 96-bit IR DRMs for basic IR data. We would have to adjust the parsers.
But as only GEN20 and newer support this, we simply avoid mixed DRMs.

This fixes a bug where GEN10 devices didn't provide IR data if
accelerometer and IR are enabled simultaneously. As a workaround, you can
enable DRM_KAIE without this patch via (disables device power-management):
  echo "37" >/sys/kernel/debug/hid/<dev>/drm

Cc: stable@vger.kernel.org
Signed-off-by: default avatarDavid Herrmann <dh.herrmann@gmail.com>
Reported-by: default avatarNicolas Adenis-Lamarre <nicolas.adenis.lamarre@gmail.com>
Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
parent 9854a6f9
...@@ -212,10 +212,12 @@ static __u8 select_drm(struct wiimote_data *wdata) ...@@ -212,10 +212,12 @@ static __u8 select_drm(struct wiimote_data *wdata)
if (ir == WIIPROTO_FLAG_IR_BASIC) { if (ir == WIIPROTO_FLAG_IR_BASIC) {
if (wdata->state.flags & WIIPROTO_FLAG_ACCEL) { if (wdata->state.flags & WIIPROTO_FLAG_ACCEL) {
if (ext) /* GEN10 and ealier devices bind IR formats to DRMs.
* Hence, we cannot use DRM_KAI here as it might be
* bound to IR_EXT. Use DRM_KAIE unconditionally so we
* work with all devices and our parsers can use the
* fixed formats, too. */
return WIIPROTO_REQ_DRM_KAIE; return WIIPROTO_REQ_DRM_KAIE;
else
return WIIPROTO_REQ_DRM_KAI;
} else { } else {
return WIIPROTO_REQ_DRM_KIE; return WIIPROTO_REQ_DRM_KIE;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment