From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933677AbcAZIVj (ORCPT ); Tue, 26 Jan 2016 03:21:39 -0500 Received: from mail-by2on0056.outbound.protection.outlook.com ([207.46.100.56]:34912 "EHLO na01-by2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932755AbcAZIVf (ORCPT ); Tue, 26 Jan 2016 03:21:35 -0500 X-Greylist: delayed 952 seconds by postgrey-1.27 at vger.kernel.org; Tue, 26 Jan 2016 03:21:34 EST Authentication-Results: spf=pass (sender IP is 137.71.25.57) smtp.mailfrom=analog.com; arm.com; dkim=none (message not signed) header.d=none;arm.com; dmarc=bestguesspass action=none header.from=analog.com; Reply-To: Subject: Re: [PATCH 3/3] input: touchscreen: ad7879: add device tree support References: <1453777477-29706-1-git-send-email-stefan@agner.ch> <1453777477-29706-3-git-send-email-stefan@agner.ch> To: Stefan Agner , , CC: , , , , , , , , From: Michael Hennerich Organization: Analog Devices Inc. Message-ID: <56A72AF1.1060706@analog.com> Date: Tue, 26 Jan 2016 09:14:41 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.5.1 MIME-Version: 1.0 In-Reply-To: <1453777477-29706-3-git-send-email-stefan@agner.ch> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;BN1BFFO11FD036;1:WuXBHQ0Jun0frURudTKEhf4DGkrjgJRiyTG3Ij/HFJjygaOJJ6tJzOGis20vV0+Sv+pNisnUot6CbBu/t3DeBFBhrVDgG0b4Sg3kavv5pZeSSBfchoyi6P6o2FeVmdndgVoMtEldBp5d9nfWM8dcmuYN50wC6gBYZ23Dzco36jyzLbAF3JkMomwCzduTZG6L5lazBeTtWCG0XMqEviHWqdQG5vrc0yXpKIL52dXaYzYVEZ4DsvnCNA5D+p0VroYZEdMDaOsZGC6GvQHZBGGiRU92Rqj7ODe1GrmhJ5HX6XR3JrOu5/OPo0l2/vn2wRPUxL+QVWjpBDzp3v+ub/yVf+mgP5z0qsKjRJeMBYGqnvxWa0XHzD/zkmdJQNgGMu8yvwiSo7/MxfEZPTyhemcX6/K5aOgSXu3unRfLdTlmmTXTr+/mNOQYP4Vf165EhK+2q0cMdLtZs8CquijZD7CmTUuWi5CWITJ+ThVedFGS1BTOWEyWhIPV69z8kMziy8QB X-Forefront-Antispam-Report: CIP:137.71.25.57;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(2980300002)(438002)(3190300001)(479174004)(51914003)(24454002)(377454003)(189002)(199003)(54356999)(87266999)(230700001)(5001970100001)(43066003)(15975445007)(106466001)(2950100001)(1220700001)(77096005)(1096002)(6806005)(50986999)(65956001)(53806999)(65816999)(586003)(33656002)(76176999)(5008740100001)(5001770100001)(4001350100001)(65806001)(36756003)(189998001)(19580395003)(47776003)(2906002)(87936001)(50466002)(19580405001)(83506001)(80316001)(4326007)(59896002)(64126003)(86362001)(23746002);DIR:OUT;SFP:1101;SCL:1;SRVR:CY1PR0301MB1563;H:nwd2mta2.analog.com;FPR:;SPF:Pass;PTR:nwd2mail11.analog.com;MX:1;A:1;LANG:en; X-MS-Office365-Filtering-Correlation-Id: 6e853e3f-c0e8-4dee-1195-08d32629b2fe X-Microsoft-Exchange-Diagnostics: 1;CY1PR0301MB1563;2:cS7QpcU10ahog4efSdjhINquimfo6CneukHlJrKOWsHOAV9Qz2hHKr2IrSdm8XpJSs2qQouX3aaG9GekiPg0eD7oEjnFfCOurZN969l1OlvgFwT/pEgYYc26w2X7KTYlLevnL2QyS2cuqDwXnJdKLKTRgEViFVnVbeStXtO3WYfHX57U3VyRwOL3XeF3KYKk;3:czNWDfgMD3Kpwh1eldqk20h29eWAca0uCF5ln7OeVgvjUHVd4VZAfVs49s4nsu6pvSn1MV7aTJBTdIN4qEwnXmUBozwtlFeuloqDQc/u26cCJhL/JDLdtZpskcqK0QuVvhtohSWy9YZ9vUMDK7zMyzGKGduMMhE+3DT+bdZV3jcXG1YEDZnPJzKrlWVpdGbX4ay+0ZyZT7OsSehnudeBcK6uMqcAP7twlrx7PAwrV1zE8TbEOTmH602DpYh2qcqXxm8e91LF97WZWSfSNdgi6w==;25:8oZ8JMeTLGcpVXYuNIBiB8gQom73zCjeBNgbyWS/ZqRztwnXhQ7BWQoyW7whbFCbxKZDa1TflXF5DEE7dk989iNfwb19XKbLxGbTPGxh4HglSD5mGMdf/NrbS7ovoagKrM/EuHldSMVx3jEx5nMJkQAivQs2YDGc6bpV3dgO1Vr+U8hi0/Vnfqn/nCuWPGwQkWxH8UwQbW7cEvYctqbidgAvUGQQ/HCCClM9M2x6QFlIQLs+Tss5QE/TkuHflOoP X-Exchange-Antispam-Report-Test: UriScan:;BCL:0;PCL:0;RULEID:(8251501002);SRVR:CY1PR0301MB1563;UriScan:; X-Microsoft-Exchange-Diagnostics: 1;CY1PR0301MB1563;20:wqg/Ud/HbZyuyIcQBvnRg0CnjiZ8oVM6jy79Ju5D82Ir6t6crXjJjS90pvELFo2sB8FnjReB1vFBemRtKQsTUcHrflN+ACAm6tVqr6Byvd4gPVfTeg4wU0GeSlu5DJbyrQenQ/OaNAlovqV940B0UOOj8gdHovsMw6CiiUgv5tJSDhvM4vEYXyZ5TSKwvlgk6OPKAWHS13dfOxDNFbumJxJxW+mHHDBR/VDdZP5CY+CqdTYbb9nLqPMUFyJrZyjNUHBnL7YAR2om/nOqz3mJG2gBeprBY/6Tj1FAIoK4DS2NgaYUcaHClWrsUzBQEXVHzKDRZ/bXcduueikjhJI5GVC57hWkw+bEgvvLJw3Ccsbd40Wwp3GBzg6ljZNMm8fE6s/sykxxPUroQqS3y3wI7o3jdorUpmhl8p6SlHgnE76caxMiG+QBe7H/Q4HEZCZqXm8FuIoQ7WYKhT69MaGNsBI1rlRTFYOuAUUxqzpvEOwz+EyYMzNeErwsUoZ84mrV X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(123027)(601004)(2401047)(13017025)(8121501046)(13015025)(13023025)(5005006)(13024025)(520078)(13018025)(3002001)(10201501046);SRVR:CY1PR0301MB1563;BCL:0;PCL:0;RULEID:;SRVR:CY1PR0301MB1563; X-Microsoft-Exchange-Diagnostics: 1;CY1PR0301MB1563;4:NqOEQfq896YHAy784wSmo3SsQi7UZmUtNfvvPy15ljpim7Vo0Srhwx36iKjWD0+aadyQSWYKBEYbFJO3B0nY4QHZdv5g5QNWkULxp5xPjpfMSZ88MibC5PJnJC7SVE4QvcmanCjYmdJWgTECn+y1V/3zrP+hZoQ17pa8TR2ShrNTwiwKHx8cshkCMANB7Bi9telzbiZwbP8ao62FIQLRVoBSEQ2fQPyD8wkvTYtAYHnpe8qTt2dE+N9immP+r0NdqQZRrzCnergG0VeDgXApO6WsOeAqfF08IvYsyQN4MMPd2VGb3FtUBFBwSgyGgkT2SoNWIHa932BHL+r1JEoNFJIYwSej2XDxzqx6e9faQW3EveFDtGSepkyHV8/97cL27vZ4bgYFkNY+nYb/7WOJCOHq0VvhEm81HLe6OTFXL11DLfuH17EPXPOCp9qtvcGIz/+k9h8VBZNdR1R4pDdwFvOaJtnsB4/V2rWbr20c3Y/JjzfDRanmkzeGNk4XTGUc X-Forefront-PRVS: 08331F819E X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;CY1PR0301MB1563;23:zaTR2HlmT/x2i+nmcSZT1gfrRrVzhz//dt9?= =?Windows-1252?Q?FXenpnXYnuoZFF9mTL13RxM4bo87QfIdq2CTTc/SIkbOOm/XJ2ldXZMI?= =?Windows-1252?Q?tF5sztUCRmaBWAmpyZCe6B2MVmtvRgA7PXTBu6B64VBC+RatH0mGeEaD?= =?Windows-1252?Q?Ahhxg4b0Rq3C6txfEfccBOY3sIRl2qg2YT4J+rIQfFkUsaLK0d+3snD4?= =?Windows-1252?Q?OEPM7gXeB461jJqob6JdKUQmEcn7UIf4Lnu2g0l1aJWZFFE7c55YMeMs?= =?Windows-1252?Q?DIDSAQQd47LlJYXU760QdG68Mi6SIlFRDabaZk52O6mn/2BJdy4X93d/?= =?Windows-1252?Q?m7sIdfgL2aUf24dv4Sg5sKLW22QGqN+AZzE0CoDvGamdKInPblv/lXKV?= =?Windows-1252?Q?ruU0c/GthugXTe6pqnb5ymHx6ULDGdCynqA8jC8kg9EXK/OH8hjNaT9i?= =?Windows-1252?Q?NGyLNRubUCGZAFqaby++dFOPDVz4zAyWLYVbUJFQaPQj3dTiUrjE6Lxb?= =?Windows-1252?Q?fopJeq090W2328nNUaV51UCm1b+aUxPLjaQ52LUJsXlfIh3qvRa7AxeU?= =?Windows-1252?Q?yWWXZZqr63rQQS57KBxkHDT6hkX6LoEHmceMXa3/fIG8sY1NXKW0rASa?= =?Windows-1252?Q?k/3uFccDjSTNK+Rp+l6BxZ7J7l1etQtdiTkhS1A4jYJTiI4eZEyT2zfb?= =?Windows-1252?Q?D6tUG70Zout2EcffolxWXWsLe8vp27yIFesCmn7bO5w+DXEqCY70ZJua?= =?Windows-1252?Q?tjDRaWw4a+Adfgi6vL6ZwZ4uvXNib1iK90EYk5jZo21VCnREnN6BZo0s?= =?Windows-1252?Q?Mse8sbxCw69gOKQ+/pFi6TWn+2zAtIem/LxGYjWJlIZcFb6Uyy9yrkW3?= =?Windows-1252?Q?3FFJWqCOlIJxrEDWvE5NMpwAa7f1dj8M6VpV29N6p+krWNVbozqBT76Q?= =?Windows-1252?Q?lXwU3J2XJMzkvzU9o0rB4f175furDFDu5gzdmyGkg4lZgbkPFQXKpbFa?= =?Windows-1252?Q?xajBsfxBrZL868x54sOIuKdeo4KPRrBpcT3cq/bJ8nQPpYR9/U5M6diU?= =?Windows-1252?Q?dvG+Qyiz7/XK3cRNqMcYb4yh43LaM1HCUiKIi1H+Bvx+RFYkxkAH81ER?= =?Windows-1252?Q?SCGu0+GcovkbvKhkWZMgZKJDTOZrQwi1b/VHfUJIHRxnzXqVr7qsnohZ?= =?Windows-1252?Q?aDDfhAglb3PZRDf1Lc0IALUa1rxDtJQ7NRHi47izVKE2Wn4RAcUxmmjc?= =?Windows-1252?Q?vOEvb96D7ft31xB2qqW9dVdC4tOyYbla2K6jSzTSGh8srI/QVv5iNhgK?= =?Windows-1252?Q?rYxT3uCHsH6r3LhUvQ1oKlSU0R4Fx9HbTH9XXOHOvroshmwk=3D?= X-Microsoft-Exchange-Diagnostics: 1;CY1PR0301MB1563;5:AnQPyRWUulEbzvScrk6Xhl3qd9xn6U3dj8z/l1m+ys0XvpMBLonXitSyoEkSJkCRP8G4VfGtbQJiyqcwuo2xx5LS4Te+DBKAkMh0DwhTXgWI0E2XMDZ/xDroJMwxMqqnNK7qAhF4764J2HQFbL4yjQ==;24:fThymq6qJFamnXAbxZ7JG7zMFpfdKYLpsRNJiCQL/94ZzzyF/K/rlZWvu3P3H8hQjLV8ElWAcsch+F2+3V9rt1ZiRE4QlYZ7TNXcbz32Cqk= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: analog.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Jan 2016 08:21:32.6321 (UTC) X-MS-Exchange-CrossTenant-Id: eaa689b4-8f87-40e0-9c6f-7228de4d754a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=eaa689b4-8f87-40e0-9c6f-7228de4d754a;Ip=[137.71.25.57];Helo=[nwd2mta2.analog.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR0301MB1563 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 01/26/2016 04:04 AM, Stefan Agner wrote: > Add device tree support for the I2C variant of AD7879 (AD7879-1). This > allows to specify the touchscreen controller as a I2C client node. > Most of the options available as platform data are also available as > device tree properties. Exporting the GPIO is currently not possible > through device tree. > > Signed-off-by: Stefan Agner Hi Stefan, Thanks for the patch - There is something similar in our tree but I forgot to send it mainline a long time ago. https://github.com/analogdevicesinc/linux/commit/69b16d4b616a4bbe9001d3f67d3ff54f3deb85ce There are some build issues can you have a look? I also don't understand why "exporting the GPIO is not possible through device tree"? Can you explain? Regards, Michael > --- > .../bindings/input/touchscreen/ad7879-i2c.txt | 47 ++++++++++++++++ > drivers/input/touchscreen/ad7879-i2c.c | 63 +++++++++++++++++++++- > drivers/input/touchscreen/ad7879-spi.c | 3 +- > drivers/input/touchscreen/ad7879.c | 2 +- > drivers/input/touchscreen/ad7879.h | 1 + > 5 files changed, 113 insertions(+), 3 deletions(-) > create mode 100644 Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt > > diff --git a/Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt b/Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt > new file mode 100644 > index 0000000..bf169a2 > --- /dev/null > +++ b/Documentation/devicetree/bindings/input/touchscreen/ad7879-i2c.txt > @@ -0,0 +1,47 @@ > +* Analog Devices AD7879-1/AD7889-1 touchscreen interface (I2C) > + > +Required properties: > +- compatible: must be "adi,ad7879-1" > +- reg: i2c slave address > +- interrupt-parent: the phandle for the interrupt controller > +- interrupts: touch controller interrupt > +- resistance-plate-x : total resistance of X-plate (for pressure > + calculation) > +- touchscreen-max-pressure : maximum reported pressure > +- touchscreen-swapped-x-y : X and Y axis are swapped (boolean) > + Swapping is done after inverting the axis > +Optional properties: > +- first-conversion-delay : 0-12 in 128us steps (starting with 128us) > + 13: 2.560ms > + 14: 3.584ms > + 15: 4.096ms > +- acquisition-time : 0: 2us > + 1: 4us > + 2: 8us > + 3: 16us > +- median-filter-size : 0: disabled > + 1: 4 measurements > + 2: 8 measurements > + 3: 16 measurements > +- averaging : 0: 2 middle values (1 if median disabled) > + 1: 4 middle values > + 2: 8 middle values > + 3: 16 values > +- conversion-interval: : 0: convert one time only > + 1-255: 515us + val * 35us (up to 9.440ms) > + > +Example: > + > + ad7879@2c { > + compatible = "adi,ad7879-1"; > + reg = <0x2c>; > + interrupt-parent = <&gpio1>; > + interrupts = <13 IRQ_TYPE_EDGE_FALLING>; > + resistance-plate-x = <120>; > + touchscreen-max-pressure = <4096>; > + first-conversion-delay = /bits/ 8 <3>; > + acquisition-time = /bits/ 8 <1>; > + median-filter-size = /bits/ 8 <2>; > + averaging = /bits/ 8 <1>; > + conversion-interval = /bits/ 8 <255>; > + }; > diff --git a/drivers/input/touchscreen/ad7879-i2c.c b/drivers/input/touchscreen/ad7879-i2c.c > index d66962c..08a2c9a 100644 > --- a/drivers/input/touchscreen/ad7879-i2c.c > +++ b/drivers/input/touchscreen/ad7879-i2c.c > @@ -11,6 +11,7 @@ > #include > #include > #include > +#include > > #include "ad7879.h" > > @@ -54,9 +55,50 @@ static const struct ad7879_bus_ops ad7879_i2c_bus_ops = { > .write = ad7879_i2c_write, > }; > > +static struct ad7879_platform_data *ad7879_parse_dt(struct device *dev) > +{ > + struct ad7879_platform_data *pdata; > + struct device_node *np = dev->of_node; > + int err; > + u32 tmp; > + > + if (!np) > + return NULL; > + > + pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL); > + > + if (!pdata) > + return ERR_PTR(-ENOMEM); > + > + err = of_property_read_u32(np, "resistance-plate-x", &tmp); > + if (err) { > + dev_err(dev, "failed to get resistance-plate-x property\n"); > + return ERR_PTR(err); > + } > + pdata->x_plate_ohms = (u16)tmp; > + > + err = of_property_read_u32(np, "touchscreen-max-pressure", &tmp); > + if (err) { > + dev_err(dev, "failed to get touchscreen-max-pressure property\n"); > + return ERR_PTR(err); > + } > + pdata->pressure_min = (u16)tmp; > + > + of_property_read_u8(np, "first-conversion-delay", &pdata->first_conversion_delay); > + of_property_read_u8(np, "acquisition-time", &pdata->acquisition_time); > + of_property_read_u8(np, "median-filter-size", &pdata->median); > + of_property_read_u8(np, "averaging", &pdata->averaging); > + of_property_read_u8(np, "conversion-interval", &pdata->pen_down_acc_interval); > + > + pdata->swap_xy = of_property_read_bool(np, "touchscreen-swapped-x-y"); > + > + return pdata; > +} > + > static int ad7879_i2c_probe(struct i2c_client *client, > const struct i2c_device_id *id) > { > + struct ad7879_platform_data *pdata; > struct ad7879 *ts; > > if (!i2c_check_functionality(client->adapter, > @@ -65,7 +107,17 @@ static int ad7879_i2c_probe(struct i2c_client *client, > return -EIO; > } > > - ts = ad7879_probe(&client->dev, AD7879_DEVID, client->irq, > + pdata = dev_get_platdata(&client->dev); > + > + if (!pdata && IS_ENABLED(CONFIG_OF)) > + pdata = ad7879_parse_dt(&client->dev); > + > + if (IS_ERR_OR_NULL(pdata)) { > + dev_err(&client->dev, "Need platform data\n"); > + return PTR_ERR(pdata); > + } > + > + ts = ad7879_probe(&client->dev, AD7879_DEVID, client->irq, pdata, > &ad7879_i2c_bus_ops); > if (IS_ERR(ts)) > return PTR_ERR(ts); > @@ -91,10 +143,19 @@ static const struct i2c_device_id ad7879_id[] = { > }; > MODULE_DEVICE_TABLE(i2c, ad7879_id); > > +#ifdef CONFIG_OF > +static const struct of_device_id ad7879_dt_ids[] = { > + { .compatible = "adi,ad7879-1", }, > + { } > +}; > +MODULE_DEVICE_TABLE(of, st1232_ts_dt_ids); > +#endif > + > static struct i2c_driver ad7879_i2c_driver = { > .driver = { > .name = "ad7879", > .pm = &ad7879_pm_ops, > + .of_match_table = of_match_ptr(ad7879_dt_ids), > }, > .probe = ad7879_i2c_probe, > .remove = ad7879_i2c_remove, > diff --git a/drivers/input/touchscreen/ad7879-spi.c b/drivers/input/touchscreen/ad7879-spi.c > index 48033c2..8ebe604 100644 > --- a/drivers/input/touchscreen/ad7879-spi.c > +++ b/drivers/input/touchscreen/ad7879-spi.c > @@ -128,7 +128,8 @@ static int ad7879_spi_probe(struct spi_device *spi) > return err; > } > > - ts = ad7879_probe(&spi->dev, AD7879_DEVID, spi->irq, &ad7879_spi_bus_ops); > + ts = ad7879_probe(&spi->dev, AD7879_DEVID, spi->irq, pdata, > + dev_get_platdata(&spi->dev), &ad7879_spi_bus_ops); > if (IS_ERR(ts)) > return PTR_ERR(ts); > > diff --git a/drivers/input/touchscreen/ad7879.c b/drivers/input/touchscreen/ad7879.c > index e290e7b..e763c77 100644 > --- a/drivers/input/touchscreen/ad7879.c > +++ b/drivers/input/touchscreen/ad7879.c > @@ -486,9 +486,9 @@ static inline void ad7879_gpio_remove(struct ad7879 *ts) > #endif > > struct ad7879 *ad7879_probe(struct device *dev, u8 devid, unsigned int irq, > + struct ad7879_platform_data *pdata, > const struct ad7879_bus_ops *bops) > { > - struct ad7879_platform_data *pdata = dev_get_platdata(dev); > struct ad7879 *ts; > struct input_dev *input_dev; > int err; > diff --git a/drivers/input/touchscreen/ad7879.h b/drivers/input/touchscreen/ad7879.h > index 6fd13c4..fa363a0 100644 > --- a/drivers/input/touchscreen/ad7879.h > +++ b/drivers/input/touchscreen/ad7879.h > @@ -24,6 +24,7 @@ struct ad7879_bus_ops { > extern const struct dev_pm_ops ad7879_pm_ops; > > struct ad7879 *ad7879_probe(struct device *dev, u8 devid, unsigned irq, > + struct ad7879_platform_data *pdata, > const struct ad7879_bus_ops *bops); > void ad7879_remove(struct ad7879 *); > > -- Greetings, Michael -- Analog Devices GmbH Wilhelm-Wagenfeld-Str. 6 80807 Muenchen Sitz der Gesellschaft: Muenchen; Registergericht: Muenchen HRB 40368; Geschaeftsfuehrer:Dr.Carsten Suckrow, Thomas Wessel, William A. Martin, Margaret Seif