RE: [PATCHv4 2/5] Input: edt-ft5x06: Add DT support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




From: Lothar Waßmann <LW@xxxxxxxxxxxxxxxxxxx>
Data: Wednesday, March 19, 2014 9:09 PM

>To: Dmitry Torokhov; Duan Fugang-B38611; Grant Likely; Henrik Rydberg; Ian
>Campbell; Jingoo Han; Kumar Gala; Mark Rutland; Pawel Moll; Rob Herring; Rob
>Landley; Sachin Kamat; devicetree@xxxxxxxxxxxxxxx; linux-doc@xxxxxxxxxxxxxxx;
>linux-input@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; Simon Budig; Lothar
>Waßmann
>Subject: [PATCHv4 2/5] Input: edt-ft5x06: Add DT support
>
>
>Signed-off-by: Lothar Waßmann <LW@xxxxxxxxxxxxxxxxxxx>
>---
> .../bindings/input/touchscreen/edt-ft5x06.txt      |   41 ++++++
> drivers/input/touchscreen/edt-ft5x06.c             |  144 +++++++++++++++-----
> 2 files changed, 154 insertions(+), 31 deletions(-)  create mode 100644
>Documentation/devicetree/bindings/input/touchscreen/edt-ft5x06.txt
>
>diff --git a/Documentation/devicetree/bindings/input/touchscreen/edt-ft5x06.txt
>b/Documentation/devicetree/bindings/input/touchscreen/edt-ft5x06.txt
>new file mode 100644
>index 0000000..e5adc76
>--- /dev/null
>+++ b/Documentation/devicetree/bindings/input/touchscreen/edt-ft5x06.txt
>@@ -0,0 +1,41 @@
>+FocalTech EDT-FT5x06 Polytouch driver
>+=====================================
>+
>+Required properties:
>+ - compatible:  "edt,edt-ft5x06"
>+ - reg:         I2C slave address of the chip (0x38)
>+ - interrupt-parent: a phandle pointing to the interrupt controller
>+                     serving the interrupt for this chip
>+ - interrupts:       interrupt specification for this chip
>+
>+Optional properties:
>+ - reset-gpios: GPIO specification for the RESET input
>+ - wake-gpios:  GPIO specification for the WAKE input
>+
>+ - pinctrl-names: should be "default"
>+ - pinctrl-0:   a phandle pointing to the pin settings for the
>+                control gpios
>+
>+ - threshold:   allows setting the "click"-threshold in the range
>+                from 20 to 80.
>+
>+ - gain:        allows setting the sensitivity in the range from 0 to
>+                31. Note that lower values indicate higher
>+                sensitivity.
>+
>+ - offset:      allows setting the edge compensation in the range from
>+                0 to 31.
>+ - report_rate: allows setting the report rate in the range from 3 to
>+                14.
>+
>+Example:
>+	polytouch: edt-ft5x06@38 {
>+		compatible = "edt,edt-ft5x06";
>+		reg = <0x38>;
>+		pinctrl-names = "default";
>+		pinctrl-0 = <&edt_ft5x06_pins>;
>+		interrupt-parent = <&gpio2>;
>+		interrupts = <5 0>;
>+		reset-gpios = <&gpio2 6 1>;
>+		wake-gpios = <&gpio4 9 0>;
>+	};
>diff --git a/drivers/input/touchscreen/edt-ft5x06.c
>b/drivers/input/touchscreen/edt-ft5x06.c
>index 7b4470d..257a1c8 100644
>--- a/drivers/input/touchscreen/edt-ft5x06.c
>+++ b/drivers/input/touchscreen/edt-ft5x06.c
>@@ -33,6 +33,7 @@
> #include <linux/debugfs.h>
> #include <linux/slab.h>
> #include <linux/gpio.h>
>+#include <linux/of_gpio.h>
> #include <linux/input/mt.h>
> #include <linux/input/edt-ft5x06.h>
>
[...]
>+#ifdef CONFIG_OF
>+static int edt_ft5x06_i2c_ts_probe_dt(struct device *dev,
>+				struct edt_ft5x06_ts_data *tsdata)
>+{
>+	struct device_node *np = dev->of_node;
>+
>+	if (!np)
>+		return -ENODEV;
Don't need to check the device node valid. If the device node is not existed, the driver don't run probe.

>+
>+	/*
>+	 * irq_pin is not needed for DT setup.
>+	 * irq is associated via 'interrupts' property in DT
>+	 */
>+	tsdata->irq_pin = -EINVAL;
>+	tsdata->reset_pin = of_get_named_gpio(np, "reset-gpios", 0);
>+	tsdata->wake_pin = of_get_named_gpio(np, "wake-gpios", 0);
>+
>+	return 0;
>+}
>+#else
>+static inline int edt_ft5x06_i2c_ts_probe_dt(struct device *dev,
>+					struct edt_ft5x06_i2c_ts_data *tsdata) {
>+	return -ENODEV;
>+}
>+#endif
>+
> static int edt_ft5x06_ts_probe(struct i2c_client *client,
> 					 const struct i2c_device_id *id)
> {
>@@ -714,32 +775,40 @@ static int edt_ft5x06_ts_probe(struct i2c_client *client,
>
> 	dev_dbg(&client->dev, "probing for EDT FT5x06 I2C\n");
>
>+	tsdata = devm_kzalloc(&client->dev, sizeof(*tsdata), GFP_KERNEL);
>+	if (!tsdata) {
>+		dev_err(&client->dev, "failed to allocate driver data.\n");
>+		return -ENOMEM;
>+	}
>+
> 	if (!pdata) {
>-		dev_err(&client->dev, "no platform data?\n");
>-		return -EINVAL;
>+		error = edt_ft5x06_i2c_ts_probe_dt(&client->dev, tsdata);
>+		if (error) {
>+			dev_err(&client->dev,
>+				"DT probe failed and no platform data present\n");
>+			return error;
>+		}
>+	} else {
>+		tsdata->reset_pin = pdata->reset_pin;
>+		tsdata->irq_pin = pdata->irq_pin;
>+		tsdata->wake_pin = -EINVAL;
> 	}
[...]

Thanks,
Andy
��.n��������+%������w��{.n����z�{��ܨ}���Ơz�j:+v�����w����ޙ��&�)ߡ�a����z�ޗ���ݢj��w�f





[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]
  Powered by Linux