From patchwork Fri Jan 27 17:27:58 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lee Jones X-Patchwork-Id: 92700 Delivered-To: patch@linaro.org Received: by 10.140.20.99 with SMTP id 90csp341244qgi; Fri, 27 Jan 2017 09:28:51 -0800 (PST) X-Received: by 10.99.37.199 with SMTP id l190mr10562896pgl.86.1485538130941; Fri, 27 Jan 2017 09:28:50 -0800 (PST) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id c85si5023767pfk.224.2017.01.27.09.28.50; Fri, 27 Jan 2017 09:28:50 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933924AbdA0R2i (ORCPT + 25 others); Fri, 27 Jan 2017 12:28:38 -0500 Received: from mail-wm0-f45.google.com ([74.125.82.45]:35291 "EHLO mail-wm0-f45.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933844AbdA0R2d (ORCPT ); Fri, 27 Jan 2017 12:28:33 -0500 Received: by mail-wm0-f45.google.com with SMTP id r126so127048297wmr.0 for ; Fri, 27 Jan 2017 09:28:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=ojoja0+X0ybRDsPPhv+NLRBIzrec/Djr1LuEekJbaUc=; b=ARyIc5dR0xvHNy46vdS6d8SBdABzdI92dW4F68imVhZ9tcrEAvyEd0KKAyb1AVCcRf FZMFmkZA3k/dpSd3fz0M/HieGrAm8psU1E+SNF69uH7XNQhZPz22DkgOOBxhxagc4U02 5LMPmBNP83gOlY3CmF88KRHWrrWG9Vhq82E/Y= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=ojoja0+X0ybRDsPPhv+NLRBIzrec/Djr1LuEekJbaUc=; b=nMgxJmbUeu0tC+L6TFp7CGw/Pu++JkcTw9ORJRiWN/eeRvGqzhvIIGi4mQZsumDk50 tBPZnF0pFsvcgQ0rsJqW7JsGQ3N8dzyuWTtxd849k8fp1Kg8sKIlGpCfGUYi44T9H6T2 u94WoTbCApPzbEpg5HDSrZIAq/UCxS+Z1vg6lryV6VNf4sOOV1wcctgrsLOzTZcsOTuP gqAsLn2RX/OzuFr6GzDQeQujMKhN4j1aPx26wop3zUhc55e4gj2ClEdMt8qTIR0cqGKy +2J9nBRyqkWYFXT5DSVWA279WcX0jHq8FPWt5w5IQuK971kTIFSK9YFA5sPBhMN7dTsP PY+Q== X-Gm-Message-State: AIkVDXID/VuVM2ms1M32mHPC2fhJBpx55SLqx+AnLtaZtNdOmd+0oIWRy8vW2eIPjOndAwhB X-Received: by 10.223.145.163 with SMTP id 32mr9748225wri.198.1485538106702; Fri, 27 Jan 2017 09:28:26 -0800 (PST) Received: from localhost.localdomain ([2a01:4c8:1b:eeec:f122:1b92:9371:359c]) by smtp.gmail.com with ESMTPSA id k4sm4822140wmf.22.2017.01.27.09.28.24 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 27 Jan 2017 09:28:26 -0800 (PST) From: Lee Jones To: gregkh@linuxfoundation.org, jslaby@suse.com, linux-serial@vger.kernel.org, dt@kernel.org, devicetree@vger.kernel.org Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@stlinux.com, patrice.chotard@st.com, Lee Jones Subject: [PATCH v2 04/10] serial: st-asc: (De)Register GPIOD and swap Pinctrl profiles Date: Fri, 27 Jan 2017 17:27:58 +0000 Message-Id: <20170127172804.23881-5-lee.jones@linaro.org> X-Mailer: git-send-email 2.9.3 In-Reply-To: <20170127172804.23881-1-lee.jones@linaro.org> References: <20170127172804.23881-1-lee.jones@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org When hardware flow-control is disabled, manual toggling of the UART's reset line (RTS) using userland applications (e.g. stty) is not possible, since the ASC IP does not provide this functionality in the same was as some other IPs do. Thus, we have to do this manually. This patch ensures that when HW flow-control is disabled the RTS/CTS lines are free to be registered via the GPIO API. It also ensures any registered GPIO lines are unregistered when HW flow-control is requested, allowing the IP to control them automatically. Acked-by: Peter Griffin Signed-off-by: Lee Jones --- drivers/tty/serial/st-asc.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) -- 2.9.3 diff --git a/drivers/tty/serial/st-asc.c b/drivers/tty/serial/st-asc.c index 82f5714..713d7bb 100644 --- a/drivers/tty/serial/st-asc.c +++ b/drivers/tty/serial/st-asc.c @@ -513,6 +513,8 @@ static void asc_set_termios(struct uart_port *port, struct ktermios *termios, struct ktermios *old) { struct asc_port *ascport = to_asc_port(port); + struct device_node *np = port->dev->of_node; + struct gpio_desc *gpiod; unsigned int baud; u32 ctrl_val; tcflag_t cflag; @@ -556,9 +558,32 @@ static void asc_set_termios(struct uart_port *port, struct ktermios *termios, ctrl_val |= ASC_CTL_PARITYODD; /* hardware flow control */ - if ((cflag & CRTSCTS)) + if ((cflag & CRTSCTS)) { ctrl_val |= ASC_CTL_CTSENABLE; + /* If flow-control selected, stop handling RTS manually */ + if (ascport->rts) { + devm_gpiod_put(port->dev, ascport->rts); + ascport->rts = NULL; + + pinctrl_select_state(ascport->pinctrl, + ascport->states[DEFAULT]); + } + } else { + /* If flow-control disabled, it's safe to handle RTS manually */ + if (!ascport->rts && ascport->states[MANUAL_RTS]) { + pinctrl_select_state(ascport->pinctrl, + ascport->states[MANUAL_RTS]); + + gpiod = devm_get_gpiod_from_child(port->dev, "rts", + &np->fwnode); + if (!IS_ERR(gpiod)) { + gpiod_direction_output(gpiod, 0); + ascport->rts = gpiod; + } + } + } + if ((baud < 19200) && !ascport->force_m1) { asc_out(port, ASC_BAUDRATE, (port->uartclk / (16 * baud))); } else {