aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hid
diff options
context:
space:
mode:
authorJiri Kosina <jkosina@suse.cz>2010-05-12 10:01:26 -0400
committerJiri Kosina <jkosina@suse.cz>2010-05-12 10:01:31 -0400
commit23d021167eebf0df5ccadf4f8de5ccb8d4ac2904 (patch)
tree5b5fd57be0cdb3cdaf366b08e6f38e992bf62c1d /drivers/hid
parent94b849aaf6e22ab7bf54b0d0377a882d4892396d (diff)
HID: magicmouse: fix input registration
When HIDRAW is not set, hid_hw_start() returns ENODEV as no subsystem has claimed the magicmouse device, and probe routine bails out. Which is not what we want. This happens because magicmouse driver is instantiating the connection to Input subsystem itself, and since commit 28918c211d86b ("HID: magicmouse: fix oops after device removal") the HID core is not registering input device itself. Fix this by letting HID core register the input device (so that hid_hw_start() succeeds, as the device is claimed by at least one subsystem) and de-register it again later before proceeding with proper input setup. Reported-by: Justin P. Mattock <justinmattock@gmail.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Diffstat (limited to 'drivers/hid')
-rw-r--r--drivers/hid/hid-magicmouse.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/hid/hid-magicmouse.c b/drivers/hid/hid-magicmouse.c
index 0d471fc2ab82..f10d56a15f21 100644
--- a/drivers/hid/hid-magicmouse.c
+++ b/drivers/hid/hid-magicmouse.c
@@ -354,12 +354,15 @@ static int magicmouse_probe(struct hid_device *hdev,
354 goto err_free; 354 goto err_free;
355 } 355 }
356 356
357 ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT & ~HID_CONNECT_HIDINPUT); 357 ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT);
358 if (ret) { 358 if (ret) {
359 dev_err(&hdev->dev, "magicmouse hw start failed\n"); 359 dev_err(&hdev->dev, "magicmouse hw start failed\n");
360 goto err_free; 360 goto err_free;
361 } 361 }
362 362
363 /* we are handling the input ourselves */
364 hidinput_disconnect(hdev);
365
363 report = hid_register_report(hdev, HID_INPUT_REPORT, TOUCH_REPORT_ID); 366 report = hid_register_report(hdev, HID_INPUT_REPORT, TOUCH_REPORT_ID);
364 if (!report) { 367 if (!report) {
365 dev_err(&hdev->dev, "unable to register touch report\n"); 368 dev_err(&hdev->dev, "unable to register touch report\n");