HID: wiimote: Initialize IR cam on request
authorDavid Herrmann <dh.herrmann@googlemail.com>
Tue, 6 Sep 2011 11:50:37 +0000 (13:50 +0200)
committerJiri Kosina <jkosina@suse.cz>
Wed, 7 Sep 2011 11:25:17 +0000 (13:25 +0200)
Initialize the IR cam if the related input device is opened by userspace. Stop
IR cam again if userspace is no longer interested in its data events.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/hid-wiimote.c

index 35dc293db40e175d976e0ec438a33ef09ab5545e..66583986bcdbdd2fc8b0d75c9f907abe9264de74 100644 (file)
@@ -668,6 +668,32 @@ static void wiimote_accel_close(struct input_dev *dev)
        hid_hw_close(wdata->hdev);
 }
 
+static int wiimote_ir_open(struct input_dev *dev)
+{
+       struct wiimote_data *wdata = input_get_drvdata(dev);
+       int ret;
+
+       ret = hid_hw_open(wdata->hdev);
+       if (ret)
+               return ret;
+
+       ret = wiimote_init_ir(wdata, WIIPROTO_FLAG_IR_BASIC);
+       if (ret) {
+               hid_hw_close(wdata->hdev);
+               return ret;
+       }
+
+       return 0;
+}
+
+static void wiimote_ir_close(struct input_dev *dev)
+{
+       struct wiimote_data *wdata = input_get_drvdata(dev);
+
+       wiimote_init_ir(wdata, 0);
+       hid_hw_close(wdata->hdev);
+}
+
 static void handler_keys(struct wiimote_data *wdata, const __u8 *payload)
 {
        input_report_key(wdata->input, wiiproto_keymap[WIIPROTO_KEY_LEFT],
@@ -1062,6 +1088,8 @@ static struct wiimote_data *wiimote_create(struct hid_device *hdev)
                goto err_ir;
 
        input_set_drvdata(wdata->ir, wdata);
+       wdata->ir->open = wiimote_ir_open;
+       wdata->ir->close = wiimote_ir_close;
        wdata->ir->dev.parent = &wdata->hdev->dev;
        wdata->ir->id.bustype = wdata->hdev->bus;
        wdata->ir->id.vendor = wdata->hdev->vendor;