From patchwork Wed Jun 7 14:05:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hugo Villeneuve X-Patchwork-Id: 104533 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp235972vqr; Wed, 7 Jun 2023 07:21:16 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ42nMKYfm1zeuzFfkplkS7+csqADGiVZRzoiDVsyxdy1jv7qimBiMQFKhIKqk4fIeOgiB1z X-Received: by 2002:a05:6a00:a1f:b0:65c:e35b:b13a with SMTP id p31-20020a056a000a1f00b0065ce35bb13amr3615462pfh.14.1686147675852; Wed, 07 Jun 2023 07:21:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1686147675; cv=none; d=google.com; s=arc-20160816; b=CnvBCPcAYm1h0k/XzwJQze9aL0tMKMZpPv80OHcuz9A9hq1HI9g8CmpnHHk6Gtz0zH Cd++MHcXZUzNnKEWPm0BNzYKxJnpam+WyfK8qdppvjOwfCXBwOI9ic4GOtThJUkJB9SX uYW6Drxxmu9XaHWb9/4ar3fkvTZYKO2lheslOm+PK9BDPyNdVIrvV7j3umCBHNAIGcpW rXFpgoMkEV1K8m9ktDkV1qfsMU7GkZ5c/SmvrYJVvUYp9GISm/0vOPIIP8Mj5LW/b2ne 1eP5lxBX4aSf+rTneOx3CAPcjaqcto6AcTnd2qD8NDUksHR5CxHN4U8qffo4GNzJu49L 7hIA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:subject:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:cc:to:from:dkim-signature; bh=y5I58H4JZdxt5KQmeeMGWVEFZi9VwZ11ibHuDz0qvxg=; b=pLzKUsu1CZKBxhF/9nQ3ZdD7dNQMgbLvgkWkWLUcCxzguUqvPoMxjckhWWcjDlLuoH ee8YNlQVeAjjz/HKYrYr2j1eArMzyxGi+9RxQEJ+mbiggxc5xe+WW/gvxx+nqxQOHO2X iRNBElOO5EqJGPvr/JCRoa4WiiDZm/QmP17Oj/wWVo7LiqOpXD55hq9VAhDrBkPBl/do ZiYvbMtcY0Qqbhmpj4x5EIBlBub63eW59Xgwv757GlrCLZ2vncG2XuzLfwFL8kN+l0Za r4u1sAwanQdFkgZ1HkfJRXlPOT/Oly1Q2Jqac/80eHsxt9yygTNsonTheRGr0xRluZa1 V3+g== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@hugovil.com header.s=x header.b="k/Hdo5Em"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id bv129-20020a632e87000000b0051b930ef847si8967198pgb.134.2023.06.07.07.21.01; Wed, 07 Jun 2023 07:21:15 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=fail header.i=@hugovil.com header.s=x header.b="k/Hdo5Em"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240906AbjFGOGA (ORCPT + 99 others); Wed, 7 Jun 2023 10:06:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40974 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240759AbjFGOFu (ORCPT ); Wed, 7 Jun 2023 10:05:50 -0400 Received: from mail.hugovil.com (mail.hugovil.com [162.243.120.170]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4250A1BE6; Wed, 7 Jun 2023 07:05:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=hugovil.com ; s=x; h=Subject:Content-Transfer-Encoding:MIME-Version:References: In-Reply-To:Message-Id:Date:Cc:To:From:Sender:Reply-To:Content-Type: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=y5I58H4JZdxt5KQmeeMGWVEFZi9VwZ11ibHuDz0qvxg=; b=k/Hdo5EmzF6vURXJeqHLFQnpFc LwR0ZnW7sRUPGh1GA4d8pPF7zM7/xW2/QMur9CifkjlSMxpfMHcONqJU2YftMsKRvU+44C49RitMk vlDqd2CKNlAAtcQbYzaThPvQ0FqUEHw0lxMfd0OaIeL+48IvjuYpF7HdRGNyH4gre13M=; Received: from modemcable168.174-80-70.mc.videotron.ca ([70.80.174.168]:57832 helo=pettiford.lan) by mail.hugovil.com with esmtpa (Exim 4.92) (envelope-from ) id 1q6tnC-0005dF-NP; Wed, 07 Jun 2023 10:05:43 -0400 From: Hugo Villeneuve To: gregkh@linuxfoundation.org, robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, conor+dt@kernel.org, jirislaby@kernel.org, jringle@gridpoint.com, jesse.sung@canonical.com, isaac.true@canonical.com, l.perczak@camlintechnologies.com, tomasz.mon@camlingroup.com Cc: linux-serial@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, hugo@hugovil.com, linux-gpio@vger.kernel.org, Hugo Villeneuve , stable@vger.kernel.org, Lech Perczak Date: Wed, 7 Jun 2023 10:05:21 -0400 Message-Id: <20230607140525.833982-8-hugo@hugovil.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230607140525.833982-1-hugo@hugovil.com> References: <20230607140525.833982-1-hugo@hugovil.com> MIME-Version: 1.0 X-SA-Exim-Connect-IP: 70.80.174.168 X-SA-Exim-Mail-From: hugo@hugovil.com X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_PASS,SPF_PASS, T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 Subject: [PATCH v8 07/10] serial: sc16is7xx: fix bug when first setting GPIO direction X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.hugovil.com) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1768053985305531297?= X-GMAIL-MSGID: =?utf-8?q?1768053985305531297?= From: Hugo Villeneuve When configuring a pin as an output pin with a value of logic 0, we end up as having a value of logic 1 on the output pin. Setting a logic 0 a second time (or more) after that will correctly output a logic 0 on the output pin. By default, all GPIO pins are configured as inputs. When we enter sc16is7xx_gpio_direction_output() for the first time, we first set the desired value in IOSTATE, and then we configure the pin as an output. The datasheet states that writing to IOSTATE register will trigger a transfer of the value to the I/O pin configured as output, so if the pin is configured as an input, nothing will be transferred. Therefore, set the direction first in IODIR, and then set the desired value in IOSTATE. This is what is done in NXP application note AN10587. Fixes: dfeae619d781 ("serial: sc16is7xx") Cc: Signed-off-by: Hugo Villeneuve Reviewed-by: Lech Perczak Tested-by: Lech Perczak --- drivers/tty/serial/sc16is7xx.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/drivers/tty/serial/sc16is7xx.c b/drivers/tty/serial/sc16is7xx.c index 11edbebe8fa2..98c520ef4a02 100644 --- a/drivers/tty/serial/sc16is7xx.c +++ b/drivers/tty/serial/sc16is7xx.c @@ -1342,9 +1342,18 @@ static int sc16is7xx_gpio_direction_output(struct gpio_chip *chip, state |= BIT(offset); else state &= ~BIT(offset); - sc16is7xx_port_write(port, SC16IS7XX_IOSTATE_REG, state); + + /* + * If we write IOSTATE first, and then IODIR, the output value is not + * transferred to the corresponding I/O pin. + * The datasheet states that each register bit will be transferred to + * the corresponding I/O pin programmed as output when writing to + * IOSTATE. Therefore, configure direction first with IODIR, and then + * set value after with IOSTATE. + */ sc16is7xx_port_update(port, SC16IS7XX_IODIR_REG, BIT(offset), BIT(offset)); + sc16is7xx_port_write(port, SC16IS7XX_IOSTATE_REG, state); return 0; }