From patchwork Mon May 29 14:07:06 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hugo Villeneuve X-Patchwork-Id: 100299 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp1545841vqr; Mon, 29 May 2023 07:13:39 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ69O+HbH3xw0ZiJVDH1gIKDFgOSkJIu3EKPlMW4KYzK9pI+QqcJOAoH3NVEAaEMriExHtTI X-Received: by 2002:a17:902:ac97:b0:1af:fbb6:23b7 with SMTP id h23-20020a170902ac9700b001affbb623b7mr10363567plr.3.1685369619116; Mon, 29 May 2023 07:13:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685369619; cv=none; d=google.com; s=arc-20160816; b=Lln8nbH9fj4wQesBFfJMORf/9Ydw3RLFpUYzKoEBcbiEJ3SZNgqYxJOrO7dzX4oWDn qGnlGz9e9IKBzGrtYMlB1hYQ1PNTCkG9/X8eRd1D9sLPGG4MX96G7eijT/7ly5pCxpAE 7xEb8jN3zO/yNoeRiP4ezaiDY7BkucXpE6qdM/31tuHAHAUeQ6fAiWTBjUbe56uBmi72 UiWGfFxl4k26lhQ5Ai37VgTmsXofVQTb7k0qoA8XI1NA3Y2kWPHPzj6uxPyOAKyUeLhh LJCJammhKc5VEIMZvaRmhSF0fI0UkMnkNKvP8GBTipWwPCYKvJx3Um7WPReIQz2j4KJo Cv6A== 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=Ja7xTMPsVPo8tfSr8w84gjwQWmZk45wAkgaQdbX9Sus=; b=TXsxWQMDkCFtcx+5zgmS83pNq1Qg9RLhKaTn04c2CiU/biGi/qyzSGsi3Cw0+gGVvw Gsod3Z6p3rROCBRW2ZAktjVTLNGYswtREX5qZNzC91L7SjmJ9u8GBMzfjwpcL9pUtYSj HafmE3yxm83a212PtEco2Ruj4hQV+0nnASKEMQzbmKz70LKpK/W9fv7C4XFCFP2G5ARE Le7BpSanq0RNGNtHbHJZf2bNaMOhVu7wpA/x2V0w8pgGcuYmHLpfMONrqH8UyYws4+VX Cjrm1elFmm0x6liTUuU7B3qPyFwuFAxeyktveByqv7T7qdi3SID0bTgso+Jm8yRE/19K p+ag== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@hugovil.com header.s=x header.b=TiMjtby+; 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 j12-20020a170903024c00b001aaeed1a0e3si389331plh.487.2023.05.29.07.13.26; Mon, 29 May 2023 07:13:39 -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=TiMjtby+; 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 S230340AbjE2OH7 (ORCPT + 99 others); Mon, 29 May 2023 10:07:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49208 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230292AbjE2OHg (ORCPT ); Mon, 29 May 2023 10:07:36 -0400 Received: from mail.hugovil.com (mail.hugovil.com [162.243.120.170]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 35403D2; Mon, 29 May 2023 07:07:33 -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=Ja7xTMPsVPo8tfSr8w84gjwQWmZk45wAkgaQdbX9Sus=; b=TiMjtby+69WZNStXM0ZQQPT3f4 3dc9H2kA++rCAAKbeEDiY5Lkr/zVQT8/UkKY61gnhaLGx9GlIid6JJ8nonc8sMgYZmfi6oqFcw1JA /uByz1zhiyMXV+rFvLOn4GFOh1FLyEXVaWWYAO7LULeM7zaz0FXaGT4Ub8Xa0gxbQTRQ=; Received: from modemcable168.174-80-70.mc.videotron.ca ([70.80.174.168]:50024 helo=pettiford.lan) by mail.hugovil.com with esmtpa (Exim 4.92) (envelope-from ) id 1q3dWv-0004Ht-1e; Mon, 29 May 2023 10:07:25 -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, 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 Date: Mon, 29 May 2023 10:07:06 -0400 Message-Id: <20230529140711.896830-5-hugo@hugovil.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230529140711.896830-1-hugo@hugovil.com> References: <20230529140711.896830-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 autolearn=ham autolearn_force=no version=3.4.6 Subject: [PATCH v4 4/9] 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?1767238133846512638?= X-GMAIL-MSGID: =?utf-8?q?1767238133846512638?= 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") Signed-off-by: Hugo Villeneuve --- 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 fdf18add1c49..06be1daa733a 100644 --- a/drivers/tty/serial/sc16is7xx.c +++ b/drivers/tty/serial/sc16is7xx.c @@ -1343,9 +1343,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; }