pinctrl: mcp23s08: Add optional reset GPIO
Subsystems (3)
PATCH 1/2 pinctrl: mcp23s08: Add optional reset GPIO
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
--- drivers/pinctrl/pinctrl-mcp23s08.c | 3 +++ drivers/pinctrl/pinctrl-mcp23s08.h | 1 + 2 files changed, 4 insertions(+)
drivers/pinctrl/pinctrl-mcp23s08.c +3 -0
@@ -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. */
drivers/pinctrl/pinctrl-mcp23s08.h +1 -0
@@ -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;
Signature · 1 line
2.25.1
PATCH 2/2 dt-bindings: pinctrl: mcp23s08: add documentation for reset-gpios
The reset-gpios property is added to the optional dt-bindings and also an example for it's usage.
--- Documentation/devicetree/bindings/pinctrl/pinctrl-mcp23s08.txt | 2 ++ 1 file changed, 2 insertions(+)
Documentation/devicetree/bindings/pinctrl/pinctrl-mcp23s08.txt +2 -0
@@ -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",
Signature · 1 line
2.25.1
Quoted 4 lines · Andreas Kaessens
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.
Quoted 8 lines
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 <[email protected]>Signed-off-by Darian Biastoch <[email protected]>
Both patches applied, thanks!
Yours,
Linus Walleij