xref: /OK3568_Linux_fs/kernel/drivers/pinctrl/pinctrl-mcp23s08.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */
2*4882a593Smuzhiyun /* MCP23S08 SPI/I2C GPIO driver */
3*4882a593Smuzhiyun 
4*4882a593Smuzhiyun #include <linux/gpio/driver.h>
5*4882a593Smuzhiyun #include <linux/irq.h>
6*4882a593Smuzhiyun #include <linux/mutex.h>
7*4882a593Smuzhiyun #include <linux/pinctrl/pinctrl.h>
8*4882a593Smuzhiyun #include <linux/types.h>
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun /*
11*4882a593Smuzhiyun  * MCP types supported by driver
12*4882a593Smuzhiyun  */
13*4882a593Smuzhiyun #define MCP_TYPE_S08	1
14*4882a593Smuzhiyun #define MCP_TYPE_S17	2
15*4882a593Smuzhiyun #define MCP_TYPE_008	3
16*4882a593Smuzhiyun #define MCP_TYPE_017	4
17*4882a593Smuzhiyun #define MCP_TYPE_S18	5
18*4882a593Smuzhiyun #define MCP_TYPE_018	6
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun struct device;
21*4882a593Smuzhiyun struct regmap;
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun struct pinctrl_dev;
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun struct mcp23s08 {
26*4882a593Smuzhiyun 	u8			addr;
27*4882a593Smuzhiyun 	bool			irq_active_high;
28*4882a593Smuzhiyun 	bool			reg_shift;
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun 	u16			irq_rise;
31*4882a593Smuzhiyun 	u16			irq_fall;
32*4882a593Smuzhiyun 	int			irq;
33*4882a593Smuzhiyun 	bool			irq_controller;
34*4882a593Smuzhiyun 	int			cached_gpio;
35*4882a593Smuzhiyun 	/* lock protects regmap access with bypass/cache flags */
36*4882a593Smuzhiyun 	struct mutex		lock;
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun 	struct gpio_chip	chip;
39*4882a593Smuzhiyun 	struct irq_chip		irq_chip;
40*4882a593Smuzhiyun 
41*4882a593Smuzhiyun 	struct regmap		*regmap;
42*4882a593Smuzhiyun 	struct device		*dev;
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun 	struct pinctrl_dev	*pctldev;
45*4882a593Smuzhiyun 	struct pinctrl_desc	pinctrl_desc;
46*4882a593Smuzhiyun };
47*4882a593Smuzhiyun 
48*4882a593Smuzhiyun extern const struct regmap_config mcp23x08_regmap;
49*4882a593Smuzhiyun extern const struct regmap_config mcp23x17_regmap;
50*4882a593Smuzhiyun 
51*4882a593Smuzhiyun int mcp23s08_probe_one(struct mcp23s08 *mcp, struct device *dev,
52*4882a593Smuzhiyun 		       unsigned int addr, unsigned int type, unsigned int base);
53