[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <c9718f7215eb41439606b0107a8e2a02@BLUPR03MB373.namprd03.prod.outlook.com>
Date: Thu, 20 Mar 2014 05:19:03 +0000
From: "fugang.duan@...escale.com" <fugang.duan@...escale.com>
To: Lothar Waßmann <LW@...O-electronics.de>,
Dmitry Torokhov <dmitry.torokhov@...il.com>,
Grant Likely <grant.likely@...aro.org>,
"Henrik Rydberg" <rydberg@...omail.se>,
Ian Campbell <ijc+devicetree@...lion.org.uk>,
Jingoo Han <jg1.han@...sung.com>,
Kumar Gala <galak@...eaurora.org>,
"Mark Rutland" <mark.rutland@....com>,
Pawel Moll <pawel.moll@....com>,
Rob Herring <robh+dt@...nel.org>,
Rob Landley <rob@...dley.net>,
Sachin Kamat <sachin.kamat@...aro.org>,
"devicetree@...r.kernel.org" <devicetree@...r.kernel.org>,
"linux-doc@...r.kernel.org" <linux-doc@...r.kernel.org>,
"linux-input@...r.kernel.org" <linux-input@...r.kernel.org>,
"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
Simon Budig <simon.budig@...nelconcepts.de>
Subject: RE: [PATCHv4 2/5] Input: edt-ft5x06: Add DT support
From: Lothar Waßmann <LW@...O-electronics.de>
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@...r.kernel.org; linux-doc@...r.kernel.org;
>linux-input@...r.kernel.org; linux-kernel@...r.kernel.org; Simon Budig; Lothar
>Waßmann
>Subject: [PATCHv4 2/5] Input: edt-ft5x06: Add DT support
>
>
>Signed-off-by: Lothar Waßmann <LW@...O-electronics.de>
>---
> .../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
Powered by blists - more mailing lists