From patchwork Fri Jun 2 15:26:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hugo Villeneuve X-Patchwork-Id: 102620 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp1117471vqr; Fri, 2 Jun 2023 08:38:26 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4ias4kSed2FHKmkbLBQzljy6xkZfkKiEuI/lwFSOjOg5bmg9mG3wcjJ2YMtbSSXxfGsUxE X-Received: by 2002:a17:903:2343:b0:1b0:3cda:635b with SMTP id c3-20020a170903234300b001b03cda635bmr565990plh.0.1685720306659; Fri, 02 Jun 2023 08:38:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685720306; cv=none; d=google.com; s=arc-20160816; b=t9rPPCnQQ5h/WM3BPWhP/9bKaNkcMOufBcjPM8l8W6JhPA440ajwYn2I+JQcn01JXS tHY7E468T3K0x7eZrGXI2NZ81l2BQAu87FpzEatqs3xKSzIW8/lVIkkomCBXJcxcpxCb xSsAsYC2onFcvRbiXjvm4tHDDqdo2fn63t3WERTttYxGHsUSR+lnuMCTTL+dUnd1goEh Iqr3fbI+zE2pjRMnSR1DzbY4qdi5JNOHIYeLYWvVYelxibimcoyu87Ees/IUyggF8u9Y kESOilkhFRODYgUd8qk5lftvwUc6cwjG7wCL0trChbJSpD2wtlSRRTBHdhC2NaP220JK 9hZg== 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=F+OtOza9kCclwmhBndBsNrgMCRnZz0z0MFxdqH7dsnQ=; b=zWCOjZlvnSd3Rh/OWhoxgjcT2buZhV5wGel+c1nCl6h2TVN90amVon2g8eWQcpGa95 9XOeGivr59ocFBmbPD8PoSnvZ3CTTG9EKWOsHASZPGSvUeoQHCXXkCIRrRxwrjW0LdZm qRpKv3UMkpErmdP607/1tjYdnS2j8kCPofSn/wLLxjJvo65bc7Ym0UqGQNqcPJkksUCV gMeC87tqfqScMe7FQg9npkLOQqMpL1mRKp478dAHih5XFex05WVdaP8xcB7JsqNkhjIi lH1OCHyUaEJ+FKzMUuOxqeeHJ4JTYFzdid+T1jYBzxl9rxBtlS/9EoU/3z8KIT6bAYET VPZQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@hugovil.com header.s=x header.b=zJmgaYlp; 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 j9-20020a170903024900b001ae1bb70a41si1102248plh.168.2023.06.02.08.38.14; Fri, 02 Jun 2023 08:38:26 -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=zJmgaYlp; 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 S236683AbjFBP07 (ORCPT + 99 others); Fri, 2 Jun 2023 11:26:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41856 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236632AbjFBP0p (ORCPT ); Fri, 2 Jun 2023 11:26:45 -0400 Received: from mail.hugovil.com (mail.hugovil.com [162.243.120.170]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 92F311B6; Fri, 2 Jun 2023 08:26:44 -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=F+OtOza9kCclwmhBndBsNrgMCRnZz0z0MFxdqH7dsnQ=; b=zJmgaYlpdwTU6I6B4ustmc8ti2 hiH5vk/C3l4vp8Pdlz7lp+KTPAZkTqIURLJkpW5Us+KLge5jTwMiWfzgL7cxAQ3P18sWRi8zXDIgv cQfSWU3o6oTUn+kXVPSABtoiniVkNwoIMqGkuMC5lJ7v0EIV2EcIpCVofbmTFqtVgZeQ=; Received: from modemcable168.174-80-70.mc.videotron.ca ([70.80.174.168]:50948 helo=pettiford.lan) by mail.hugovil.com with esmtpa (Exim 4.92) (envelope-from ) id 1q56fn-0008Hq-8m; Fri, 02 Jun 2023 11:26:39 -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, tomasz.mon@camlingroup.com, l.perczak@camlintechnologies.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: Fri, 2 Jun 2023 11:26:22 -0400 Message-Id: <20230602152626.284324-7-hugo@hugovil.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230602152626.284324-1-hugo@hugovil.com> References: <20230602152626.284324-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 v7 6/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?1767605855939317736?= X-GMAIL-MSGID: =?utf-8?q?1767605855939317736?= 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 edc83f5f6340..7a9b91f0c710 100644 --- a/drivers/tty/serial/sc16is7xx.c +++ b/drivers/tty/serial/sc16is7xx.c @@ -1340,9 +1340,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; }