diff options
author | Jiri Kosina <jkosina@suse.cz> | 2010-05-12 10:01:26 -0400 |
---|---|---|
committer | Jiri Kosina <jkosina@suse.cz> | 2010-05-12 10:01:31 -0400 |
commit | 23d021167eebf0df5ccadf4f8de5ccb8d4ac2904 (patch) | |
tree | 5b5fd57be0cdb3cdaf366b08e6f38e992bf62c1d /drivers/hid | |
parent | 94b849aaf6e22ab7bf54b0d0377a882d4892396d (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.c | 5 |
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"); |