diff options
| author | Henrik Rydberg <rydberg@euromail.se> | 2012-07-30 13:28:18 +0200 | 
|---|---|---|
| committer | Henrik Rydberg <rydberg@euromail.se> | 2012-09-19 19:50:20 +0200 | 
| commit | 9ebf3d7687192923e3d44fdbcd8d9f8375053fb8 (patch) | |
| tree | 6973ce11e93dc97c3d5766bbc8f8b45814c0688e /drivers/hid/hid-input.c | |
| parent | 22739293402966db7ca3eb0148632d986fe30465 (diff) | |
| download | olio-linux-3.10-9ebf3d7687192923e3d44fdbcd8d9f8375053fb8.tar.xz olio-linux-3.10-9ebf3d7687192923e3d44fdbcd8d9f8375053fb8.zip  | |
HID: Add an input configured notification callback
A hid device may create several input devices, and a driver may need
to prepare or finalize the configuration per input device. Currently,
there is no sane way for a driver to know when a device has been
configured. This patch adds a callback providing that information.
Reviewed-and-tested-by: Benjamin Tissoires <benjamin.tissoires@enac.fr>
Tested-by: Ping Cheng <pingc@wacom.com>
Acked-by: Jiri Kosina <jkosina@suse.cz>
Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
Diffstat (limited to 'drivers/hid/hid-input.c')
| -rw-r--r-- | drivers/hid/hid-input.c | 11 | 
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c index 811bfad6460..d917c0d5368 100644 --- a/drivers/hid/hid-input.c +++ b/drivers/hid/hid-input.c @@ -1154,6 +1154,7 @@ static void report_features(struct hid_device *hid)  int hidinput_connect(struct hid_device *hid, unsigned int force)  { +	struct hid_driver *drv = hid->driver;  	struct hid_report *report;  	struct hid_input *hidinput = NULL;  	struct input_dev *input_dev; @@ -1228,6 +1229,8 @@ int hidinput_connect(struct hid_device *hid, unsigned int force)  				 * UGCI) cram a lot of unrelated inputs into the  				 * same interface. */  				hidinput->report = report; +				if (drv->input_configured) +					drv->input_configured(hid, hidinput);  				if (input_register_device(hidinput->input))  					goto out_cleanup;  				hidinput = NULL; @@ -1235,8 +1238,12 @@ int hidinput_connect(struct hid_device *hid, unsigned int force)  		}  	} -	if (hidinput && input_register_device(hidinput->input)) -		goto out_cleanup; +	if (hidinput) { +		if (drv->input_configured) +			drv->input_configured(hid, hidinput); +		if (input_register_device(hidinput->input)) +			goto out_cleanup; +	}  	return 0;  |