| /* SPDX-License-Identifier: GPL-2.0-only */ |
| /* MCP23S08 SPI/I2C GPIO driver */ |
| |
| #include <linux/gpio/driver.h> |
| #include <linux/irq.h> |
| #include <linux/mutex.h> |
| #include <linux/pinctrl/pinctrl.h> |
| #include <linux/types.h> |
| |
| /* |
| * MCP types supported by driver |
| */ |
| #define MCP_TYPE_S08 1 |
| #define MCP_TYPE_S17 2 |
| #define MCP_TYPE_008 3 |
| #define MCP_TYPE_017 4 |
| #define MCP_TYPE_S18 5 |
| #define MCP_TYPE_018 6 |
| |
| struct device; |
| struct regmap; |
| |
| struct pinctrl_dev; |
| |
| struct mcp23s08 { |
| u8 addr; |
| bool irq_active_high; |
| bool reg_shift; |
| |
| u16 irq_rise; |
| u16 irq_fall; |
| int irq; |
| bool irq_controller; |
| int cached_gpio; |
| /* lock protects regmap access with bypass/cache flags */ |
| struct mutex lock; |
| |
| struct gpio_chip chip; |
| struct irq_chip irq_chip; |
| |
| struct regmap *regmap; |
| struct device *dev; |
| |
| struct pinctrl_dev *pctldev; |
| struct pinctrl_desc pinctrl_desc; |
| struct gpio_desc *reset_gpio; |
| }; |
| |
| extern const struct regmap_config mcp23x08_regmap; |
| extern const struct regmap_config mcp23x17_regmap; |
| |
| int mcp23s08_probe_one(struct mcp23s08 *mcp, struct device *dev, |
| unsigned int addr, unsigned int type, unsigned int base); |