From patchwork Tue Nov 21 08:21:27 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Phil Reid X-Patchwork-Id: 839919 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-gpio-owner@vger.kernel.org; receiver=) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3ygz8617lmz9s7B for ; Tue, 21 Nov 2017 19:21:42 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751309AbdKUIVj (ORCPT ); Tue, 21 Nov 2017 03:21:39 -0500 Received: from anchovy2.45ru.net.au ([203.30.46.146]:53013 "EHLO anchovy.45ru.net.au" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751330AbdKUIVh (ORCPT ); Tue, 21 Nov 2017 03:21:37 -0500 Received: (qmail 31012 invoked by uid 5089); 21 Nov 2017 08:21:35 -0000 Received: by simscan 1.2.0 ppid: 30924, pid: 30926, t: 0.0307s scanners: regex: 1.2.0 attach: 1.2.0 clamav: 0.88.3/m:40/d:1950 X-RBL: $rbltext Received: from unknown (HELO preid-centos7.electromag.com.au) (preid@electromag.com.au@203.59.230.133) by anchovy3.45ru.net.au with ESMTPA; 21 Nov 2017 08:21:34 -0000 Received: by preid-centos7.electromag.com.au (Postfix, from userid 1000) id 84DD4337B284F; Tue, 21 Nov 2017 16:21:33 +0800 (AWST) From: Phil Reid To: linus.walleij@linaro.org, robh+dt@kernel.org, mark.rutland@arm.com, sre@kernel.org, preid@electromag.com.au, linux-gpio@vger.kernel.org, devicetree@vger.kernel.org Subject: [PATCH v3 1/5] pinctrl: mcp23s08: remove hard coded irq polarity in irq_setup Date: Tue, 21 Nov 2017 16:21:27 +0800 Message-Id: <1511252491-79952-2-git-send-email-preid@electromag.com.au> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1511252491-79952-1-git-send-email-preid@electromag.com.au> References: <1511252491-79952-1-git-send-email-preid@electromag.com.au> Sender: linux-gpio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org The polarity of the irq should be defined in the configuration for the irq. eg The device tree bind already allows for either active high / low interrupt configuration. Signed-off-by: Phil Reid --- drivers/pinctrl/pinctrl-mcp23s08.c | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/drivers/pinctrl/pinctrl-mcp23s08.c b/drivers/pinctrl/pinctrl-mcp23s08.c index 0aef30e..cc1f9f6 100644 --- a/drivers/pinctrl/pinctrl-mcp23s08.c +++ b/drivers/pinctrl/pinctrl-mcp23s08.c @@ -56,7 +56,6 @@ struct mcp23s08 { u8 addr; - bool irq_active_high; bool reg_shift; u16 irq_rise; @@ -627,11 +626,6 @@ static int mcp23s08_irq_setup(struct mcp23s08 *mcp) int err; unsigned long irqflags = IRQF_ONESHOT | IRQF_SHARED; - if (mcp->irq_active_high) - irqflags |= IRQF_TRIGGER_HIGH; - else - irqflags |= IRQF_TRIGGER_LOW; - err = devm_request_threaded_irq(chip->parent, mcp->irq, NULL, mcp23s08_irq, irqflags, dev_name(chip->parent), mcp); @@ -777,12 +771,12 @@ static int mcp23s08_probe_one(struct mcp23s08 *mcp, struct device *dev, { int status, ret; bool mirror = false; + bool irq_active_high = false; mutex_init(&mcp->lock); mcp->dev = dev; mcp->addr = addr; - mcp->irq_active_high = false; mcp->chip.direction_input = mcp23s08_direction_input; mcp->chip.get = mcp23s08_get; @@ -868,7 +862,7 @@ static int mcp23s08_probe_one(struct mcp23s08 *mcp, struct device *dev, mcp->irq_controller = device_property_read_bool(dev, "interrupt-controller"); if (mcp->irq && mcp->irq_controller) { - mcp->irq_active_high = + irq_active_high = device_property_read_bool(dev, "microchip,irq-active-high"); @@ -876,11 +870,11 @@ static int mcp23s08_probe_one(struct mcp23s08 *mcp, struct device *dev, } if ((status & IOCON_SEQOP) || !(status & IOCON_HAEN) || mirror || - mcp->irq_active_high) { + irq_active_high) { /* mcp23s17 has IOCON twice, make sure they are in sync */ status &= ~(IOCON_SEQOP | (IOCON_SEQOP << 8)); status |= IOCON_HAEN | (IOCON_HAEN << 8); - if (mcp->irq_active_high) + if (irq_active_high) status |= IOCON_INTPOL | (IOCON_INTPOL << 8); else status &= ~(IOCON_INTPOL | (IOCON_INTPOL << 8)); From patchwork Tue Nov 21 08:21:28 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Phil Reid X-Patchwork-Id: 839921 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-gpio-owner@vger.kernel.org; receiver=) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3ygz873bChz9s74 for ; Tue, 21 Nov 2017 19:21:43 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751346AbdKUIVk (ORCPT ); Tue, 21 Nov 2017 03:21:40 -0500 Received: from anchovy1.45ru.net.au ([203.30.46.145]:52839 "EHLO anchovy.45ru.net.au" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751413AbdKUIVh (ORCPT ); Tue, 21 Nov 2017 03:21:37 -0500 Received: (qmail 24689 invoked by uid 5089); 21 Nov 2017 08:21:35 -0000 Received: by simscan 1.2.0 ppid: 24659, pid: 24660, t: 0.0693s scanners: regex: 1.2.0 attach: 1.2.0 clamav: 0.88.3/m:40/d:1950 X-RBL: $rbltext Received: from unknown (HELO preid-centos7.electromag.com.au) (preid@electromag.com.au@203.59.230.133) by anchovy1.45ru.net.au with ESMTPA; 21 Nov 2017 08:21:34 -0000 Received: by preid-centos7.electromag.com.au (Postfix, from userid 1000) id 85ED5337B285D; Tue, 21 Nov 2017 16:21:33 +0800 (AWST) From: Phil Reid To: linus.walleij@linaro.org, robh+dt@kernel.org, mark.rutland@arm.com, sre@kernel.org, preid@electromag.com.au, linux-gpio@vger.kernel.org, devicetree@vger.kernel.org Subject: [PATCH v3 2/5] dt-bindings: pinctrl: mcp23s08: add documentation for drive-open-drain Date: Tue, 21 Nov 2017 16:21:28 +0800 Message-Id: <1511252491-79952-3-git-send-email-preid@electromag.com.au> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1511252491-79952-1-git-send-email-preid@electromag.com.au> References: <1511252491-79952-1-git-send-email-preid@electromag.com.au> Sender: linux-gpio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org This flag set the mcp23s08 device irq type to open drain active low. Signed-off-by: Phil Reid Reviewed-by: Sebastian Reichel Acked-by: Rob Herring --- Documentation/devicetree/bindings/pinctrl/pinctrl-mcp23s08.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Documentation/devicetree/bindings/pinctrl/pinctrl-mcp23s08.txt b/Documentation/devicetree/bindings/pinctrl/pinctrl-mcp23s08.txt index 9c451c2..a5a8322 100644 --- a/Documentation/devicetree/bindings/pinctrl/pinctrl-mcp23s08.txt +++ b/Documentation/devicetree/bindings/pinctrl/pinctrl-mcp23s08.txt @@ -45,6 +45,8 @@ Optional properties: - first cell is the pin number - second cell is used to specify flags. - interrupt-controller: Marks the device node as a interrupt controller. +- drive-open-drain: Sets the ODR flag in the IOCON register. This configures + the IRQ output as open drain active low. Optional device specific properties: - microchip,irq-mirror: Sets the mirror flag in the IOCON register. Devices From patchwork Tue Nov 21 08:21:29 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Phil Reid X-Patchwork-Id: 839922 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-gpio-owner@vger.kernel.org; receiver=) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3ygz8816nFz9s7B for ; Tue, 21 Nov 2017 19:21:44 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751330AbdKUIVk (ORCPT ); Tue, 21 Nov 2017 03:21:40 -0500 Received: from anchovy3.45ru.net.au ([203.30.46.155]:33041 "EHLO anchovy.45ru.net.au" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751470AbdKUIVh (ORCPT ); Tue, 21 Nov 2017 03:21:37 -0500 Received: (qmail 21341 invoked by uid 5089); 21 Nov 2017 08:21:35 -0000 Received: by simscan 1.2.0 ppid: 21275, pid: 21277, t: 0.0303s scanners: regex: 1.2.0 attach: 1.2.0 clamav: 0.88.3/m:40/d:1950 X-RBL: $rbltext Received: from unknown (HELO preid-centos7.electromag.com.au) (preid@electromag.com.au@203.59.230.133) by anchovy2.45ru.net.au with ESMTPA; 21 Nov 2017 08:21:34 -0000 Received: by preid-centos7.electromag.com.au (Postfix, from userid 1000) id 8833D337B336D; Tue, 21 Nov 2017 16:21:33 +0800 (AWST) From: Phil Reid To: linus.walleij@linaro.org, robh+dt@kernel.org, mark.rutland@arm.com, sre@kernel.org, preid@electromag.com.au, linux-gpio@vger.kernel.org, devicetree@vger.kernel.org Subject: [PATCH v3 3/5] pinctrl: mcp23s08: add open drain configuration for irq output Date: Tue, 21 Nov 2017 16:21:29 +0800 Message-Id: <1511252491-79952-4-git-send-email-preid@electromag.com.au> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1511252491-79952-1-git-send-email-preid@electromag.com.au> References: <1511252491-79952-1-git-send-email-preid@electromag.com.au> Sender: linux-gpio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org The mcp23s08 series device can be configured for wired and interrupts using an external pull-up and open drain output via the IOCON_ODR bit. And "drive-open-drain" property to enable this. Signed-off-by: Phil Reid Reviewed-by: Sebastian Reichel --- drivers/pinctrl/pinctrl-mcp23s08.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/pinctrl/pinctrl-mcp23s08.c b/drivers/pinctrl/pinctrl-mcp23s08.c index cc1f9f6..8ff9b77 100644 --- a/drivers/pinctrl/pinctrl-mcp23s08.c +++ b/drivers/pinctrl/pinctrl-mcp23s08.c @@ -772,6 +772,7 @@ static int mcp23s08_probe_one(struct mcp23s08 *mcp, struct device *dev, int status, ret; bool mirror = false; bool irq_active_high = false; + bool open_drain = false; mutex_init(&mcp->lock); @@ -867,10 +868,11 @@ static int mcp23s08_probe_one(struct mcp23s08 *mcp, struct device *dev, "microchip,irq-active-high"); mirror = device_property_read_bool(dev, "microchip,irq-mirror"); + open_drain = device_property_read_bool(dev, "drive-open-drain"); } if ((status & IOCON_SEQOP) || !(status & IOCON_HAEN) || mirror || - irq_active_high) { + irq_active_high || open_drain) { /* mcp23s17 has IOCON twice, make sure they are in sync */ status &= ~(IOCON_SEQOP | (IOCON_SEQOP << 8)); status |= IOCON_HAEN | (IOCON_HAEN << 8); @@ -882,6 +884,9 @@ static int mcp23s08_probe_one(struct mcp23s08 *mcp, struct device *dev, if (mirror) status |= IOCON_MIRROR | (IOCON_MIRROR << 8); + if (open_drain) + status |= IOCON_ODR | (IOCON_ODR << 8); + if (type == MCP_TYPE_S18 || type == MCP_TYPE_018) status |= IOCON_INTCC | (IOCON_INTCC << 8); From patchwork Tue Nov 21 08:21:30 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Phil Reid X-Patchwork-Id: 839926 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-gpio-owner@vger.kernel.org; receiver=) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3ygz8C2Gxfz9s7B for ; Tue, 21 Nov 2017 19:21:47 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751409AbdKUIVo (ORCPT ); Tue, 21 Nov 2017 03:21:44 -0500 Received: from anchovy3.45ru.net.au ([203.30.46.155]:33047 "EHLO anchovy.45ru.net.au" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751462AbdKUIVh (ORCPT ); Tue, 21 Nov 2017 03:21:37 -0500 Received: (qmail 21340 invoked by uid 5089); 21 Nov 2017 08:21:35 -0000 Received: by simscan 1.2.0 ppid: 21276, pid: 21278, t: 0.0273s scanners: regex: 1.2.0 attach: 1.2.0 clamav: 0.88.3/m:40/d:1950 X-RBL: $rbltext Received: from unknown (HELO preid-centos7.electromag.com.au) (preid@electromag.com.au@203.59.230.133) by anchovy2.45ru.net.au with ESMTPA; 21 Nov 2017 08:21:34 -0000 Received: by preid-centos7.electromag.com.au (Postfix, from userid 1000) id 8EF54337B336E; Tue, 21 Nov 2017 16:21:33 +0800 (AWST) From: Phil Reid To: linus.walleij@linaro.org, robh+dt@kernel.org, mark.rutland@arm.com, sre@kernel.org, preid@electromag.com.au, linux-gpio@vger.kernel.org, devicetree@vger.kernel.org Subject: [PATCH v3 4/5] pinctrl: mcp23s08: configure irq polarity using irq data Date: Tue, 21 Nov 2017 16:21:30 +0800 Message-Id: <1511252491-79952-5-git-send-email-preid@electromag.com.au> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1511252491-79952-1-git-send-email-preid@electromag.com.au> References: <1511252491-79952-1-git-send-email-preid@electromag.com.au> Sender: linux-gpio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org The irq polarity is already encoded in the irq config. Use that to determine the polarity for the mcp32s08 irq output instead of the custom microchip,irq-active-high property. Signed-off-by: Phil Reid --- drivers/pinctrl/pinctrl-mcp23s08.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/drivers/pinctrl/pinctrl-mcp23s08.c b/drivers/pinctrl/pinctrl-mcp23s08.c index 8ff9b77..6b3f810 100644 --- a/drivers/pinctrl/pinctrl-mcp23s08.c +++ b/drivers/pinctrl/pinctrl-mcp23s08.c @@ -773,6 +773,7 @@ static int mcp23s08_probe_one(struct mcp23s08 *mcp, struct device *dev, bool mirror = false; bool irq_active_high = false; bool open_drain = false; + u32 irq_trig; mutex_init(&mcp->lock); @@ -863,9 +864,13 @@ static int mcp23s08_probe_one(struct mcp23s08 *mcp, struct device *dev, mcp->irq_controller = device_property_read_bool(dev, "interrupt-controller"); if (mcp->irq && mcp->irq_controller) { - irq_active_high = - device_property_read_bool(dev, - "microchip,irq-active-high"); + if (device_property_present(dev, "microchip,irq-active-high")) + dev_warn(dev, + "microchip,irq-active-high is deprecated\n"); + + irq_trig = irqd_get_trigger_type(irq_get_irq_data(mcp->irq)); + if (irq_trig == IRQF_TRIGGER_HIGH) + irq_active_high = true; mirror = device_property_read_bool(dev, "microchip,irq-mirror"); open_drain = device_property_read_bool(dev, "drive-open-drain"); From patchwork Tue Nov 21 08:21:31 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Phil Reid X-Patchwork-Id: 839925 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-gpio-owner@vger.kernel.org; receiver=) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3ygz8B4gYqz9s74 for ; Tue, 21 Nov 2017 19:21:46 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751379AbdKUIVi (ORCPT ); Tue, 21 Nov 2017 03:21:38 -0500 Received: from anchovy1.45ru.net.au ([203.30.46.145]:52850 "EHLO anchovy.45ru.net.au" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751100AbdKUIVh (ORCPT ); Tue, 21 Nov 2017 03:21:37 -0500 Received: (qmail 24722 invoked by uid 5089); 21 Nov 2017 08:21:35 -0000 Received: by simscan 1.2.0 ppid: 24700, pid: 24701, t: 0.0238s scanners: regex: 1.2.0 attach: 1.2.0 clamav: 0.88.3/m:40/d:1950 X-RBL: $rbltext Received: from unknown (HELO preid-centos7.electromag.com.au) (preid@electromag.com.au@203.59.230.133) by anchovy1.45ru.net.au with ESMTPA; 21 Nov 2017 08:21:35 -0000 Received: by preid-centos7.electromag.com.au (Postfix, from userid 1000) id 936F4337B3370; Tue, 21 Nov 2017 16:21:33 +0800 (AWST) From: Phil Reid To: linus.walleij@linaro.org, robh+dt@kernel.org, mark.rutland@arm.com, sre@kernel.org, preid@electromag.com.au, linux-gpio@vger.kernel.org, devicetree@vger.kernel.org Subject: [PATCH v3 5/5] dt-bindings: pinctrl: deprecate 'microchip, irq-active-high' property Date: Tue, 21 Nov 2017 16:21:31 +0800 Message-Id: <1511252491-79952-6-git-send-email-preid@electromag.com.au> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1511252491-79952-1-git-send-email-preid@electromag.com.au> References: <1511252491-79952-1-git-send-email-preid@electromag.com.au> Sender: linux-gpio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org The irq output polarity can be determined from the 'interrupts' configuration. So 'microchip,irq-active-high' is not required. Signed-off-by: Phil Reid Acked-by: Rob Herring --- Documentation/devicetree/bindings/pinctrl/pinctrl-mcp23s08.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Documentation/devicetree/bindings/pinctrl/pinctrl-mcp23s08.txt b/Documentation/devicetree/bindings/pinctrl/pinctrl-mcp23s08.txt index a5a8322..72bac30 100644 --- a/Documentation/devicetree/bindings/pinctrl/pinctrl-mcp23s08.txt +++ b/Documentation/devicetree/bindings/pinctrl/pinctrl-mcp23s08.txt @@ -58,8 +58,8 @@ Optional device specific properties: occurred on. If it is not set, the interrupt are only generated for the bank they belong to. On devices with only one interrupt output this property is useless. -- microchip,irq-active-high: Sets the INTPOL flag in the IOCON register. This - configures the IRQ output polarity as active high. +- microchip,irq-active-high: (DEPRECATED) + irq polarity is determined from the 'interrupts' configuration Example I2C (with interrupt): gpiom1: gpio@20 {