61 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/* MCP23S08 SPI/I2C GPIO driver */3 4#include <linux/gpio/driver.h>5#include <linux/irq.h>6#include <linux/mutex.h>7#include <linux/pinctrl/pinctrl.h>8#include <linux/types.h>9 10/*11 * MCP types supported by driver12 */13#define MCP_TYPE_S08 114#define MCP_TYPE_S17 215#define MCP_TYPE_008 316#define MCP_TYPE_017 417#define MCP_TYPE_S18 518#define MCP_TYPE_018 619 20struct device;21struct regmap;22 23struct pinctrl_dev;24 25struct mcp23s08_info {26 const struct regmap_config *regmap;27 const char *label;28 unsigned int type;29 u16 ngpio;30 bool reg_shift;31};32 33struct mcp23s08 {34 u8 addr;35 bool irq_active_high;36 bool reg_shift;37 38 u16 irq_rise;39 u16 irq_fall;40 int irq;41 bool irq_controller;42 int cached_gpio;43 /* lock protects regmap access with bypass/cache flags */44 struct mutex lock;45 46 struct gpio_chip chip;47 48 struct regmap *regmap;49 struct device *dev;50 51 struct pinctrl_dev *pctldev;52 struct pinctrl_desc pinctrl_desc;53 struct gpio_desc *reset_gpio;54};55 56extern const struct regmap_config mcp23x08_regmap;57extern const struct regmap_config mcp23x17_regmap;58 59int mcp23s08_probe_one(struct mcp23s08 *mcp, struct device *dev,60 unsigned int addr, unsigned int type, unsigned int base);61