diff options
| author | Benjamin Tissoires <benjamin.tissoires@gmail.com> | 2012-11-23 16:31:24 +0100 | 
|---|---|---|
| committer | Jiri Kosina <jkosina@suse.cz> | 2012-11-29 14:59:40 +0100 | 
| commit | ae751fa82dd8e5a79932d6b55742e7e298afd733 (patch) | |
| tree | b944ccf5d9c694fbb74c88249a429cd0b9bf261a /drivers/hid/hid-input.c | |
| parent | 13f19624029f43f5d0f98a96a9e6ba4d38da96a9 (diff) | |
| download | olio-linux-3.10-ae751fa82dd8e5a79932d6b55742e7e298afd733.tar.xz olio-linux-3.10-ae751fa82dd8e5a79932d6b55742e7e298afd733.zip  | |
HID: hid-input: factorize hid_input allocation
This just refactors the allocation of hid_input.
No semantic changes.
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
Reviewed-by: Henrik Rydberg <rydberg@euromail.se>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Diffstat (limited to 'drivers/hid/hid-input.c')
| -rw-r--r-- | drivers/hid/hid-input.c | 61 | 
1 files changed, 34 insertions, 27 deletions
diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c index 0887b52f804..97c08c5d097 100644 --- a/drivers/hid/hid-input.c +++ b/drivers/hid/hid-input.c @@ -1154,6 +1154,38 @@ static void report_features(struct hid_device *hid)  			}  } +static struct hid_input *hidinput_allocate(struct hid_device *hid) +{ +	struct hid_input *hidinput = kzalloc(sizeof(*hidinput), GFP_KERNEL); +	struct input_dev *input_dev = input_allocate_device(); +	if (!hidinput || !input_dev) { +		kfree(hidinput); +		input_free_device(input_dev); +		hid_err(hid, "Out of memory during hid input probe\n"); +		return NULL; +	} + +	input_set_drvdata(input_dev, hid); +	input_dev->event = hid->ll_driver->hidinput_input_event; +	input_dev->open = hidinput_open; +	input_dev->close = hidinput_close; +	input_dev->setkeycode = hidinput_setkeycode; +	input_dev->getkeycode = hidinput_getkeycode; + +	input_dev->name = hid->name; +	input_dev->phys = hid->phys; +	input_dev->uniq = hid->uniq; +	input_dev->id.bustype = hid->bus; +	input_dev->id.vendor  = hid->vendor; +	input_dev->id.product = hid->product; +	input_dev->id.version = hid->version; +	input_dev->dev.parent = hid->dev.parent; +	hidinput->input = input_dev; +	list_add_tail(&hidinput->list, &hid->inputs); + +	return hidinput; +} +  /*   * Register the input device; print a message.   * Configure the input layer interface @@ -1165,7 +1197,6 @@ 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;  	int i, j, k;  	INIT_LIST_HEAD(&hid->inputs); @@ -1196,33 +1227,9 @@ int hidinput_connect(struct hid_device *hid, unsigned int force)  				continue;  			if (!hidinput) { -				hidinput = kzalloc(sizeof(*hidinput), GFP_KERNEL); -				input_dev = input_allocate_device(); -				if (!hidinput || !input_dev) { -					kfree(hidinput); -					input_free_device(input_dev); -					hid_err(hid, "Out of memory during hid input probe\n"); +				hidinput = hidinput_allocate(hid); +				if (!hidinput)  					goto out_unwind; -				} - -				input_set_drvdata(input_dev, hid); -				input_dev->event = -					hid->ll_driver->hidinput_input_event; -				input_dev->open = hidinput_open; -				input_dev->close = hidinput_close; -				input_dev->setkeycode = hidinput_setkeycode; -				input_dev->getkeycode = hidinput_getkeycode; - -				input_dev->name = hid->name; -				input_dev->phys = hid->phys; -				input_dev->uniq = hid->uniq; -				input_dev->id.bustype = hid->bus; -				input_dev->id.vendor  = hid->vendor; -				input_dev->id.product = hid->product; -				input_dev->id.version = hid->version; -				input_dev->dev.parent = hid->dev.parent; -				hidinput->input = input_dev; -				list_add_tail(&hidinput->list, &hid->inputs);  			}  			for (i = 0; i < report->maxfield; i++)  |