Commit 43e5e7c6 authored by David Herrmann's avatar David Herrmann Committed by Jiri Kosina
Browse files

HID: wiimote: Add debugfs support stubs

Add initializer and deinitializer for debugfs support. This will later allow raw
eeprom access and direct DRM modifications to debug wiimote behaviour and
further protocol reverse-engineerings.
Signed-off-by: default avatarDavid Herrmann <>
Signed-off-by: default avatarJiri Kosina <>
parent 5906215b
......@@ -29,6 +29,9 @@ hid-wiimote-y := hid-wiimote-core.o
hid-wiimote-y += hid-wiimote-ext.o
hid-wiimote-y += hid-wiimote-debug.o
obj-$(CONFIG_HID_A4TECH) += hid-a4tech.o
obj-$(CONFIG_HID_ACRUX) += hid-axff.o
......@@ -1161,6 +1161,7 @@ static struct wiimote_data *wiimote_create(struct hid_device *hdev)
static void wiimote_destroy(struct wiimote_data *wdata)
......@@ -1237,6 +1238,10 @@ static int wiimote_hid_probe(struct hid_device *hdev,
if (ret)
goto err_free;
ret = wiidebug_init(wdata);
if (ret)
goto err_free;
hid_info(hdev, "New device registered\n");
/* by default set led1 after device initialization */
* Debug support for HID Nintendo Wiimote devices
* Copyright (c) 2011 David Herrmann
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation; either version 2 of the License, or (at your option)
* any later version.
#include <linux/module.h>
#include <linux/spinlock.h>
#include "hid-wiimote.h"
struct wiimote_debug {
struct wiimote_data *wdata;
int wiidebug_init(struct wiimote_data *wdata)
struct wiimote_debug *dbg;
unsigned long flags;
dbg = kzalloc(sizeof(*dbg), GFP_KERNEL);
if (!dbg)
return -ENOMEM;
dbg->wdata = wdata;
spin_lock_irqsave(&wdata->state.lock, flags);
wdata->debug = dbg;
spin_unlock_irqrestore(&wdata->state.lock, flags);
return 0;
void wiidebug_deinit(struct wiimote_data *wdata)
struct wiimote_debug *dbg = wdata->debug;
unsigned long flags;
if (!dbg)
spin_lock_irqsave(&wdata->state.lock, flags);
wdata->debug = NULL;
spin_unlock_irqrestore(&wdata->state.lock, flags);
......@@ -74,6 +74,7 @@ struct wiimote_data {
struct input_dev *ir;
struct power_supply battery;
struct wiimote_ext *ext;
struct wiimote_debug *debug;
spinlock_t qlock;
__u8 head;
......@@ -137,6 +138,18 @@ static inline void wiiext_handle(void *u, const __u8 *p) { }
extern int wiidebug_init(struct wiimote_data *wdata);
extern void wiidebug_deinit(struct wiimote_data *wdata);
static inline int wiidebug_init(void *u) { return 0; }
static inline void wiidebug_deinit(void *u) { }
/* requires the state.lock spinlock to be held */
static inline bool wiimote_cmd_pending(struct wiimote_data *wdata, int cmd,
__u32 opt)
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