@@ -20,6 +20,9 @@
#include "hid-ids.h"
#include "hid-wiimote.h"
+/* set to 1 to enable legacy-mode and old reports */
+static unsigned int wiimote_legacy = 0;
+
/* output queue handling */
static int wiimote_hid_send(struct hid_device *hdev, __u8 *buffer,
@@ -1731,6 +1734,9 @@ static struct wiimote_data *wiimote_create(struct hid_device *hdev)
wdata->hdev = hdev;
hid_set_drvdata(hdev, wdata);
+ if (wiimote_legacy)
+ wdata->state.flags |= WIIPROTO_FLAG_LEGACY;
+
spin_lock_init(&wdata->queue.lock);
INIT_WORK(&wdata->queue.worker, wiimote_queue_worker);
@@ -1873,6 +1879,9 @@ static struct hid_driver wiimote_hid_driver = {
};
module_hid_driver(wiimote_hid_driver);
+MODULE_PARM_DESC(legacy, "Enable legacy mode and reports");
+module_param_named(legacy, wiimote_legacy, int, 0600);
+
MODULE_LICENSE("GPL");
MODULE_AUTHOR("David Herrmann <dh.herrmann@gmail.com>");
MODULE_DESCRIPTION("Driver for Nintendo Wii / Wii U peripherals");
@@ -47,6 +47,7 @@
#define WIIPROTO_FLAG_BUILTIN_MP 0x010000
#define WIIPROTO_FLAG_NO_MP 0x020000
#define WIIPROTO_FLAG_PRO_CALIB_DONE 0x040000
+#define WIIPROTO_FLAG_LEGACY 0x080000
#define WIIPROTO_FLAGS_LEDS (WIIPROTO_FLAG_LED1 | WIIPROTO_FLAG_LED2 | \
WIIPROTO_FLAG_LED3 | WIIPROTO_FLAG_LED4)
The first hid-wiimote driver had horrible default mappings which we have to support now for compatibility reasons. This was no big problem as the wiimote needs special user-space drivers to really make sense, anyway. However, there are several wiimote extensions which can be used on their own (especially the gamepads). To allow new mappings which comply to the common gamepad rules, we introduce the hid_wiimote.legacy parameter so users can get the old behavior back, if they need it. This patch only introduces the module parameter, the following patches will change the mappings. Signed-off-by: David Herrmann <dh.herrmann@gmail.com> --- drivers/hid/hid-wiimote-core.c | 9 +++++++++ drivers/hid/hid-wiimote.h | 1 + 2 files changed, 10 insertions(+)