| /* 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_info { | |
| const struct regmap_config *regmap; | |
| const char *label; | |
| unsigned int type; | |
| u16 ngpio; | |
| bool reg_shift; | |
| }; | |
| 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 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); |