All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] pinctrl: mcp23s08: Add optional reset GPIO
@ 2021-06-10 13:24 Andreas Kaessens
  2021-06-10 13:24 ` [PATCH 2/2] dt-bindings: pinctrl: mcp23s08: add documentation for reset-gpios Andreas Kaessens
  2021-06-11 23:59 ` [PATCH 1/2] pinctrl: mcp23s08: Add optional reset GPIO Linus Walleij
  0 siblings, 2 replies; 3+ messages in thread
From: Andreas Kaessens @ 2021-06-10 13:24 UTC (permalink / raw)
  To: linus.walleij, robh+dt, linux-gpio, devicetree, linux-kernel
  Cc: linux-kernel, Andreas Kaessens, Darian Biastoch

The MCP23x port expander RESET# line can be connected to a host GPIO.
The optional reset-gpio must be set to LOW if the reset is asserted
at probing time.

On page 5 in the datasheet [0] the "Device Active After Reset high"
time is specified at 0 µs. Therefore no waiting is needed after the
reset transition.

[0] https://ww1.microchip.com/downloads/en/DeviceDoc/20001952C.pdf

Signed-off-by: Andreas Kaessens <akaessens@gmail.com>
Signed-off-by: Darian Biastoch <d.biastoch@gmail.com>
---
 drivers/pinctrl/pinctrl-mcp23s08.c | 3 +++
 drivers/pinctrl/pinctrl-mcp23s08.h | 1 +
 2 files changed, 4 insertions(+)

diff --git a/drivers/pinctrl/pinctrl-mcp23s08.c b/drivers/pinctrl/pinctrl-mcp23s08.c
index 799d596a1a4b..8ab254170d99 100644
--- a/drivers/pinctrl/pinctrl-mcp23s08.c
+++ b/drivers/pinctrl/pinctrl-mcp23s08.c
@@ -9,6 +9,7 @@
 #include <linux/module.h>
 #include <linux/export.h>
 #include <linux/gpio/driver.h>
+#include <linux/gpio/consumer.h>
 #include <linux/slab.h>
 #include <asm/byteorder.h>
 #include <linux/interrupt.h>
@@ -558,6 +559,8 @@ int mcp23s08_probe_one(struct mcp23s08 *mcp, struct device *dev,
 	mcp->chip.parent = dev;
 	mcp->chip.owner = THIS_MODULE;
 
+	mcp->reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW);
+
 	/* verify MCP_IOCON.SEQOP = 0, so sequential reads work,
 	 * and MCP_IOCON.HAEN = 1, so we work with all chips.
 	 */
diff --git a/drivers/pinctrl/pinctrl-mcp23s08.h b/drivers/pinctrl/pinctrl-mcp23s08.h
index 90dc27081a3c..b8d15939e0c2 100644
--- a/drivers/pinctrl/pinctrl-mcp23s08.h
+++ b/drivers/pinctrl/pinctrl-mcp23s08.h
@@ -43,6 +43,7 @@ struct mcp23s08 {
 
 	struct pinctrl_dev	*pctldev;
 	struct pinctrl_desc	pinctrl_desc;
+	struct gpio_desc        *reset_gpio;
 };
 
 extern const struct regmap_config mcp23x08_regmap;
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH 2/2] dt-bindings: pinctrl: mcp23s08: add documentation for reset-gpios
  2021-06-10 13:24 [PATCH 1/2] pinctrl: mcp23s08: Add optional reset GPIO Andreas Kaessens
@ 2021-06-10 13:24 ` Andreas Kaessens
  2021-06-11 23:59 ` [PATCH 1/2] pinctrl: mcp23s08: Add optional reset GPIO Linus Walleij
  1 sibling, 0 replies; 3+ messages in thread
From: Andreas Kaessens @ 2021-06-10 13:24 UTC (permalink / raw)
  To: linus.walleij, robh+dt, linux-gpio, devicetree, linux-kernel
  Cc: linux-kernel, Andreas Kaessens, Darian Biastoch

The reset-gpios property is added to the optional dt-bindings and
also an example for it's usage.

Signed-off-by: Andreas Kaessens <akaessens@gmail.com>
Signed-off-by: Darian Biastoch <d.biastoch@gmail.com>
---
 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 6ec3c8d79f49..2fa5edac7a35 100644
--- a/Documentation/devicetree/bindings/pinctrl/pinctrl-mcp23s08.txt
+++ b/Documentation/devicetree/bindings/pinctrl/pinctrl-mcp23s08.txt
@@ -49,6 +49,7 @@ Optional properties:
 - 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.
+- reset-gpios: Corresponds to the active-low RESET# pin for the chip
 
 Optional device specific properties:
 - microchip,irq-mirror: Sets the mirror flag in the IOCON register. Devices
@@ -135,6 +136,7 @@ gpio21: gpio@21 {
 	microchip,irq-mirror;
 	pinctrl-names = "default";
 	pinctrl-0 = <&i2cgpio0irq>, <&gpio21pullups>;
+	reset-gpios = <&gpio6 15 GPIO_ACTIVE_LOW>;
 
 	gpio21pullups: pinmux {
 		pins =	"gpio0", "gpio1", "gpio2", "gpio3",
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH 1/2] pinctrl: mcp23s08: Add optional reset GPIO
  2021-06-10 13:24 [PATCH 1/2] pinctrl: mcp23s08: Add optional reset GPIO Andreas Kaessens
  2021-06-10 13:24 ` [PATCH 2/2] dt-bindings: pinctrl: mcp23s08: add documentation for reset-gpios Andreas Kaessens
@ 2021-06-11 23:59 ` Linus Walleij
  1 sibling, 0 replies; 3+ messages in thread
From: Linus Walleij @ 2021-06-11 23:59 UTC (permalink / raw)
  To: Andreas Kaessens
  Cc: Rob Herring, open list:GPIO SUBSYSTEM,
	open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS,
	linux-kernel, linux-kernel, Darian Biastoch

On Thu, Jun 10, 2021 at 3:24 PM Andreas Kaessens <akaessens@gmail.com> wrote:

> The MCP23x port expander RESET# line can be connected to a host GPIO.
> The optional reset-gpio must be set to LOW if the reset is asserted
> at probing time.
>
> On page 5 in the datasheet [0] the "Device Active After Reset high"
> time is specified at 0 µs. Therefore no waiting is needed after the
> reset transition.
>
> [0] https://ww1.microchip.com/downloads/en/DeviceDoc/20001952C.pdf
>
> Signed-off-by: Andreas Kaessens <akaessens@gmail.com>
> Signed-off-by: Darian Biastoch <d.biastoch@gmail.com>

Both patches applied, thanks!

Yours,
Linus Walleij

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2021-06-11 23:59 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-10 13:24 [PATCH 1/2] pinctrl: mcp23s08: Add optional reset GPIO Andreas Kaessens
2021-06-10 13:24 ` [PATCH 2/2] dt-bindings: pinctrl: mcp23s08: add documentation for reset-gpios Andreas Kaessens
2021-06-11 23:59 ` [PATCH 1/2] pinctrl: mcp23s08: Add optional reset GPIO Linus Walleij

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.