From patchwork Tue Aug 14 05:46:46 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Wang X-Patchwork-Id: 1318231 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) by patchwork1.kernel.org (Postfix) with ESMTP id AA1ED3FC81 for ; Tue, 14 Aug 2012 05:50:26 +0000 (UTC) Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.76 #1 (Red Hat Linux)) id 1T19yV-0002A7-Pn; Tue, 14 Aug 2012 05:47:31 +0000 Received: from mail.windriver.com ([147.11.1.11]) by merlin.infradead.org with esmtps (Exim 4.76 #1 (Red Hat Linux)) id 1T19yS-00029t-5Y for linux-arm-kernel@lists.infradead.org; Tue, 14 Aug 2012 05:47:28 +0000 Received: from ALA-HCA.corp.ad.wrs.com (ala-hca [147.11.189.40]) by mail.windriver.com (8.14.5/8.14.3) with ESMTP id q7E5lLTY027788 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=FAIL); Mon, 13 Aug 2012 22:47:21 -0700 (PDT) Received: from [128.224.163.220] (128.224.163.220) by ALA-HCA.corp.ad.wrs.com (147.11.189.50) with Microsoft SMTP Server (TLS) id 14.2.309.2; Mon, 13 Aug 2012 22:47:21 -0700 Message-ID: <5029E646.5090900@gmail.com> Date: Tue, 14 Aug 2012 13:46:46 +0800 From: Hui Wang User-Agent: Thunderbird 2.0.0.24 (X11/20101027) MIME-Version: 1.0 To: Shawn Guo Subject: Re: How to define gpio irq with device tree References: <5024FF03.1070805@de.bosch.com> <20120814041841.GA30782@S2101-09.ap.freescale.net> In-Reply-To: <20120814041841.GA30782@S2101-09.ap.freescale.net> X-Spam-Note: CRM114 invocation failed X-Spam-Score: -2.5 (--) X-Spam-Report: SpamAssassin version 3.3.2 on merlin.infradead.org summary: Content analysis details: (-2.5 points) pts rule name description ---- ---------------------- -------------------------------------------------- -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at http://www.dnswl.org/, medium trust [147.11.1.11 listed in list.dnswl.org] 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (jason77.wang[at]gmail.com) 0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is CUSTOM_MED 0.8 SPF_NEUTRAL SPF: sender does not match SPF record (neutral) -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] 0.9 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing list Cc: "linux-arm-kernel@lists.infradead.org >> \"linux-arm-kernel@lists.infradead.org\"" , Knut Wohlrab X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: linux-arm-kernel-bounces@lists.infradead.org Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org 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: > 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@021a8000 { /* I2C3 */ > + status = "okay"; > + clock-frequency = <400000>; > + pinctrl-names = "default"; > + pinctrl-0 = <&pinctrl_i2c3_1>; > + > + egalax@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 > #include > #include > +#include > +#include > > /* > * 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, > 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@021a8000 { /* I2C3 */ + status = "okay"; + clock-frequency = <100000>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_i2c3_1>; + + egalax_ts@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 */