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

Commit 3eea8b5d authored by Maxime Ripard's avatar Maxime Ripard Committed by Dmitry Torokhov
Browse files

Input: of_touchscreen - rework the DT parsing function



The DT parsing function currently duplicates a lot of the code to parse the
touchscreen DT properties. In order to ease further additions to this
parsing routine, rework it slightly to create new helper functions.

Signed-off-by: default avatarMaxime Ripard <maxime.ripard@free-electrons.com>
Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
parent 5037a179
Loading
Loading
Loading
Loading
+40 −10
Original line number Diff line number Diff line
@@ -13,6 +13,33 @@
#include <linux/input.h>
#include <linux/input/touchscreen.h>

static u32 of_get_optional_u32(struct device_node *np,
			       const char *property)
{
	u32 val = 0;

	of_property_read_u32(np, property, &val);

	return val;
}

static void touchscreen_set_params(struct input_dev *dev,
				   unsigned long axis,
				   int max, int fuzz)
{
	struct input_absinfo *absinfo;

	if (!test_bit(axis, dev->absbit)) {
		dev_warn(&dev->dev,
			 "DT specifies parameters but the axis is not set up\n");
		return;
	}

	absinfo = &dev->absinfo[axis];
	absinfo->maximum = max;
	absinfo->fuzz = fuzz;
}

/**
 * touchscreen_parse_of_params - parse common touchscreen DT properties
 * @dev: device that should be parsed
@@ -24,22 +51,25 @@
void touchscreen_parse_of_params(struct input_dev *dev)
{
	struct device_node *np = dev->dev.parent->of_node;
	struct input_absinfo *absinfo;
	u32 maximum, fuzz;

	input_alloc_absinfo(dev);
	if (!dev->absinfo)
		return;

	absinfo = &dev->absinfo[ABS_X];
	of_property_read_u32(np, "touchscreen-size-x", &absinfo->maximum);
	of_property_read_u32(np, "touchscreen-fuzz-x", &absinfo->fuzz);
	maximum = of_get_optional_u32(np, "touchscreen-size-x");
	fuzz = of_get_optional_u32(np, "touchscreen-fuzz-x");
	if (maximum || fuzz)
		touchscreen_set_params(dev, ABS_X, maximum, fuzz);

	absinfo = &dev->absinfo[ABS_Y];
	of_property_read_u32(np, "touchscreen-size-y", &absinfo->maximum);
	of_property_read_u32(np, "touchscreen-fuzz-y", &absinfo->fuzz);
	maximum = of_get_optional_u32(np, "touchscreen-size-y");
	fuzz = of_get_optional_u32(np, "touchscreen-fuzz-y");
	if (maximum || fuzz)
		touchscreen_set_params(dev, ABS_Y, maximum, fuzz);

	absinfo = &dev->absinfo[ABS_PRESSURE];
	of_property_read_u32(np, "touchscreen-max-pressure", &absinfo->maximum);
	of_property_read_u32(np, "touchscreen-fuzz-pressure", &absinfo->fuzz);
	maximum = of_get_optional_u32(np, "touchscreen-max-pressure");
	fuzz = of_get_optional_u32(np, "touchscreen-fuzz-pressure");
	if (maximum || fuzz)
		touchscreen_set_params(dev, ABS_PRESSURE, maximum, fuzz);
}
EXPORT_SYMBOL(touchscreen_parse_of_params);