diff options
Diffstat (limited to 'drivers/hid/hid-magicmouse.c')
| -rw-r--r-- | drivers/hid/hid-magicmouse.c | 30 | 
1 files changed, 20 insertions, 10 deletions
diff --git a/drivers/hid/hid-magicmouse.c b/drivers/hid/hid-magicmouse.c index f7f113ba083..5bc37343eb2 100644 --- a/drivers/hid/hid-magicmouse.c +++ b/drivers/hid/hid-magicmouse.c @@ -19,7 +19,6 @@  #include <linux/input/mt.h>  #include <linux/module.h>  #include <linux/slab.h> -#include <linux/usb.h>  #include "hid-ids.h" @@ -462,6 +461,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 +507,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 +577,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);  |