From: jason77.wang@gmail.com (Hui Wang)
To: linux-arm-kernel@lists.infradead.org
Subject: How to define gpio irq with device tree
Date: Tue, 14 Aug 2012 13:46:46 +0800 [thread overview]
Message-ID: <5029E646.5090900@gmail.com> (raw)
In-Reply-To: <20120814041841.GA30782@S2101-09.ap.freescale.net>
Shawn Guo wrote:
> On Fri, Aug 10, 2012 at 02:30:59PM +0200, Knut Wohlrab wrote:
>
>> Hello,
>>
>> I try the touch screen of a iMX6 SabreLite evaluation board. The
>> used eGalax touch controller worked fine with a 3.2.x kernel [1]. As
>> mentioned there [2] I merge the basic device tree support to the
>> actual driver (see patch [4]) and add the touch definition to
>> arch/arm/boot/dts/imx6q-sabrelite.dts [3].
>>
>> The driver seems to start but the interrupt never occurs.
>>
>> The pinmux and I2C configuration seems correct. I did a simple test
>> with polling the interrupt gpio (see "POLLTEST" in patch [4]) and
>> got coordinates matching to the movements on the screen.
>>
>> How to configure the gpio irq correctly?
>>
>> Anybody solved to work with the eGalax touch and iMX6 SabreLite with
>> kernel > 3.2?
>>
>>
> I'm not interested in reviewing those out-of-tree codes to see what
> goes wrong there. But I just quickly enabled the driver for
> imx6q-sabrelite board with the following changes against latest
> mainline. And the interrupt seems working for me.
>
>
I generated a similar patch on the last week, only the linux-input part.
please refer to https://patchwork.kernel.org/patch/1293451/
For mach dts part:
diff --git a/arch/arm/boot/dts/imx6q-sabrelite.dts
b/arch/arm/boot/dts/imx6q-sabrelite.dts
index d42e851..71fcd12 100644
--- a/arch/arm/boot/dts/imx6q-sabrelite.dts
+++ b/arch/arm/boot/dts/imx6q-sabrelite.dts
@@ -53,6 +53,7 @@
fsl,pins = <
144 0x80000000 /* MX6Q_PAD_EIM_D22__GPIO_3_22 */
121 0x80000000 /* MX6Q_PAD_EIM_D19__GPIO_3_19 */
+ 972 0x10 /* MX6Q_PAD_GPIO_9__GPIO_1_9 */
>;
};
};
@@ -114,6 +115,21 @@
VDDIO-supply = <®_3p3v>;
};
};
+
+ i2c at 021a8000 { /* I2C3 */
+ status = "okay";
+ clock-frequency = <100000>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_i2c3_1>;
+
+ egalax_ts at 04 {
+ compatible = "eeti,egalax_ts";
+ reg = <0x04>;
+ interrupt-parent = <&gpio1>;
+ interrupts = <9 2>;
+ irq-gpio = <&gpio1 9 0>;
+ };
+ };
};
};
diff --git a/arch/arm/boot/dts/imx6q.dtsi b/arch/arm/boot/dts/imx6q.dtsi
index 3d3c64b..ebbd624 100644
--- a/arch/arm/boot/dts/imx6q.dtsi
+++ b/arch/arm/boot/dts/imx6q.dtsi
@@ -545,6 +545,14 @@
};
};
+
+ i2c3 {
+ pinctrl_i2c3_1: i2c3grp-1 {
+ fsl,pins = <1013 0x4001b8b1 /* MX6Q_PAD_GPIO_5__I2C3_SCL */
+ 1037 0x4001b8b1>; /* MX6Q_PAD_GPIO_16__I2C3_SDA */
+ };
+ };
+
serial2 {
pinctrl_serial2_1: serial2grp-1 {
fsl,pins = <183 0x1b0b1 /* MX6Q_PAD_EIM_D26__UART2_TXD */
> Regards,
> Shawn
>
> --8<---
>
> diff --git a/arch/arm/boot/dts/imx6q-sabrelite.dts b/arch/arm/boot/dts/imx6q-sabrelite.dts
> index 72f30f3..c8511c1 100644
> --- a/arch/arm/boot/dts/imx6q-sabrelite.dts
> +++ b/arch/arm/boot/dts/imx6q-sabrelite.dts
> @@ -115,6 +115,21 @@
> VDDIO-supply = <®_3p3v>;
> };
> };
> +
> + i2c at 021a8000 { /* I2C3 */
> + status = "okay";
> + clock-frequency = <400000>;
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_i2c3_1>;
> +
> + egalax at 04 {
> + compatible = "eeti,egalax";
> + reg = <0x04>;
> + interrupt-parent = <&gpio1>;
> + interrupts = <9 0x8>;
> + wakeup-gpios = <&gpio1 9 0>;
> + };
> + };
> };
> };
>
> diff --git a/arch/arm/boot/dts/imx6q.dtsi b/arch/arm/boot/dts/imx6q.dtsi
> index 3d3c64b..bbf5196 100644
> --- a/arch/arm/boot/dts/imx6q.dtsi
> +++ b/arch/arm/boot/dts/imx6q.dtsi
> @@ -545,6 +545,13 @@
> };
> };
>
> + i2c3 {
> + pinctrl_i2c3_1: i2c3grp-1 {
> + fsl,pins = <1013 0x4001b8b1 /* MX6Q_PAD_GPIO_5__I2C3_SCL */
> + 1037 0x4001b8b1>; /* MX6Q_PAD_GPIO_16__I2C3_SDA */
> + };
> + };
> +
> serial2 {
> pinctrl_serial2_1: serial2grp-1 {
> fsl,pins = <183 0x1b0b1 /* MX6Q_PAD_EIM_D26__UART2_TXD */
> diff --git a/drivers/input/touchscreen/egalax_ts.c b/drivers/input/touchscreen/egalax_ts.c
> index 70524dd..013011d 100644
> --- a/drivers/input/touchscreen/egalax_ts.c
> +++ b/drivers/input/touchscreen/egalax_ts.c
> @@ -28,6 +28,8 @@
> #include <linux/slab.h>
> #include <linux/bitops.h>
> #include <linux/input/mt.h>
> +#include <linux/of_device.h>
> +#include <linux/of_gpio.h>
>
> /*
> * Mouse Mode: some panel may configure the controller to mouse mode,
> @@ -122,7 +124,7 @@ static irqreturn_t egalax_ts_interrupt(int irq, void *dev_id)
> /* wake up controller by an falling edge of interrupt gpio. */
> static int egalax_wake_up_device(struct i2c_client *client)
> {
> - int gpio = irq_to_gpio(client->irq);
> + int gpio = of_get_named_gpio(client->dev.of_node, "wakeup-gpios", 0);
> int ret;
>
> ret = gpio_request(gpio, "egalax_irq");
> @@ -251,6 +253,12 @@ static const struct i2c_device_id egalax_ts_id[] = {
> };
> MODULE_DEVICE_TABLE(i2c, egalax_ts_id);
>
> +static struct of_device_id egalax_ts_dt_ids[] = {
> + { .compatible = "eeti,egalax" },
> + { /* sentinel */ }
> +};
> +MODULE_DEVICE_TABLE(of, egalax_ts_dt_ids);
> +
> #ifdef CONFIG_PM_SLEEP
> static int egalax_ts_suspend(struct device *dev)
> {
> @@ -279,6 +287,7 @@ static struct i2c_driver egalax_ts_driver = {
> .name = "egalax_ts",
> .owner = THIS_MODULE,
> .pm = &egalax_ts_pm_ops,
> + .of_match_table = egalax_ts_dt_ids,
> },
> .id_table = egalax_ts_id,
> .probe = egalax_ts_probe,
>
next prev parent reply other threads:[~2012-08-14 5:46 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-10 12:30 How to define gpio irq with device tree Knut Wohlrab
2012-08-14 4:18 ` Shawn Guo
2012-08-14 5:46 ` Hui Wang [this message]
2012-08-14 6:46 ` Shawn Guo
2012-08-14 6:54 ` Hui Wang
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=5029E646.5090900@gmail.com \
--to=jason77.wang@gmail.com \
--cc=linux-arm-kernel@lists.infradead.org \
/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.