Skip to content

Commit

Permalink
HID: wiimote: Add wiimote led request
Browse files Browse the repository at this point in the history
Add new request that sets the leds on the target device. Also, per
default, set led1 after initializing a device.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
  • Loading branch information
David Herrmann authored and Jiri Kosina committed Jul 11, 2011
1 parent 1abb9ad commit db30834
Showing 1 changed file with 26 additions and 0 deletions.
26 changes: 26 additions & 0 deletions drivers/hid/hid-wiimote.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,13 @@ struct wiimote_data {
struct work_struct worker;
};

#define WIIPROTO_FLAG_LED1 0x01
#define WIIPROTO_FLAG_LED2 0x02
#define WIIPROTO_FLAG_LED3 0x04
#define WIIPROTO_FLAG_LED4 0x08

enum wiiproto_reqs {
WIIPROTO_REQ_LED = 0x11,
WIIPROTO_REQ_DRM_K = 0x30,
};

Expand Down Expand Up @@ -150,6 +156,25 @@ static void wiimote_queue(struct wiimote_data *wdata, const __u8 *buffer,
spin_unlock_irqrestore(&wdata->qlock, flags);
}

static void wiiproto_req_leds(struct wiimote_data *wdata, int leds)
{
__u8 cmd[2];

cmd[0] = WIIPROTO_REQ_LED;
cmd[1] = 0;

if (leds & WIIPROTO_FLAG_LED1)
cmd[1] |= 0x10;
if (leds & WIIPROTO_FLAG_LED2)
cmd[1] |= 0x20;
if (leds & WIIPROTO_FLAG_LED3)
cmd[1] |= 0x40;
if (leds & WIIPROTO_FLAG_LED4)
cmd[1] |= 0x80;

wiimote_queue(wdata, cmd, sizeof(cmd));
}

static int wiimote_input_event(struct input_dev *dev, unsigned int type,
unsigned int code, int value)
{
Expand Down Expand Up @@ -301,6 +326,7 @@ static int wiimote_hid_probe(struct hid_device *hdev,
smp_wmb();
atomic_set(&wdata->ready, 1);
hid_info(hdev, "New device registered\n");
wiiproto_req_leds(wdata, WIIPROTO_FLAG_LED1);
return 0;

err_stop:
Expand Down

0 comments on commit db30834

Please sign in to comment.