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