|
@@ -462,6 +462,21 @@ static int magicmouse_input_mapping(struct hid_device *hdev,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static void magicmouse_input_configured(struct hid_device *hdev,
|
|
|
+ struct hid_input *hi)
|
|
|
+
|
|
|
+{
|
|
|
+ struct magicmouse_sc *msc = hid_get_drvdata(hdev);
|
|
|
+
|
|
|
+ int ret = magicmouse_setup_input(msc->input, hdev);
|
|
|
+ if (ret) {
|
|
|
+ hid_err(hdev, "magicmouse setup input failed (%d)\n", ret);
|
|
|
+ /* clean msc->input to notify probe() of the failure */
|
|
|
+ msc->input = NULL;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
static int magicmouse_probe(struct hid_device *hdev,
|
|
|
const struct hid_device_id *id)
|
|
|
{
|
|
@@ -493,15 +508,10 @@ static int magicmouse_probe(struct hid_device *hdev,
|
|
|
goto err_free;
|
|
|
}
|
|
|
|
|
|
- /* We do this after hid-input is done parsing reports so that
|
|
|
- * hid-input uses the most natural button and axis IDs.
|
|
|
- */
|
|
|
- if (msc->input) {
|
|
|
- ret = magicmouse_setup_input(msc->input, hdev);
|
|
|
- if (ret) {
|
|
|
- hid_err(hdev, "magicmouse setup input failed (%d)\n", ret);
|
|
|
- goto err_stop_hw;
|
|
|
- }
|
|
|
+ if (!msc->input) {
|
|
|
+ hid_err(hdev, "magicmouse input not registered\n");
|
|
|
+ ret = -ENOMEM;
|
|
|
+ goto err_stop_hw;
|
|
|
}
|
|
|
|
|
|
if (id->product == USB_DEVICE_ID_APPLE_MAGICMOUSE)
|
|
@@ -568,6 +578,7 @@ static struct hid_driver magicmouse_driver = {
|
|
|
.remove = magicmouse_remove,
|
|
|
.raw_event = magicmouse_raw_event,
|
|
|
.input_mapping = magicmouse_input_mapping,
|
|
|
+ .input_configured = magicmouse_input_configured,
|
|
|
};
|
|
|
module_hid_driver(magicmouse_driver);
|
|
|
|