diff mbox

[05/10] Input: synaptics-rmi4: Add device tree support for 2d sensors and F11

Message ID 1448496553-25208-1-git-send-email-aduggan@synaptics.com
State Changes Requested, archived
Headers show

Commit Message

Andrew Duggan Nov. 26, 2015, 12:09 a.m. UTC
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>
---
 .../bindings/input/rmi4/rmi_2d_sensor.txt          |  54 +++++++++++
 drivers/input/rmi4/rmi_2d_sensor.c                 | 103 +++++++++++++++++++++
 drivers/input/rmi4/rmi_2d_sensor.h                 |   3 +
 drivers/input/rmi4/rmi_f11.c                       |   7 +-
 4 files changed, 166 insertions(+), 1 deletion(-)
 create mode 100644 Documentation/devicetree/bindings/input/rmi4/rmi_2d_sensor.txt

Comments

Rob Herring (Arm) Nov. 27, 2015, 9:10 p.m. UTC | #1
On Wed, Nov 25, 2015 at 04:09:13PM -0800, Andrew Duggan wrote:
> 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>
> ---
>  .../bindings/input/rmi4/rmi_2d_sensor.txt          |  54 +++++++++++
>  drivers/input/rmi4/rmi_2d_sensor.c                 | 103 +++++++++++++++++++++
>  drivers/input/rmi4/rmi_2d_sensor.h                 |   3 +
>  drivers/input/rmi4/rmi_f11.c                       |   7 +-
>  4 files changed, 166 insertions(+), 1 deletion(-)
>  create mode 100644 Documentation/devicetree/bindings/input/rmi4/rmi_2d_sensor.txt
> 
> diff --git a/Documentation/devicetree/bindings/input/rmi4/rmi_2d_sensor.txt b/Documentation/devicetree/bindings/input/rmi4/rmi_2d_sensor.txt
> new file mode 100644
> index 0000000..bbff31b
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/input/rmi4/rmi_2d_sensor.txt
> @@ -0,0 +1,54 @@
> +Synaptics RMI4 2D Sensor Device Binding
> +
> +The Synaptics RMI4 core is able to support RMI4 devices using differnet

s/differnet/different/

> +transports and differnet functions. This file describes the device tree

ditto.

> +bindings for devices which contain 2D sensors using Function 11 or
> +Function 12. Complete documentation for transports and other functions
> +can be found in:
> +Documentation/devicetree/bindings/input/rmi4.
> +
> +RMI4 Function 11 and Function 12 are for 2D touch position sensing.
> +Additional documentation for F11 can be found at:
> +http://www.synaptics.com/sites/default/files/511-000136-01-Rev-E-RMI4-Interfacing-Guide.pdf
> +
> +Optional Properties:
> +- syna,swap-axes: Swap X and Y positions when reporting (boolean).
> +- syna,flip-x: Reverse the direction of X (boolean).
> +- syna,flip-y: Reverse the direction of Y (boolean).

We already have similar, generic properties for these.

> +- syna,clip-x-low: Sets a minimum value for X.
> +- syna,clip-y-low: Sets a minimum value for Y.
> +- syna,clip-x-high: Sets a maximum value for X.
> +- syna,clip-y-high: Sets a maximum value for Y.
> +- syna,offset-x: Add an offset to X.
> +- syna,offset_y: Add an offset to Y.

Don't use "_".

> +- syna,delta-x-threshold: Set the minimum distance on the X axis required
> +				to generate an interrupt in reduced reporting
> +				mode.
> +- syna,delta-y-threshold: Set the minimum distance on the Y axis required
> +				to generate an interrupt in reduced reporting
> +				mode.
> +- syna,type-a: Report type A multitouch events.
> +- syna,sensor-type: Set the sensor type. 1 for touchscreen 2 for touchpad.
> +- syna,x-mm: The length in millimeters of the X axis.
> +- syna,y-mm: The length in millimeters of the Y axis.

I think some of these have common properties defined too. If not, we 
should add them.

> +- syna,disable-report-mask: Mask for disabling posiiton reporting. Used to
> +				disable reporing absolute position data.
> +- syna,rezero-wait: Time in miliseconds to wait after issuing a rezero
> +				command.

Add -msec suffix.
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Andrew Duggan Nov. 28, 2015, 8:23 p.m. UTC | #2
Hi Rob,

Thanks for reviewing! I will incorporate your feedback into the next 
version.

Andrew

On 11/27/2015 01:10 PM, Rob Herring wrote:
> On Wed, Nov 25, 2015 at 04:09:13PM -0800, Andrew Duggan wrote:
>> 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>
>> ---
>>   .../bindings/input/rmi4/rmi_2d_sensor.txt          |  54 +++++++++++
>>   drivers/input/rmi4/rmi_2d_sensor.c                 | 103 +++++++++++++++++++++
>>   drivers/input/rmi4/rmi_2d_sensor.h                 |   3 +
>>   drivers/input/rmi4/rmi_f11.c                       |   7 +-
>>   4 files changed, 166 insertions(+), 1 deletion(-)
>>   create mode 100644 Documentation/devicetree/bindings/input/rmi4/rmi_2d_sensor.txt
>>
>> diff --git a/Documentation/devicetree/bindings/input/rmi4/rmi_2d_sensor.txt b/Documentation/devicetree/bindings/input/rmi4/rmi_2d_sensor.txt
>> new file mode 100644
>> index 0000000..bbff31b
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/input/rmi4/rmi_2d_sensor.txt
>> @@ -0,0 +1,54 @@
>> +Synaptics RMI4 2D Sensor Device Binding
>> +
>> +The Synaptics RMI4 core is able to support RMI4 devices using differnet
> s/differnet/different/
>
>> +transports and differnet functions. This file describes the device tree
> ditto.
>
>> +bindings for devices which contain 2D sensors using Function 11 or
>> +Function 12. Complete documentation for transports and other functions
>> +can be found in:
>> +Documentation/devicetree/bindings/input/rmi4.
>> +
>> +RMI4 Function 11 and Function 12 are for 2D touch position sensing.
>> +Additional documentation for F11 can be found at:
>> +http://www.synaptics.com/sites/default/files/511-000136-01-Rev-E-RMI4-Interfacing-Guide.pdf
>> +
>> +Optional Properties:
>> +- syna,swap-axes: Swap X and Y positions when reporting (boolean).
>> +- syna,flip-x: Reverse the direction of X (boolean).
>> +- syna,flip-y: Reverse the direction of Y (boolean).
> We already have similar, generic properties for these.
>
>> +- syna,clip-x-low: Sets a minimum value for X.
>> +- syna,clip-y-low: Sets a minimum value for Y.
>> +- syna,clip-x-high: Sets a maximum value for X.
>> +- syna,clip-y-high: Sets a maximum value for Y.
>> +- syna,offset-x: Add an offset to X.
>> +- syna,offset_y: Add an offset to Y.
> Don't use "_".
>
>> +- syna,delta-x-threshold: Set the minimum distance on the X axis required
>> +				to generate an interrupt in reduced reporting
>> +				mode.
>> +- syna,delta-y-threshold: Set the minimum distance on the Y axis required
>> +				to generate an interrupt in reduced reporting
>> +				mode.
>> +- syna,type-a: Report type A multitouch events.
>> +- syna,sensor-type: Set the sensor type. 1 for touchscreen 2 for touchpad.
>> +- syna,x-mm: The length in millimeters of the X axis.
>> +- syna,y-mm: The length in millimeters of the Y axis.
> I think some of these have common properties defined too. If not, we
> should add them.
>
>> +- syna,disable-report-mask: Mask for disabling posiiton reporting. Used to
>> +				disable reporing absolute position data.
>> +- syna,rezero-wait: Time in miliseconds to wait after issuing a rezero
>> +				command.
> Add -msec suffix.

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Andrew Duggan Dec. 15, 2015, 10:21 p.m. UTC | #3
Hi Rob,

I'm taking a look at this patchset again and I had a couple follow up 
questions.

On 11/27/2015 01:10 PM, Rob Herring wrote:
> On Wed, Nov 25, 2015 at 04:09:13PM -0800, Andrew Duggan wrote:
>> 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>
>> ---
>>   .../bindings/input/rmi4/rmi_2d_sensor.txt          |  54 +++++++++++
>>   drivers/input/rmi4/rmi_2d_sensor.c                 | 103 +++++++++++++++++++++
>>   drivers/input/rmi4/rmi_2d_sensor.h                 |   3 +
>>   drivers/input/rmi4/rmi_f11.c                       |   7 +-
>>   4 files changed, 166 insertions(+), 1 deletion(-)
>>   create mode 100644 Documentation/devicetree/bindings/input/rmi4/rmi_2d_sensor.txt
>>
>> diff --git a/Documentation/devicetree/bindings/input/rmi4/rmi_2d_sensor.txt b/Documentation/devicetree/bindings/input/rmi4/rmi_2d_sensor.txt
>> new file mode 100644
>> index 0000000..bbff31b
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/input/rmi4/rmi_2d_sensor.txt
>> @@ -0,0 +1,54 @@
>> +Synaptics RMI4 2D Sensor Device Binding
>> +
>> +The Synaptics RMI4 core is able to support RMI4 devices using differnet
> s/differnet/different/

Oops! That's a lot of typos. I'll make sure to run spell check next time.

>
>> +transports and differnet functions. This file describes the device tree
> ditto.
>
>> +bindings for devices which contain 2D sensors using Function 11 or
>> +Function 12. Complete documentation for transports and other functions
>> +can be found in:
>> +Documentation/devicetree/bindings/input/rmi4.
>> +
>> +RMI4 Function 11 and Function 12 are for 2D touch position sensing.
>> +Additional documentation for F11 can be found at:
>> +http://www.synaptics.com/sites/default/files/511-000136-01-Rev-E-RMI4-Interfacing-Guide.pdf
>> +
>> +Optional Properties:
>> +- syna,swap-axes: Swap X and Y positions when reporting (boolean).
>> +- syna,flip-x: Reverse the direction of X (boolean).
>> +- syna,flip-y: Reverse the direction of Y (boolean).
> We already have similar, generic properties for these.

Are you referring to the generic properties documented here?
Documentation/devicetree/bindings/input/touchscreen/touchscreen.txt

The rmi4 driver will be used for both touchpads and touchscreens so 
having a touchpad set a property like touchscreen-inverted-y could be 
confusing. It looks like there used to be more generic parameters which 
are now deprecated. Now the generic parameters are specific to 
touchscreens. Would it make sense to create touch-* parameters instead 
of touchscreen-*?

Thanks,
Andrew

>> +- syna,clip-x-low: Sets a minimum value for X.
>> +- syna,clip-y-low: Sets a minimum value for Y.
>> +- syna,clip-x-high: Sets a maximum value for X.
>> +- syna,clip-y-high: Sets a maximum value for Y.
>> +- syna,offset-x: Add an offset to X.
>> +- syna,offset_y: Add an offset to Y.
> Don't use "_".
>
>> +- syna,delta-x-threshold: Set the minimum distance on the X axis required
>> +				to generate an interrupt in reduced reporting
>> +				mode.
>> +- syna,delta-y-threshold: Set the minimum distance on the Y axis required
>> +				to generate an interrupt in reduced reporting
>> +				mode.
>> +- syna,type-a: Report type A multitouch events.
>> +- syna,sensor-type: Set the sensor type. 1 for touchscreen 2 for touchpad.
>> +- syna,x-mm: The length in millimeters of the X axis.
>> +- syna,y-mm: The length in millimeters of the Y axis.
> I think some of these have common properties defined too. If not, we
> should add them.
>
>> +- syna,disable-report-mask: Mask for disabling posiiton reporting. Used to
>> +				disable reporing absolute position data.
>> +- syna,rezero-wait: Time in miliseconds to wait after issuing a rezero
>> +				command.
> Add -msec suffix.

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/Documentation/devicetree/bindings/input/rmi4/rmi_2d_sensor.txt b/Documentation/devicetree/bindings/input/rmi4/rmi_2d_sensor.txt
new file mode 100644
index 0000000..bbff31b
--- /dev/null
+++ b/Documentation/devicetree/bindings/input/rmi4/rmi_2d_sensor.txt
@@ -0,0 +1,54 @@ 
+Synaptics RMI4 2D Sensor Device Binding
+
+The Synaptics RMI4 core is able to support RMI4 devices using differnet
+transports and differnet functions. This file describes the device tree
+bindings for devices which contain 2D sensors using Function 11 or
+Function 12. Complete documentation for transports and other functions
+can be found in:
+Documentation/devicetree/bindings/input/rmi4.
+
+RMI4 Function 11 and Function 12 are for 2D touch position sensing.
+Additional documentation for F11 can be found at:
+http://www.synaptics.com/sites/default/files/511-000136-01-Rev-E-RMI4-Interfacing-Guide.pdf
+
+Optional Properties:
+- syna,swap-axes: Swap X and Y positions when reporting (boolean).
+- syna,flip-x: Reverse the direction of X (boolean).
+- syna,flip-y: Reverse the direction of Y (boolean).
+- syna,clip-x-low: Sets a minimum value for X.
+- syna,clip-y-low: Sets a minimum value for Y.
+- syna,clip-x-high: Sets a maximum value for X.
+- syna,clip-y-high: Sets a maximum value for Y.
+- syna,offset-x: Add an offset to X.
+- syna,offset_y: Add an offset to Y.
+- syna,delta-x-threshold: Set the minimum distance on the X axis required
+				to generate an interrupt in reduced reporting
+				mode.
+- syna,delta-y-threshold: Set the minimum distance on the Y axis required
+				to generate an interrupt in reduced reporting
+				mode.
+- syna,type-a: Report type A multitouch events.
+- syna,sensor-type: Set the sensor type. 1 for touchscreen 2 for touchpad.
+- syna,x-mm: The length in millimeters of the X axis.
+- syna,y-mm: The length in millimeters of the Y axis.
+- syna,disable-report-mask: Mask for disabling posiiton reporting. Used to
+				disable reporing absolute position data.
+- syna,rezero-wait: Time in miliseconds to wait after issuing a rezero
+				command.
+
+
+Example of a RMI4 I2C device with F11:
+Example:
+	&i2c1 {
+		rmi-i2c-dev@2c {
+			compatible = "syna,rmi-i2c";
+
+			...
+
+			rmi-f11@11 {
+				reg = <0x11>;
+				syna,flip-y;
+				syna,sensor-type = <2>;
+			};
+		};
+	};
diff --git a/drivers/input/rmi4/rmi_2d_sensor.c b/drivers/input/rmi4/rmi_2d_sensor.c
index e3c7b7f..427d325 100644
--- a/drivers/input/rmi4/rmi_2d_sensor.c
+++ b/drivers/input/rmi4/rmi_2d_sensor.c
@@ -218,3 +218,106 @@  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;
+
+	pdata->axis_align.swap_axes = of_property_read_bool(dev->of_node,
+						"syna,swap-axes");
+
+	pdata->axis_align.flip_x = of_property_read_bool(dev->of_node,
+						"syna,flip-x");
+
+	pdata->axis_align.flip_y = of_property_read_bool(dev->of_node,
+						"syna,flip-y");
+
+	retval = rmi_of_property_read_u16(dev,
+			&pdata->axis_align.clip_x_low,
+			"syna,clip-x-low", 1);
+	if (retval)
+		return retval;
+
+	retval = rmi_of_property_read_u16(dev,
+			&pdata->axis_align.clip_y_low,
+			"syna,clip-y-low", 1);
+	if (retval)
+		return retval;
+
+	retval = rmi_of_property_read_u16(dev,
+			&pdata->axis_align.clip_x_high,
+			"syna,clip-x-high", 1);
+	if (retval)
+		return retval;
+
+	retval = rmi_of_property_read_u16(dev,
+			&pdata->axis_align.clip_y_high,
+			"syna,clip-y-high", 1);
+	if (retval)
+		return retval;
+
+	retval = rmi_of_property_read_u16(dev,
+			&pdata->axis_align.offset_x,
+			"syna,offset-x", 1);
+	if (retval)
+		return retval;
+
+	retval = rmi_of_property_read_u16(dev,
+			&pdata->axis_align.offset_y,
+			"syna,offset_y", 1);
+	if (retval)
+		return retval;
+
+	retval = rmi_of_property_read_u8(dev,
+			&pdata->axis_align.delta_x_threshold,
+			"syna,delta-x-threshold", 1);
+	if (retval)
+		return retval;
+
+	retval = rmi_of_property_read_u8(dev,
+			&pdata->axis_align.delta_y_threshold,
+			"syna,delta-y-threshold", 1);
+	if (retval)
+		return retval;
+
+	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,
+			(u32 *)&pdata->x_mm,
+			"syna,x-mm", 1);
+	if (retval)
+		return retval;
+
+	retval = rmi_of_property_read_u32(dev,
+			(u32 *)&pdata->y_mm,
+			"syna,y-mm", 1);
+	if (retval)
+		return retval;
+
+	retval = rmi_of_property_read_u32(dev,
+			(u32 *)&pdata->disable_report_mask,
+			"syna,disable-report-mask", 1);
+	if (retval)
+		return retval;
+
+	retval = rmi_of_property_read_u16(dev, &pdata->rezero_wait,
+			"syna,rezero-wait", 1);
+	if (retval)
+		return retval;
+
+	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);
diff --git a/drivers/input/rmi4/rmi_2d_sensor.h b/drivers/input/rmi4/rmi_2d_sensor.h
index bc31351..0ee817e 100644
--- a/drivers/input/rmi4/rmi_2d_sensor.h
+++ b/drivers/input/rmi4/rmi_2d_sensor.h
@@ -70,6 +70,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);
diff --git a/drivers/input/rmi4/rmi_f11.c b/drivers/input/rmi4/rmi_f11.c
index 0d1e0e5..fa8e333 100644
--- a/drivers/input/rmi4/rmi_f11.c
+++ b/drivers/input/rmi4/rmi_f11.c
@@ -1078,8 +1078,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;