From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
To: linux-input@vger.kernel.org
Cc: linux-kernel@vger.kernel.org,
"Franklin S Cooper Jr" <fcooper@ti.com>,
"Maxime Ripard" <maxime.ripard@free-electrons.com>,
"Lothar Waßmann" <LW@KARO-electronics.de>
Subject: Re: [PATCH 1/6] Input: edt-ft5x06 - switch to newer gpio framework
Date: Mon, 21 Sep 2015 15:55:33 -0700 [thread overview]
Message-ID: <20150921225533.GA20559@dtor-ws> (raw)
In-Reply-To: <5044530af510d6686e78f8dfa912d89ef824f899.1442079408.git.dmitry.torokhov@gmail.com>
On Sat, Sep 12, 2015 at 10:45:46AM -0700, Dmitry Torokhov wrote:
> From: Franklin S Cooper Jr <fcooper@ti.com>
>
> The current/old gpio framework used doesn't properly listen to
> ACTIVE_LOW and ACTIVE_HIGH flags. The newer gpio framework takes into
> account these flags when setting gpio values.
>
> Since the values being output were based on voltage and not logic they
> change to reflect this difference. Also use gpiod_set_value_cansleep since
> wake and reset pins can be provided by bus based io expanders.
>
> Switch from msleep(5) to udelay_range(5000,6000) to avoid check patch
> warning.
>
> Signed-off-by: Franklin S Cooper Jr <fcooper@ti.com>
> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Franklin, could you please give this series a spin so I can queue it for
the next merge window?
Thanks!
> ---
> .../bindings/input/touchscreen/edt-ft5x06.txt | 4 +-
> drivers/input/touchscreen/edt-ft5x06.c | 129 ++++++---------------
> include/linux/input/edt-ft5x06.h | 3 -
> 3 files changed, 40 insertions(+), 96 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/input/touchscreen/edt-ft5x06.txt b/Documentation/devicetree/bindings/input/touchscreen/edt-ft5x06.txt
> index 76db967..9330d4d 100644
> --- a/Documentation/devicetree/bindings/input/touchscreen/edt-ft5x06.txt
> +++ b/Documentation/devicetree/bindings/input/touchscreen/edt-ft5x06.txt
> @@ -50,6 +50,6 @@ Example:
> pinctrl-0 = <&edt_ft5x06_pins>;
> interrupt-parent = <&gpio2>;
> interrupts = <5 0>;
> - reset-gpios = <&gpio2 6 1>;
> - wake-gpios = <&gpio4 9 0>;
> + reset-gpios = <&gpio2 6 GPIO_ACTIVE_LOW>;
> + wake-gpios = <&gpio4 9 GPIO_ACTIVE_HIGH>;
> };
> diff --git a/drivers/input/touchscreen/edt-ft5x06.c b/drivers/input/touchscreen/edt-ft5x06.c
> index 48de1e8..5738722 100644
> --- a/drivers/input/touchscreen/edt-ft5x06.c
> +++ b/drivers/input/touchscreen/edt-ft5x06.c
> @@ -34,8 +34,7 @@
> #include <linux/delay.h>
> #include <linux/debugfs.h>
> #include <linux/slab.h>
> -#include <linux/gpio.h>
> -#include <linux/of_gpio.h>
> +#include <linux/gpio/consumer.h>
> #include <linux/input/mt.h>
> #include <linux/input/touchscreen.h>
> #include <linux/input/edt-ft5x06.h>
> @@ -91,9 +90,9 @@ struct edt_ft5x06_ts_data {
> u16 num_x;
> u16 num_y;
>
> - int reset_pin;
> - int irq_pin;
> - int wake_pin;
> + struct gpio_desc *reset_gpio;
> + struct gpio_desc *wake_gpio;
> + struct gpio_desc *irq_gpio;
>
> #if defined(CONFIG_DEBUG_FS)
> struct dentry *debug_dir;
> @@ -752,45 +751,6 @@ edt_ft5x06_ts_teardown_debugfs(struct edt_ft5x06_ts_data *tsdata)
>
> #endif /* CONFIG_DEBUGFS */
>
> -static int edt_ft5x06_ts_reset(struct i2c_client *client,
> - struct edt_ft5x06_ts_data *tsdata)
> -{
> - int error;
> -
> - if (gpio_is_valid(tsdata->wake_pin)) {
> - error = devm_gpio_request_one(&client->dev,
> - tsdata->wake_pin, GPIOF_OUT_INIT_LOW,
> - "edt-ft5x06 wake");
> - if (error) {
> - dev_err(&client->dev,
> - "Failed to request GPIO %d as wake pin, error %d\n",
> - tsdata->wake_pin, error);
> - return error;
> - }
> -
> - msleep(5);
> - gpio_set_value(tsdata->wake_pin, 1);
> - }
> - if (gpio_is_valid(tsdata->reset_pin)) {
> - /* this pulls reset down, enabling the low active reset */
> - error = devm_gpio_request_one(&client->dev,
> - tsdata->reset_pin, GPIOF_OUT_INIT_LOW,
> - "edt-ft5x06 reset");
> - if (error) {
> - dev_err(&client->dev,
> - "Failed to request GPIO %d as reset pin, error %d\n",
> - tsdata->reset_pin, error);
> - return error;
> - }
> -
> - msleep(5);
> - gpio_set_value(tsdata->reset_pin, 1);
> - msleep(300);
> - }
> -
> - return 0;
> -}
> -
> static int edt_ft5x06_ts_identify(struct i2c_client *client,
> struct edt_ft5x06_ts_data *tsdata,
> char *fw_version)
> @@ -931,30 +891,6 @@ edt_ft5x06_ts_set_regs(struct edt_ft5x06_ts_data *tsdata)
> }
> }
>
> -#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;
> -
> - /*
> - * 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_ts_data *tsdata)
> -{
> - return -ENODEV;
> -}
> -#endif
> -
> static int edt_ft5x06_ts_probe(struct i2c_client *client,
> const struct i2c_device_id *id)
> {
> @@ -973,32 +909,42 @@ static int edt_ft5x06_ts_probe(struct i2c_client *client,
> return -ENOMEM;
> }
>
> - if (!pdata) {
> - 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;
> + tsdata->reset_gpio = devm_gpiod_get_optional(&client->dev,
> + "reset", GPIOD_OUT_HIGH);
> + if (IS_ERR(tsdata->reset_gpio)) {
> + error = PTR_ERR(tsdata->reset_gpio);
> + dev_err(&client->dev,
> + "Failed to request GPIO reset pin, error %d\n", error);
> + return error;
> }
>
> - error = edt_ft5x06_ts_reset(client, tsdata);
> - if (error)
> + tsdata->wake_gpio = devm_gpiod_get_optional(&client->dev,
> + "wake", GPIOD_OUT_LOW);
> + if (IS_ERR(tsdata->wake_gpio)) {
> + error = PTR_ERR(tsdata->wake_gpio);
> + dev_err(&client->dev,
> + "Failed to request GPIO wake pin, error %d\n", error);
> return error;
> + }
>
> - if (gpio_is_valid(tsdata->irq_pin)) {
> - error = devm_gpio_request_one(&client->dev, tsdata->irq_pin,
> - GPIOF_IN, "edt-ft5x06 irq");
> - if (error) {
> - dev_err(&client->dev,
> - "Failed to request GPIO %d, error %d\n",
> - tsdata->irq_pin, error);
> - return error;
> - }
> + tsdata->irq_gpio = devm_gpiod_get_optional(&client->dev,
> + "irq", GPIOD_IN);
> + if (IS_ERR(tsdata->irq_gpio)) {
> + error = PTR_ERR(tsdata->irq_gpio);
> + dev_err(&client->dev,
> + "Failed to request GPIO irq pin, error %d\n", error);
> + return error;
> + }
> +
> + if (tsdata->wake_gpio) {
> + usleep_range(5000, 6000);
> + gpiod_set_value_cansleep(tsdata->wake_gpio, 1);
> + }
> +
> + if (tsdata->reset_gpio) {
> + usleep_range(5000, 6000);
> + gpiod_set_value_cansleep(tsdata->reset_gpio, 0);
> + msleep(300);
> }
>
> input = devm_input_allocate_device(&client->dev);
> @@ -1074,7 +1020,8 @@ static int edt_ft5x06_ts_probe(struct i2c_client *client,
>
> dev_dbg(&client->dev,
> "EDT FT5x06 initialized: IRQ %d, WAKE pin %d, Reset pin %d.\n",
> - client->irq, tsdata->wake_pin, tsdata->reset_pin);
> + client->irq, desc_to_gpio(tsdata->wake_gpio),
> + desc_to_gpio(tsdata->reset_gpio));
>
> return 0;
>
> diff --git a/include/linux/input/edt-ft5x06.h b/include/linux/input/edt-ft5x06.h
> index 8a1e0d1..5ca5b4c 100644
> --- a/include/linux/input/edt-ft5x06.h
> +++ b/include/linux/input/edt-ft5x06.h
> @@ -10,9 +10,6 @@
> */
>
> struct edt_ft5x06_platform_data {
> - int irq_pin;
> - int reset_pin;
> -
> /* startup defaults for operational parameters */
> bool use_parameters;
> u8 gain;
> --
> 2.6.0.rc0.131.gf624c3d
>
--
Dmitry
next prev parent reply other threads:[~2015-09-21 22:55 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-12 17:45 [PATCH 1/6] Input: edt-ft5x06 - switch to newer gpio framework Dmitry Torokhov
2015-09-12 17:45 ` [PATCH 2/6] Input: edt-ft5x06 - drop parsing of irq gpio Dmitry Torokhov
2015-09-12 17:45 ` [PATCH 3/6] Input: edt-ft5x06 - remove support for platform data Dmitry Torokhov
2015-09-12 17:45 ` [PATCH 4/6] Input: edt-ft5x06 - use generic properties API Dmitry Torokhov
2015-09-12 17:45 ` [PATCH 5/6] Input: edt-ft5x06 - do not hardcode interrupt trigger type Dmitry Torokhov
2015-09-12 17:45 ` [PATCH 6/6] ARM: dts: set up trigger type for edt-ft5x06 interrupts Dmitry Torokhov
2015-09-12 17:45 ` Dmitry Torokhov
2015-09-14 21:24 ` Felipe Balbi
2015-09-14 21:24 ` Felipe Balbi
[not found] ` <20150914212426.GA9968-HgARHv6XitJaoMGHk7MhZQC/G2K4zDHf@public.gmane.org>
2015-09-15 15:40 ` Tony Lindgren
2015-09-15 15:40 ` Tony Lindgren
2015-09-15 15:40 ` Tony Lindgren
[not found] ` <2adcbfd1d5b237598d37edcbeec4a8dbd443f36f.1442079408.git.dmitry.torokhov-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2015-09-23 12:16 ` Shawn Guo
2015-09-23 12:16 ` Shawn Guo
2015-09-23 12:16 ` Shawn Guo
2015-09-21 22:55 ` Dmitry Torokhov [this message]
2015-09-22 22:00 ` [PATCH 1/6] Input: edt-ft5x06 - switch to newer gpio framework Franklin S Cooper Jr.
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20150921225533.GA20559@dtor-ws \
--to=dmitry.torokhov@gmail.com \
--cc=LW@KARO-electronics.de \
--cc=fcooper@ti.com \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=maxime.ripard@free-electrons.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.