From patchwork Fri Sep 25 13:52:55 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Wang, Jiada" X-Patchwork-Id: 254958 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 79755C4363D for ; Fri, 25 Sep 2020 13:53:08 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4DCC620878 for ; Fri, 25 Sep 2020 13:53:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728613AbgIYNxH (ORCPT ); Fri, 25 Sep 2020 09:53:07 -0400 Received: from esa2.mentor.iphmx.com ([68.232.141.98]:19050 "EHLO esa2.mentor.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727290AbgIYNxH (ORCPT ); Fri, 25 Sep 2020 09:53:07 -0400 IronPort-SDR: Ib11UUXgMzKcf10oq3K1LQyVSn/Ud+ySbANNUVY8v4zFgGupRHyze439QwHmHzr7w3psU8sH+K E4VB/22g1lCz7r0q+htEq67WjU1z/uJGVTYRGxc7624b4FgwMJkpZ7BZJiVFq1GSKt6S9P+ur/ kXUuKDFc07+vuy0bK1IuU9GB3+8+GPuDRza4LUks+47A83/uB8KymASeVt06DwucvMZd07xh4X h7pRR+VVxFRIu4tcovkVjWL9fMeNRk+LnPnkZzQr46eANlvnbYtKH0xUdFHRjVzEqNBXoACXqW /Ww= X-IronPort-AV: E=Sophos;i="5.77,302,1596528000"; d="scan'208";a="53316554" Received: from orw-gwy-02-in.mentorg.com ([192.94.38.167]) by esa2.mentor.iphmx.com with ESMTP; 25 Sep 2020 05:53:06 -0800 IronPort-SDR: baxa69GpiJejL5AeAXFUJgNvpL+kSYoF2AwIXyBLvFd///es4tpwU5uL5TYsmtncWZYY0YYdwn R5sB7aJatjep+CKwQKNkrZ2fRKMPg3bLKmZJsaGwxWBeFFe9J/vl5t503wSmfTkZUc6drGbBH3 qon65RakRdZRV4V+AcQPjNWmOYcz/Hvai2nyJX7mceApHhCsx44OR5Zia4xGSwGbSYrfptEw4z iQk1FbVt5u9hfkFlLUdA0oYTEj3go+lgEi+KqRxLzCWk2Obl60OgFj2NCCqKO6r0GxgZ7L9o+D Q58= From: Jiada Wang To: , , , , CC: , , , , , , Subject: [PATCH v2 1/3] dt-bindings: input: atmel: add compatible for mXT1386 Date: Fri, 25 Sep 2020 22:52:55 +0900 Message-ID: <20200925135257.21138-2-jiada_wang@mentor.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200925135257.21138-1-jiada_wang@mentor.com> References: <20200925135257.21138-1-jiada_wang@mentor.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org Document the mXT1386 compatible string. Signed-off-by: Jiada Wang Reviewed-by: Dmitry Osipenko --- Documentation/devicetree/bindings/input/atmel,maxtouch.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/Documentation/devicetree/bindings/input/atmel,maxtouch.txt b/Documentation/devicetree/bindings/input/atmel,maxtouch.txt index c88919480d37..c13fc0f3f00b 100644 --- a/Documentation/devicetree/bindings/input/atmel,maxtouch.txt +++ b/Documentation/devicetree/bindings/input/atmel,maxtouch.txt @@ -3,6 +3,7 @@ Atmel maXTouch touchscreen/touchpad Required properties: - compatible: atmel,maxtouch + atmel,mXT1386 The following compatibles have been used in various products but are deprecated: From patchwork Fri Sep 25 13:52:56 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Wang, Jiada" X-Patchwork-Id: 293928 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 131FAC4363D for ; Fri, 25 Sep 2020 13:53:13 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id D79A520878 for ; Fri, 25 Sep 2020 13:53:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728626AbgIYNxM (ORCPT ); Fri, 25 Sep 2020 09:53:12 -0400 Received: from esa4.mentor.iphmx.com ([68.232.137.252]:49986 "EHLO esa4.mentor.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727290AbgIYNxM (ORCPT ); Fri, 25 Sep 2020 09:53:12 -0400 IronPort-SDR: iAzkCJzMTcI9E0fs6GhSIxPGQLonpHzM1U8H+Y5FMpgxthP1ZwFlUGfrCjDbw47cTBBBjz8QBp sLtgSxM/8rTyWbhNERbCN+rwpvb/Yp12/IXyS/2BCrJPOzeTUdQsZH/MCwDOb3GXOvmJ6J/hEC LFkG2mRwrGv/qmLGHDGAAit14SFBJhbhLXf6Z1IPeGS5AZcLrOVEvJ5qNV02fXcEsnjC6N2ys8 L7u5bXkGtdrZM6ZgHaBnCZF08uQyzRSWOTk5XIXbNZJM5sn1WPccZmNkV9QK9xWtdkJhUQ90eV W1w= X-IronPort-AV: E=Sophos;i="5.77,302,1596528000"; d="scan'208";a="53408340" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa4.mentor.iphmx.com with ESMTP; 25 Sep 2020 05:53:10 -0800 IronPort-SDR: CxphhHm+71ZRotVeGsf4ubntlGQ9BVAlJrCDZLKYHEE/+HM4N3wQOWstvGbztcSvx1wrRsguIR QxAul4G51p8MZlVt4JD/mTPlHi2phy9BvG+wu5WChD/7TaAO769sijk6RBsLW/AhGucCtBWabu 1OT5RiONk1/TOZz/eDN7e9YZk6FKuWms3rYkfUQAU/fznN26ETToZVCHuP2Lew0sZ7C4dLDbse 3pG11e13lDZLjXfgns5vipq7biVUjusMREE79ZvEnoR6kiuNIUhXt+2k7pvy3swqqDo0EPkrAU YRI= From: Jiada Wang To: , , , , CC: , , , , , , Subject: [PATCH v2 2/3] Input: atmel_mxt_ts - implement I2C retries for mXT1368 Date: Fri, 25 Sep 2020 22:52:56 +0900 Message-ID: <20200925135257.21138-3-jiada_wang@mentor.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200925135257.21138-1-jiada_wang@mentor.com> References: <20200925135257.21138-1-jiada_wang@mentor.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org According to datasheet, mXT1386 chip has a WAKE line, it is used to wake the chip up from deep sleep mode before communicating with it via the I2C-compatible interface. if the WAKE line is connected to a GPIO line, the line must be asserted 25 ms before the host attempts to communicate with the mXT1386. If the WAKE line is connected to the SCL pin, the mXT1386 will send a NACK on the first attempt to address it, the host must then retry 25 ms later. This patch adds compatible string "atmel,mXT1386" for mXT1386 controller, when I2C transfer on mXT1386 fails, retry the transfer once after a 25 ms sleep. Signed-off-by: Jiada Wang Reviewed-by: Dmitry Osipenko Tested-by: Dmitry Osipenko --- drivers/input/touchscreen/atmel_mxt_ts.c | 62 +++++++++++++++++++----- 1 file changed, 50 insertions(+), 12 deletions(-) diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c index 98f17fa3a892..c00743caed27 100644 --- a/drivers/input/touchscreen/atmel_mxt_ts.c +++ b/drivers/input/touchscreen/atmel_mxt_ts.c @@ -198,6 +198,7 @@ enum t100_type { #define MXT_CRC_TIMEOUT 1000 /* msec */ #define MXT_FW_RESET_TIME 3000 /* msec */ #define MXT_FW_CHG_TIMEOUT 300 /* msec */ +#define MXT_WAKEUP_TIME 25 /* msec */ /* Command to unlock bootloader */ #define MXT_UNLOCK_CMD_MSB 0xaa @@ -340,6 +341,9 @@ struct mxt_data { unsigned int t19_num_keys; enum mxt_suspend_mode suspend_mode; + + /* Indicates whether retry is needed when i2c transfer fails */ + bool retry_i2c_transfers; }; struct mxt_vb2_buffer { @@ -627,7 +631,9 @@ static int mxt_send_bootloader_cmd(struct mxt_data *data, bool unlock) static int __mxt_read_reg(struct i2c_client *client, u16 reg, u16 len, void *val) { + struct mxt_data *data = i2c_get_clientdata(client); struct i2c_msg xfer[2]; + bool retried = false; u8 buf[2]; int ret; @@ -646,22 +652,30 @@ static int __mxt_read_reg(struct i2c_client *client, xfer[1].len = len; xfer[1].buf = val; - ret = i2c_transfer(client->adapter, xfer, 2); - if (ret == 2) { - ret = 0; - } else { - if (ret >= 0) - ret = -EIO; +retry_read: + ret = i2c_transfer(client->adapter, xfer, ARRAY_SIZE(xfer)); + if (ret != ARRAY_SIZE(xfer)) { + if (data->retry_i2c_transfers && !retried) { + dev_dbg(&client->dev, "i2c retry\n"); + /* TODO: add WAKE-GPIO support */ + msleep(MXT_WAKEUP_TIME); + retried = true; + goto retry_read; + } + ret = ret < 0 ? ret : -EIO; dev_err(&client->dev, "%s: i2c transfer failed (%d)\n", __func__, ret); + return ret; } - return ret; + return 0; } static int __mxt_write_reg(struct i2c_client *client, u16 reg, u16 len, const void *val) { + struct mxt_data *data = i2c_get_clientdata(client); + bool retried = false; u8 *buf; size_t count; int ret; @@ -675,14 +689,21 @@ static int __mxt_write_reg(struct i2c_client *client, u16 reg, u16 len, buf[1] = (reg >> 8) & 0xff; memcpy(&buf[2], val, len); +retry_write: ret = i2c_master_send(client, buf, count); - if (ret == count) { - ret = 0; - } else { - if (ret >= 0) - ret = -EIO; + if (ret != count) { + if (data->retry_i2c_transfers && !retried) { + dev_dbg(&client->dev, "i2c retry\n"); + /* TODO: add WAKE-GPIO support */ + msleep(MXT_WAKEUP_TIME); + retried = true; + goto retry_write; + } + ret = ret < 0 ? ret : -EIO; dev_err(&client->dev, "%s: i2c send failed (%d)\n", __func__, ret); + } else { + ret = 0; } kfree(buf); @@ -3084,6 +3105,7 @@ static const struct dmi_system_id chromebook_T9_suspend_dmi[] = { static int mxt_probe(struct i2c_client *client, const struct i2c_device_id *id) { + struct device_node *np = client->dev.of_node; struct mxt_data *data; int error; @@ -3158,6 +3180,20 @@ static int mxt_probe(struct i2c_client *client, const struct i2c_device_id *id) msleep(MXT_RESET_INVALID_CHG); } + /* + * The mXT1386 has a dedicated WAKE-line that could be connected to a + * dedicated GPIO, or to the I2C SCL pin, or permanently asserted LOW. + * It's used for waking controller from a deep-sleep and it needs to be + * asserted LOW for 25 milliseconds before issuing I2C transfer if controller + * was in a deep-sleep mode. If WAKE-line is connected to I2C SCL pin, then + * the first I2C transfer will get an instant NAK and transfer needs to be + * retried after 25ms. There are too many places in the code where the wake-up + * needs to be inserted, hence it's much easier to add a retry to the common + * I2C accessors, also given that the WAKE-GPIO is unsupported by the driver. + */ + if (of_device_is_compatible(np, "atmel,mXT1386")) + data->retry_i2c_transfers = true; + error = mxt_initialize(data); if (error) return error; @@ -3235,6 +3271,7 @@ static SIMPLE_DEV_PM_OPS(mxt_pm_ops, mxt_suspend, mxt_resume); static const struct of_device_id mxt_of_match[] = { { .compatible = "atmel,maxtouch", }, + { .compatible = "atmel,mXT1386", }, /* Compatibles listed below are deprecated */ { .compatible = "atmel,qt602240_ts", }, { .compatible = "atmel,atmel_mxt_ts", }, @@ -3259,6 +3296,7 @@ static const struct i2c_device_id mxt_id[] = { { "atmel_mxt_tp", 0 }, { "maxtouch", 0 }, { "mXT224", 0 }, + { "mXT1386", 0 }, { } }; MODULE_DEVICE_TABLE(i2c, mxt_id); From patchwork Fri Sep 25 13:52:57 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Wang, Jiada" X-Patchwork-Id: 254957 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED, USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 82970C4741F for ; Fri, 25 Sep 2020 13:53:16 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 59C2120878 for ; Fri, 25 Sep 2020 13:53:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728923AbgIYNxP (ORCPT ); Fri, 25 Sep 2020 09:53:15 -0400 Received: from esa4.mentor.iphmx.com ([68.232.137.252]:49986 "EHLO esa4.mentor.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727290AbgIYNxP (ORCPT ); Fri, 25 Sep 2020 09:53:15 -0400 IronPort-SDR: 1zxjR6aU1wqtqEwNnpmfjB+oQLcpJDywk6i6B+ySeqaiCKiFdJlnarnMX4vi7mPyry8IBMd4Wz uKf//bOd4VMzZYBVYLSmz9s2U/+cHo1xmSnJc27NkD7GB8n7k6qw2vR1Ts3Tt/bh53AnLV41li YBR0cJSzXVPY0C/rmvWSGmKW88JA29fv3m8Wee+ukC1deIJMutPGF9KinkI6w05jLzhi/c9kye umATEOSbECvxjuFm7rhvxQ8wc39hAVSFoI9vZylOYdXhOEfNJu5nyzuXhwiuysZ5o3jH7N+6Bs 1lE= X-IronPort-AV: E=Sophos;i="5.77,302,1596528000"; d="scan'208";a="53408342" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa4.mentor.iphmx.com with ESMTP; 25 Sep 2020 05:53:14 -0800 IronPort-SDR: ygjXhL6+8NCxDqJN7Trb7w5lzg/qqcxjRCz9zJhBrUYbFR6wbZt+4zNgqpzCgPAmz6ToKJiHVJ uN3MxhJjOusAHY0KfvKvmiDlXlHkPblLnPyddI0r/te0po+kV85NtD+IOCWNUb21IwBDcr24F5 hBai9T6jv1RqaVMbTOngupggUAltyeTmqQYpbXBPGDdyO5p6+TOHb4YdgaxoSbovFl1hw9DkGp UbVG4/Bvp9AdDOzINi/Gs7ig+AF1w2jPb32098JN3fuyp/RswmeHJp3+hJL/96HpZ4YbZl4q9k TRk= From: Jiada Wang To: , , , , CC: , , , , , , Subject: [PATCH v2 3/3] ARM: tegra: add mXT1386 compatible Date: Fri, 25 Sep 2020 22:52:57 +0900 Message-ID: <20200925135257.21138-4-jiada_wang@mentor.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200925135257.21138-1-jiada_wang@mentor.com> References: <20200925135257.21138-1-jiada_wang@mentor.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org Add mXT1386 compatible for "touchscreen@4c". Signed-off-by: Jiada Wang Reviewed-by: Dmitry Osipenko Tested-by: Dmitry Osipenko --- arch/arm/boot/dts/tegra20-acer-a500-picasso.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm/boot/dts/tegra20-acer-a500-picasso.dts b/arch/arm/boot/dts/tegra20-acer-a500-picasso.dts index 2d683c9a1a5d..7915b6e9190e 100644 --- a/arch/arm/boot/dts/tegra20-acer-a500-picasso.dts +++ b/arch/arm/boot/dts/tegra20-acer-a500-picasso.dts @@ -428,7 +428,7 @@ }; touchscreen@4c { - compatible = "atmel,maxtouch"; + compatible = "atmel,mXT1386", "atmel,maxtouch"; reg = <0x4c>; atmel,cfg_name = "maxtouch-acer-iconia-tab-a500.cfg";