Input: synaptics-rmi4 - add device tree support for 2d sensors and F11
2D sensors have several parameter which can be set in the platform data. This patch adds support for getting those values from devicetree. Signed-off-by: Andrew Duggan <aduggan@synaptics.com> Tested-by: Benjamin Tissoires <benjamin.tissoires@redhat.com> Tested-by: Linus Walleij <linus.walleij@linaro.org> Tested-by: Bjorn Andersson <bjorn.andersson@linaro.org> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
This commit is contained in:

committed by
Dmitry Torokhov

parent
ff8f83708b
commit
aaa27982b3
@@ -219,3 +219,111 @@ int rmi_2d_sensor_configure_input(struct rmi_function *fn,
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rmi_2d_sensor_configure_input);
|
||||
|
||||
#ifdef CONFIG_OF
|
||||
int rmi_2d_sensor_of_probe(struct device *dev,
|
||||
struct rmi_2d_sensor_platform_data *pdata)
|
||||
{
|
||||
int retval;
|
||||
u32 val;
|
||||
|
||||
pdata->axis_align.swap_axes = of_property_read_bool(dev->of_node,
|
||||
"touchscreen-swapped-x-y");
|
||||
|
||||
pdata->axis_align.flip_x = of_property_read_bool(dev->of_node,
|
||||
"touchscreen-inverted-x");
|
||||
|
||||
pdata->axis_align.flip_y = of_property_read_bool(dev->of_node,
|
||||
"touchscreen-inverted-y");
|
||||
|
||||
retval = rmi_of_property_read_u32(dev, &val, "syna,clip-x-low", 1);
|
||||
if (retval)
|
||||
return retval;
|
||||
|
||||
pdata->axis_align.clip_x_low = val;
|
||||
|
||||
retval = rmi_of_property_read_u32(dev, &val, "syna,clip-y-low", 1);
|
||||
if (retval)
|
||||
return retval;
|
||||
|
||||
pdata->axis_align.clip_y_low = val;
|
||||
|
||||
retval = rmi_of_property_read_u32(dev, &val, "syna,clip-x-high", 1);
|
||||
if (retval)
|
||||
return retval;
|
||||
|
||||
pdata->axis_align.clip_x_high = val;
|
||||
|
||||
retval = rmi_of_property_read_u32(dev, &val, "syna,clip-y-high", 1);
|
||||
if (retval)
|
||||
return retval;
|
||||
|
||||
pdata->axis_align.clip_y_high = val;
|
||||
|
||||
retval = rmi_of_property_read_u32(dev, &val, "syna,offset-x", 1);
|
||||
if (retval)
|
||||
return retval;
|
||||
|
||||
pdata->axis_align.offset_x = val;
|
||||
|
||||
retval = rmi_of_property_read_u32(dev, &val, "syna,offset-y", 1);
|
||||
if (retval)
|
||||
return retval;
|
||||
|
||||
pdata->axis_align.offset_y = val;
|
||||
|
||||
retval = rmi_of_property_read_u32(dev, &val, "syna,delta-x-threshold",
|
||||
1);
|
||||
if (retval)
|
||||
return retval;
|
||||
|
||||
pdata->axis_align.delta_x_threshold = val;
|
||||
|
||||
retval = rmi_of_property_read_u32(dev, &val, "syna,delta-y-threshold",
|
||||
1);
|
||||
if (retval)
|
||||
return retval;
|
||||
|
||||
pdata->axis_align.delta_y_threshold = val;
|
||||
|
||||
retval = rmi_of_property_read_u32(dev, (u32 *)&pdata->sensor_type,
|
||||
"syna,sensor-type", 1);
|
||||
if (retval)
|
||||
return retval;
|
||||
|
||||
retval = rmi_of_property_read_u32(dev, &val, "touchscreen-x-mm", 1);
|
||||
if (retval)
|
||||
return retval;
|
||||
|
||||
pdata->x_mm = val;
|
||||
|
||||
retval = rmi_of_property_read_u32(dev, &val, "touchscreen-y-mm", 1);
|
||||
if (retval)
|
||||
return retval;
|
||||
|
||||
pdata->y_mm = val;
|
||||
|
||||
retval = rmi_of_property_read_u32(dev, &val,
|
||||
"syna,disable-report-mask", 1);
|
||||
if (retval)
|
||||
return retval;
|
||||
|
||||
pdata->disable_report_mask = val;
|
||||
|
||||
retval = rmi_of_property_read_u32(dev, &val, "syna,rezero-wait-ms",
|
||||
1);
|
||||
if (retval)
|
||||
return retval;
|
||||
|
||||
pdata->rezero_wait = val;
|
||||
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
inline int rmi_2d_sensor_of_probe(struct device *dev,
|
||||
struct rmi_2d_sensor_platform_data *pdata)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
#endif
|
||||
EXPORT_SYMBOL_GPL(rmi_2d_sensor_of_probe);
|
||||
|
@@ -69,6 +69,9 @@ struct rmi_2d_sensor {
|
||||
u8 y_mm;
|
||||
};
|
||||
|
||||
int rmi_2d_sensor_of_probe(struct device *dev,
|
||||
struct rmi_2d_sensor_platform_data *pdata);
|
||||
|
||||
void rmi_2d_sensor_abs_process(struct rmi_2d_sensor *sensor,
|
||||
struct rmi_2d_sensor_abs_object *obj,
|
||||
int slot);
|
||||
|
@@ -1059,8 +1059,13 @@ static int rmi_f11_initialize(struct rmi_function *fn)
|
||||
if (!f11)
|
||||
return -ENOMEM;
|
||||
|
||||
if (pdata->sensor_pdata)
|
||||
if (fn->dev.of_node) {
|
||||
rc = rmi_2d_sensor_of_probe(&fn->dev, &f11->sensor_pdata);
|
||||
if (rc)
|
||||
return rc;
|
||||
} else if (pdata->sensor_pdata) {
|
||||
f11->sensor_pdata = *pdata->sensor_pdata;
|
||||
}
|
||||
|
||||
f11->rezero_wait_ms = f11->sensor_pdata.rezero_wait;
|
||||
|
||||
|
Reference in New Issue
Block a user