Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ae751fa8 authored by Benjamin Tissoires's avatar Benjamin Tissoires Committed by Jiri Kosina
Browse files

HID: hid-input: factorize hid_input allocation



This just refactors the allocation of hid_input.
No semantic changes.

Signed-off-by: default avatarBenjamin Tissoires <benjamin.tissoires@gmail.com>
Reviewed-by: default avatarHenrik Rydberg <rydberg@euromail.se>
Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
parent 13f19624
Loading
Loading
Loading
Loading
+34 −27
Original line number Original line Diff line number Diff line
@@ -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,35 +1227,11 @@ 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++)
				for (j = 0; j < report->field[i]->maxusage; j++)
				for (j = 0; j < report->field[i]->maxusage; j++)
					hidinput_configure_usage(hidinput, report->field[i],
					hidinput_configure_usage(hidinput, report->field[i],