Add common DT binding documentation for touchscreen devices and implement input_parse_touchscreen_of_params, which parses the common properties and configures the input device accordingly. Signed-off-by: Sebastian Reichel <sre@xxxxxxxxxx> --- .../bindings/input/touchscreen/touchscreen.txt | 9 ++++++ drivers/input/input.c | 34 ++++++++++++++++++++++ include/linux/input.h | 8 +++++ 3 files changed, 51 insertions(+) create mode 100644 Documentation/devicetree/bindings/input/touchscreen/touchscreen.txt diff --git a/Documentation/devicetree/bindings/input/touchscreen/touchscreen.txt b/Documentation/devicetree/bindings/input/touchscreen/touchscreen.txt new file mode 100644 index 0000000..a2ff0a0 --- /dev/null +++ b/Documentation/devicetree/bindings/input/touchscreen/touchscreen.txt @@ -0,0 +1,9 @@ +General Touchscreen Properties: + +Optional properties for Touchscreens: + - touchscreen-size-x : horizontal resolution of touchscreen + - touchscreen-size-y : vertical resolution of touchscreen + - touchscreen-max-pressure : maximum reported pressure + - touchscreen-fuzz-x : horizontal noise value of the absolute input device + - touchscreen-fuzz-y : vertical noise value of the absolute input device + - touchscreen-fuzz-pressure : pressure noise value of the absolute input device diff --git a/drivers/input/input.c b/drivers/input/input.c index 1c4c0db..97966d93 100644 --- a/drivers/input/input.c +++ b/drivers/input/input.c @@ -27,6 +27,7 @@ #include <linux/device.h> #include <linux/mutex.h> #include <linux/rcupdate.h> +#include <linux/of.h> #include "input-compat.h" MODULE_AUTHOR("Vojtech Pavlik <vojtech@xxxxxxx>"); @@ -2398,6 +2399,39 @@ void input_free_minor(unsigned int minor) } EXPORT_SYMBOL(input_free_minor); +#if defined(CONFIG_OF) +/** + * input_parse_touchscreen_of_params - parse common touchscreen DT properties + * @dev: device that should be parsed + * + * This function parses common DT properties for touchscreens and setups the + * input device accordingly. The function keeps previously setuped default + * values if no value is specified via DT. + */ +void input_parse_touchscreen_of_params(struct input_dev *dev) +{ + struct device_node *np = dev->dev.parent->of_node; + struct input_absinfo *absinfo; + + 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); + + 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); + + 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); +} +EXPORT_SYMBOL(input_parse_touchscreen_of_params); +#endif + static int __init input_init(void) { int err; diff --git a/include/linux/input.h b/include/linux/input.h index 82ce323..3dc3b1e 100644 --- a/include/linux/input.h +++ b/include/linux/input.h @@ -531,4 +531,12 @@ int input_ff_erase(struct input_dev *dev, int effect_id, struct file *file); int input_ff_create_memless(struct input_dev *dev, void *data, int (*play_effect)(struct input_dev *, void *, struct ff_effect *)); +#if defined(CONFIG_OF) +void input_parse_touchscreen_of_params(struct input_dev *dev); +#else +static inline void input_parse_touchscreen_of_params(struct input_dev *dev) { + return; +} +#endif + #endif -- 1.9.1 -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html