1 /*
2  *  linux/drivers/pinctrl/pinctrl-pxa3xx.h
3  *
4  *  This program is free software; you can redistribute it and/or modify
5  *  it under the terms of the GNU General Public License version 2 as
6  *  publishhed by the Free Software Foundation.
7  *
8  *  Copyright (C) 2011, Marvell Technology Group Ltd.
9  *
10  *  Author: Haojian Zhuang <haojian.zhuang@marvell.com>
11  *
12  */
13 
14 #ifndef __PINCTRL_PXA3XX_H
15 
16 #include <linux/pinctrl/pinctrl.h>
17 #include <linux/pinctrl/pinmux.h>
18 
19 #define ARRAY_AND_SIZE(x)	(x), ARRAY_SIZE(x)
20 
21 #define PXA3xx_MUX_GPIO		0
22 
23 #define PXA3xx_MAX_MUX		8
24 #define MFPR_FUNC_MASK		0x7
25 
26 enum pxa_cpu_type {
27 	PINCTRL_INVALID = 0,
28 	PINCTRL_PXA300,
29 	PINCTRL_PXA310,
30 	PINCTRL_PXA320,
31 	PINCTRL_PXA168,
32 	PINCTRL_PXA910,
33 	PINCTRL_PXA930,
34 	PINCTRL_PXA955,
35 	PINCTRL_MMP2,
36 	PINCTRL_MAX,
37 };
38 
39 struct pxa3xx_mfp_pin {
40 	const char *name;
41 	const unsigned int pin;
42 	const unsigned int mfpr;	/* register offset */
43 	const unsigned short func[8];
44 };
45 
46 struct pxa3xx_pin_group {
47 	const char *name;
48 	const unsigned mux;
49 	const unsigned *pins;
50 	const unsigned npins;
51 };
52 
53 struct pxa3xx_pmx_func {
54 	const char *name;
55 	const char * const * groups;
56 	const unsigned num_groups;
57 };
58 
59 struct pxa3xx_pinmux_info {
60 	struct device *dev;
61 	struct pinctrl_dev *pctrl;
62 	enum pxa_cpu_type cputype;
63 	unsigned int phy_base;
64 	unsigned int phy_size;
65 	void __iomem *virt_base;
66 
67 	struct pxa3xx_mfp_pin *mfp;
68 	unsigned int num_mfp;
69 	struct pxa3xx_pin_group *grps;
70 	unsigned int num_grps;
71 	struct pxa3xx_pmx_func *funcs;
72 	unsigned int num_funcs;
73 	unsigned int num_gpio;
74 	struct pinctrl_desc *desc;
75 	struct pinctrl_pin_desc *pads;
76 	unsigned int num_pads;
77 
78 	unsigned ds_mask;	/* drive strength mask */
79 	unsigned ds_shift;	/* drive strength shift */
80 	unsigned slp_mask;	/* sleep mask */
81 	unsigned slp_input_low;
82 	unsigned slp_input_high;
83 	unsigned slp_output_low;
84 	unsigned slp_output_high;
85 	unsigned slp_float;
86 };
87 
88 enum pxa3xx_pin_list {
89 	GPIO0 = 0,
90 	GPIO1,
91 	GPIO2,
92 	GPIO3,
93 	GPIO4,
94 	GPIO5,
95 	GPIO6,
96 	GPIO7,
97 	GPIO8,
98 	GPIO9,
99 	GPIO10, /* 10 */
100 	GPIO11,
101 	GPIO12,
102 	GPIO13,
103 	GPIO14,
104 	GPIO15,
105 	GPIO16,
106 	GPIO17,
107 	GPIO18,
108 	GPIO19,
109 	GPIO20, /* 20 */
110 	GPIO21,
111 	GPIO22,
112 	GPIO23,
113 	GPIO24,
114 	GPIO25,
115 	GPIO26,
116 	GPIO27,
117 	GPIO28,
118 	GPIO29,
119 	GPIO30, /* 30 */
120 	GPIO31,
121 	GPIO32,
122 	GPIO33,
123 	GPIO34,
124 	GPIO35,
125 	GPIO36,
126 	GPIO37,
127 	GPIO38,
128 	GPIO39,
129 	GPIO40, /* 40 */
130 	GPIO41,
131 	GPIO42,
132 	GPIO43,
133 	GPIO44,
134 	GPIO45,
135 	GPIO46,
136 	GPIO47,
137 	GPIO48,
138 	GPIO49,
139 	GPIO50, /* 50 */
140 	GPIO51,
141 	GPIO52,
142 	GPIO53,
143 	GPIO54,
144 	GPIO55,
145 	GPIO56,
146 	GPIO57,
147 	GPIO58,
148 	GPIO59,
149 	GPIO60, /* 60 */
150 	GPIO61,
151 	GPIO62,
152 	GPIO63,
153 	GPIO64,
154 	GPIO65,
155 	GPIO66,
156 	GPIO67,
157 	GPIO68,
158 	GPIO69,
159 	GPIO70, /* 70 */
160 	GPIO71,
161 	GPIO72,
162 	GPIO73,
163 	GPIO74,
164 	GPIO75,
165 	GPIO76,
166 	GPIO77,
167 	GPIO78,
168 	GPIO79,
169 	GPIO80, /* 80 */
170 	GPIO81,
171 	GPIO82,
172 	GPIO83,
173 	GPIO84,
174 	GPIO85,
175 	GPIO86,
176 	GPIO87,
177 	GPIO88,
178 	GPIO89,
179 	GPIO90, /* 90 */
180 	GPIO91,
181 	GPIO92,
182 	GPIO93,
183 	GPIO94,
184 	GPIO95,
185 	GPIO96,
186 	GPIO97,
187 	GPIO98,
188 	GPIO99,
189 	GPIO100, /* 100 */
190 	GPIO101,
191 	GPIO102,
192 	GPIO103,
193 	GPIO104,
194 	GPIO105,
195 	GPIO106,
196 	GPIO107,
197 	GPIO108,
198 	GPIO109,
199 	GPIO110, /* 110 */
200 	GPIO111,
201 	GPIO112,
202 	GPIO113,
203 	GPIO114,
204 	GPIO115,
205 	GPIO116,
206 	GPIO117,
207 	GPIO118,
208 	GPIO119,
209 	GPIO120, /* 120 */
210 	GPIO121,
211 	GPIO122,
212 	GPIO123,
213 	GPIO124,
214 	GPIO125,
215 	GPIO126,
216 	GPIO127,
217 	GPIO128,
218 	GPIO129,
219 	GPIO130, /* 130 */
220 	GPIO131,
221 	GPIO132,
222 	GPIO133,
223 	GPIO134,
224 	GPIO135,
225 	GPIO136,
226 	GPIO137,
227 	GPIO138,
228 	GPIO139,
229 	GPIO140, /* 140 */
230 	GPIO141,
231 	GPIO142,
232 	GPIO143,
233 	GPIO144,
234 	GPIO145,
235 	GPIO146,
236 	GPIO147,
237 	GPIO148,
238 	GPIO149,
239 	GPIO150, /* 150 */
240 	GPIO151,
241 	GPIO152,
242 	GPIO153,
243 	GPIO154,
244 	GPIO155,
245 	GPIO156,
246 	GPIO157,
247 	GPIO158,
248 	GPIO159,
249 	GPIO160, /* 160 */
250 	GPIO161,
251 	GPIO162,
252 	GPIO163,
253 	GPIO164,
254 	GPIO165,
255 	GPIO166,
256 	GPIO167,
257 	GPIO168,
258 	GPIO169,
259 };
260 
261 extern int pxa3xx_pinctrl_register(struct platform_device *pdev,
262 				   struct pxa3xx_pinmux_info *info);
263 extern int pxa3xx_pinctrl_unregister(struct platform_device *pdev);
264 #endif	/* __PINCTRL_PXA3XX_H */
265