From patchwork Sat Mar 2 14:17:03 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Vasut X-Patchwork-Id: 10836649 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A4C2E17E9 for ; Sat, 2 Mar 2019 14:17:15 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8BF912AF00 for ; Sat, 2 Mar 2019 14:17:15 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7BE5D2AF02; Sat, 2 Mar 2019 14:17:15 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id DB6AB2AF00 for ; Sat, 2 Mar 2019 14:17:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726123AbfCBORN (ORCPT ); Sat, 2 Mar 2019 09:17:13 -0500 Received: from mail-out.m-online.net ([212.18.0.10]:42251 "EHLO mail-out.m-online.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726065AbfCBORM (ORCPT ); Sat, 2 Mar 2019 09:17:12 -0500 Received: from frontend01.mail.m-online.net (unknown [192.168.8.182]) by mail-out.m-online.net (Postfix) with ESMTP id 44BSzB16Yqz1qxJv; Sat, 2 Mar 2019 15:17:10 +0100 (CET) Received: from localhost (dynscan1.mnet-online.de [192.168.6.70]) by mail.m-online.net (Postfix) with ESMTP id 44BSzB0HJKz1r2H7; Sat, 2 Mar 2019 15:17:10 +0100 (CET) X-Virus-Scanned: amavisd-new at mnet-online.de Received: from mail.mnet-online.de ([192.168.8.182]) by localhost (dynscan1.mail.m-online.net [192.168.6.70]) (amavisd-new, port 10024) with ESMTP id T8EXxBmlyyXm; Sat, 2 Mar 2019 15:17:08 +0100 (CET) X-Auth-Info: nlIgF80njhw9s69zANeN8jhML8iAAoc+4huYzT1Mm3U= Received: from kurokawa.lan (ip-86-49-110-70.net.upcbroadband.cz [86.49.110.70]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.mnet-online.de (Postfix) with ESMTPSA; Sat, 2 Mar 2019 15:17:08 +0100 (CET) From: Marek Vasut To: linux-input@vger.kernel.org Cc: Marek Vasut , Dmitry Torokhov , Henrik Rydberg , Olivier Sobrie , Philipp Puschmann , Rob Herring , devicetree@vger.kernel.org Subject: [PATCH 1/2] Input: ili210x - Add DT binding for the Ilitek ILI2117 touch controller Date: Sat, 2 Mar 2019 15:17:03 +0100 Message-Id: <20190302141704.32547-1-marex@denx.de> X-Mailer: git-send-email 2.19.2 MIME-Version: 1.0 Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Add DT binding for the Ilitek ILI2117 touch controller, which is yet again a slightly different device in the ILI21xx family. Signed-off-by: Marek Vasut Cc: Dmitry Torokhov Cc: Henrik Rydberg Cc: Olivier Sobrie Cc: Philipp Puschmann Cc: Rob Herring Cc: devicetree@vger.kernel.org To: linux-input@vger.kernel.org Reviewed-by: Rob Herring Tested-by: Sven Van Asbroeck # ILI2118A variant --- Documentation/devicetree/bindings/input/ilitek,ili2xxx.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Documentation/devicetree/bindings/input/ilitek,ili2xxx.txt b/Documentation/devicetree/bindings/input/ilitek,ili2xxx.txt index b2a76301e632..dc194b2c151a 100644 --- a/Documentation/devicetree/bindings/input/ilitek,ili2xxx.txt +++ b/Documentation/devicetree/bindings/input/ilitek,ili2xxx.txt @@ -1,8 +1,9 @@ -Ilitek ILI210x/ILI251x touchscreen controller +Ilitek ILI210x/ILI2117/ILI251x touchscreen controller Required properties: - compatible: ilitek,ili210x for ILI210x + ilitek,ili2117 for ILI2117 ilitek,ili251x for ILI251x - reg: The I2C address of the device From patchwork Sat Mar 2 14:17:04 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Vasut X-Patchwork-Id: 10836651 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 9842B14DE for ; Sat, 2 Mar 2019 14:17:16 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 851792AF00 for ; Sat, 2 Mar 2019 14:17:16 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 796E22AF02; Sat, 2 Mar 2019 14:17:16 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 03C5A2AF00 for ; Sat, 2 Mar 2019 14:17:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726065AbfCBORP (ORCPT ); Sat, 2 Mar 2019 09:17:15 -0500 Received: from mail-out.m-online.net ([212.18.0.9]:33447 "EHLO mail-out.m-online.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726113AbfCBORP (ORCPT ); Sat, 2 Mar 2019 09:17:15 -0500 Received: from frontend01.mail.m-online.net (unknown [192.168.8.182]) by mail-out.m-online.net (Postfix) with ESMTP id 44BSzC6hX5z1rJD7; Sat, 2 Mar 2019 15:17:11 +0100 (CET) Received: from localhost (dynscan1.mnet-online.de [192.168.6.70]) by mail.m-online.net (Postfix) with ESMTP id 44BSzC60P7z1r2H7; Sat, 2 Mar 2019 15:17:11 +0100 (CET) X-Virus-Scanned: amavisd-new at mnet-online.de Received: from mail.mnet-online.de ([192.168.8.182]) by localhost (dynscan1.mail.m-online.net [192.168.6.70]) (amavisd-new, port 10024) with ESMTP id 9MvoCW5TFccM; Sat, 2 Mar 2019 15:17:10 +0100 (CET) X-Auth-Info: TciPB+5vf0dMhWyTAdGXjOTZhkVK1At4GtejcIvavPg= Received: from kurokawa.lan (ip-86-49-110-70.net.upcbroadband.cz [86.49.110.70]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.mnet-online.de (Postfix) with ESMTPSA; Sat, 2 Mar 2019 15:17:10 +0100 (CET) From: Marek Vasut To: linux-input@vger.kernel.org Cc: Marek Vasut , Dmitry Torokhov , Henrik Rydberg , Olivier Sobrie , Philipp Puschmann Subject: [PATCH 2/2] Input: ili210x - add ILI2117 support Date: Sat, 2 Mar 2019 15:17:04 +0100 Message-Id: <20190302141704.32547-2-marex@denx.de> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190302141704.32547-1-marex@denx.de> References: <20190302141704.32547-1-marex@denx.de> MIME-Version: 1.0 Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Add support for ILI2117 touch controller. This controller is similar to the ILI210x and ILI251x, except for the following differences: - Reading out of touch data must happen at most 300 mS after the interrupt line was asserted. No command must be sent, the data are returned upon pure I2C read of 43 bytes long. - Supports 10 simultaneous touch inputs. - Touch data format is slightly different. Signed-off-by: Marek Vasut Cc: Dmitry Torokhov Cc: Henrik Rydberg Cc: Olivier Sobrie Cc: Philipp Puschmann To: linux-input@vger.kernel.org --- drivers/input/touchscreen/ili210x.c | 46 ++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/drivers/input/touchscreen/ili210x.c b/drivers/input/touchscreen/ili210x.c index 9169aa03958a..b8537e0e499b 100644 --- a/drivers/input/touchscreen/ili210x.c +++ b/drivers/input/touchscreen/ili210x.c @@ -12,6 +12,7 @@ #include #define ILI210X_TOUCHES 2 +#define ILI211X_TOUCHES 10 #define ILI251X_TOUCHES 10 #define DEFAULT_POLL_PERIOD 20 @@ -29,6 +30,7 @@ struct firmware_version { enum ili2xxx_model { MODEL_ILI210X, + MODEL_ILI211X, MODEL_ILI251X, }; @@ -117,6 +119,27 @@ static bool ili210x_touchdata_to_coords(struct ili210x *priv, u8 *touchdata, return true; } +static bool ili211x_touchdata_to_coords(struct ili210x *priv, u8 *touchdata, + unsigned int finger, + unsigned int *x, unsigned int *y) +{ + u32 data; + + if (finger >= ILI211X_TOUCHES) + return false; + + data = get_unaligned_be32(touchdata + 1 + (finger * 4) + 0); + if (data == 0xffffffff) /* Finger up */ + return false; + + *x = ((touchdata[1 + (finger * 4) + 0] & 0xf0) << 4) | + touchdata[1 + (finger * 4) + 1]; + *y = ((touchdata[1 + (finger * 4) + 0] & 0x0f) << 8) | + touchdata[1 + (finger * 4) + 2]; + + return true; +} + static bool ili251x_touchdata_to_coords(struct ili210x *priv, u8 *touchdata, unsigned int finger, unsigned int *x, unsigned int *y) @@ -145,6 +168,9 @@ static bool ili210x_report_events(struct ili210x *priv, u8 *touchdata) if (priv->model == MODEL_ILI210X) { touch = ili210x_touchdata_to_coords(priv, touchdata, i, &x, &y); + } else if (priv->model == MODEL_ILI211X) { + touch = ili211x_touchdata_to_coords(priv, touchdata, + i, &x, &y); } else if (priv->model == MODEL_ILI251X) { touch = ili251x_touchdata_to_coords(priv, touchdata, i, &x, &y); @@ -175,12 +201,26 @@ static void ili210x_work(struct work_struct *work) dwork.work); struct i2c_client *client = priv->client; u8 touchdata[64] = { 0 }; + s16 sum = 0; bool touch; - int error = -EINVAL; + int i, error = -EINVAL; if (priv->model == MODEL_ILI210X) { error = ili210x_read_reg(client, REG_TOUCHDATA, touchdata, sizeof(touchdata)); + } else if (priv->model == MODEL_ILI211X) { + error = ili210x_read(client, touchdata, 43); + if (!error) { + /* This chip uses custom checksum at the end of data */ + for (i = 0; i <= 41; i++) + sum = (sum + touchdata[i]) & 0xff; + if ((-sum & 0xff) != touchdata[42]) { + dev_err(&client->dev, + "CRC error (crc=0x%02x expected=0x%02x)\n", + sum, touchdata[42]); + return; + } + } } else if (priv->model == MODEL_ILI251X) { error = ili210x_read_reg(client, REG_TOUCHDATA, touchdata, 31); @@ -310,6 +350,8 @@ static int ili210x_i2c_probe(struct i2c_client *client, priv->model = model; if (model == MODEL_ILI210X) priv->max_touches = ILI210X_TOUCHES; + if (model == MODEL_ILI211X) + priv->max_touches = ILI211X_TOUCHES; if (model == MODEL_ILI251X) priv->max_touches = ILI251X_TOUCHES; @@ -394,6 +436,7 @@ static SIMPLE_DEV_PM_OPS(ili210x_i2c_pm, static const struct i2c_device_id ili210x_i2c_id[] = { { "ili210x", MODEL_ILI210X }, + { "ili2117", MODEL_ILI211X }, { "ili251x", MODEL_ILI251X }, { } }; @@ -401,6 +444,7 @@ MODULE_DEVICE_TABLE(i2c, ili210x_i2c_id); static const struct of_device_id ili210x_dt_ids[] = { { .compatible = "ilitek,ili210x", .data = (void *)MODEL_ILI210X }, + { .compatible = "ilitek,ili2117", .data = (void *)MODEL_ILI211X }, { .compatible = "ilitek,ili251x", .data = (void *)MODEL_ILI251X }, { }, };