1  /* SPDX-License-Identifier: GPL-2.0-only */
2  /*
3   *  linux/drivers/pinctrl/pinctrl-lantiq.h
4   *  based on linux/drivers/pinctrl/pinctrl-pxa3xx.h
5   *
6   *  Copyright (C) 2012 John Crispin <john@phrozen.org>
7   */
8  
9  #ifndef __PINCTRL_LANTIQ_H
10  #define __PINCTRL_LANTIQ_H
11  
12  #include <linux/clkdev.h>
13  #include <linux/pinctrl/pinctrl.h>
14  #include <linux/pinctrl/pinconf.h>
15  #include <linux/pinctrl/pinmux.h>
16  #include <linux/pinctrl/consumer.h>
17  #include <linux/pinctrl/machine.h>
18  
19  #include "core.h"
20  
21  #define ARRAY_AND_SIZE(x)	(x), ARRAY_SIZE(x)
22  
23  #define LTQ_MAX_MUX		4
24  #define MFPR_FUNC_MASK		0x3
25  
26  #define LTQ_PINCONF_PACK(param, arg)		((param) << 16 | (arg))
27  #define LTQ_PINCONF_UNPACK_PARAM(conf)		((conf) >> 16)
28  #define LTQ_PINCONF_UNPACK_ARG(conf)		((conf) & 0xffff)
29  
30  enum ltq_pinconf_param {
31  	LTQ_PINCONF_PARAM_PULL,
32  	LTQ_PINCONF_PARAM_OPEN_DRAIN,
33  	LTQ_PINCONF_PARAM_DRIVE_CURRENT,
34  	LTQ_PINCONF_PARAM_SLEW_RATE,
35  	LTQ_PINCONF_PARAM_OUTPUT,
36  };
37  
38  struct ltq_cfg_param {
39  	const char *property;
40  	enum ltq_pinconf_param param;
41  };
42  
43  struct ltq_mfp_pin {
44  	const char *name;
45  	const unsigned int pin;
46  	const unsigned short func[LTQ_MAX_MUX];
47  };
48  
49  struct ltq_pin_group {
50  	const char *name;
51  	const unsigned mux;
52  	const unsigned *pins;
53  	const unsigned npins;
54  };
55  
56  struct ltq_pmx_func {
57  	const char *name;
58  	const char * const *groups;
59  	const unsigned num_groups;
60  };
61  
62  struct ltq_pinmux_info {
63  	struct device *dev;
64  	struct pinctrl_dev *pctrl;
65  
66  	/* we need to manage up to 5 pad controllers */
67  	void __iomem *membase[5];
68  
69  	/* the descriptor for the subsystem */
70  	struct pinctrl_desc *desc;
71  
72  	/* we expose our pads to the subsystem */
73  	struct pinctrl_pin_desc *pads;
74  
75  	/* the number of pads. this varies between socs */
76  	unsigned int num_pads;
77  
78  	/* these are our multifunction pins */
79  	const struct ltq_mfp_pin *mfp;
80  	unsigned int num_mfp;
81  
82  	/* a number of multifunction pins can be grouped together */
83  	const struct ltq_pin_group *grps;
84  	unsigned int num_grps;
85  
86  	/* a mapping between function string and id */
87  	const struct ltq_pmx_func *funcs;
88  	unsigned int num_funcs;
89  
90  	/* the pinconf options that we are able to read from the DT */
91  	const struct ltq_cfg_param *params;
92  	unsigned int num_params;
93  
94  	/* the pad controller can have a irq mapping  */
95  	const unsigned *exin;
96  	unsigned int num_exin;
97  
98  	/* we need 5 clocks max */
99  	struct clk *clk[5];
100  
101  	/* soc specific callback used to apply muxing */
102  	int (*apply_mux)(struct pinctrl_dev *pctrldev, int pin, int mux);
103  };
104  
105  enum ltq_pin {
106  	GPIO0 = 0,
107  	GPIO1,
108  	GPIO2,
109  	GPIO3,
110  	GPIO4,
111  	GPIO5,
112  	GPIO6,
113  	GPIO7,
114  	GPIO8,
115  	GPIO9,
116  	GPIO10, /* 10 */
117  	GPIO11,
118  	GPIO12,
119  	GPIO13,
120  	GPIO14,
121  	GPIO15,
122  	GPIO16,
123  	GPIO17,
124  	GPIO18,
125  	GPIO19,
126  	GPIO20, /* 20 */
127  	GPIO21,
128  	GPIO22,
129  	GPIO23,
130  	GPIO24,
131  	GPIO25,
132  	GPIO26,
133  	GPIO27,
134  	GPIO28,
135  	GPIO29,
136  	GPIO30, /* 30 */
137  	GPIO31,
138  	GPIO32,
139  	GPIO33,
140  	GPIO34,
141  	GPIO35,
142  	GPIO36,
143  	GPIO37,
144  	GPIO38,
145  	GPIO39,
146  	GPIO40, /* 40 */
147  	GPIO41,
148  	GPIO42,
149  	GPIO43,
150  	GPIO44,
151  	GPIO45,
152  	GPIO46,
153  	GPIO47,
154  	GPIO48,
155  	GPIO49,
156  	GPIO50, /* 50 */
157  	GPIO51,
158  	GPIO52,
159  	GPIO53,
160  	GPIO54,
161  	GPIO55,
162  	GPIO56,
163  	GPIO57,
164  	GPIO58,
165  	GPIO59,
166  	GPIO60, /* 60 */
167  	GPIO61,
168  	GPIO62,
169  	GPIO63,
170  
171  	GPIO64,
172  	GPIO65,
173  	GPIO66,
174  	GPIO67,
175  	GPIO68,
176  	GPIO69,
177  	GPIO70,
178  	GPIO71,
179  	GPIO72,
180  	GPIO73,
181  	GPIO74,
182  	GPIO75,
183  	GPIO76,
184  	GPIO77,
185  	GPIO78,
186  	GPIO79,
187  	GPIO80,
188  	GPIO81,
189  	GPIO82,
190  	GPIO83,
191  	GPIO84,
192  	GPIO85,
193  	GPIO86,
194  	GPIO87,
195  	GPIO88,
196  };
197  
198  extern int ltq_pinctrl_register(struct platform_device *pdev,
199  				   struct ltq_pinmux_info *info);
200  extern int ltq_pinctrl_unregister(struct platform_device *pdev);
201  #endif	/* __PINCTRL_LANTIQ_H */
202