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>
This commit is contained in:
Родитель
13f1962402
Коммит
ae751fa82d
|
@ -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.
|
* Register the input device; print a message.
|
||||||
* Configure the input layer interface
|
* 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_driver *drv = hid->driver;
|
||||||
struct hid_report *report;
|
struct hid_report *report;
|
||||||
struct hid_input *hidinput = NULL;
|
struct hid_input *hidinput = NULL;
|
||||||
struct input_dev *input_dev;
|
|
||||||
int i, j, k;
|
int i, j, k;
|
||||||
|
|
||||||
INIT_LIST_HEAD(&hid->inputs);
|
INIT_LIST_HEAD(&hid->inputs);
|
||||||
|
@ -1196,33 +1227,9 @@ int hidinput_connect(struct hid_device *hid, unsigned int force)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!hidinput) {
|
if (!hidinput) {
|
||||||
hidinput = kzalloc(sizeof(*hidinput), GFP_KERNEL);
|
hidinput = hidinput_allocate(hid);
|
||||||
input_dev = input_allocate_device();
|
if (!hidinput)
|
||||||
if (!hidinput || !input_dev) {
|
|
||||||
kfree(hidinput);
|
|
||||||
input_free_device(input_dev);
|
|
||||||
hid_err(hid, "Out of memory during hid input probe\n");
|
|
||||||
goto out_unwind;
|
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++)
|
for (i = 0; i < report->maxfield; i++)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче