31 #include "galileo-pinmux.h"
33 #include "gpio-pcal9535a.h"
35 #include "pwm-pca9685.h"
37 #define GPIO_PCAL9535A_0_I2C_ADDR 0x25
38 #define GPIO_PCAL9535A_1_I2C_ADDR 0x26
39 #define GPIO_PCAL9535A_2_I2C_ADDR 0x27
40 #define PWM_PCA9685_0_I2C_ADDR 0x47
42 #define PINMUX_NUM_FUNCS 4
43 #define PINMUX_NUM_PATHS 4
44 #define PINMUX_NUM_PINS 20
62 GALILEO_PINMUX_FUNC func;
65 static struct pin_config default_pinmux_config[PINMUX_NUM_PINS] = {
66 { 0, GALILEO_PINMUX_FUNC_C },
67 { 1, GALILEO_PINMUX_FUNC_C },
68 { 2, GALILEO_PINMUX_FUNC_A },
69 { 3, GALILEO_PINMUX_FUNC_B },
70 { 4, GALILEO_PINMUX_FUNC_B },
71 { 5, GALILEO_PINMUX_FUNC_B },
72 { 6, GALILEO_PINMUX_FUNC_B },
73 { 7, GALILEO_PINMUX_FUNC_B },
74 { 8, GALILEO_PINMUX_FUNC_B },
75 { 9, GALILEO_PINMUX_FUNC_B },
76 { 10, GALILEO_PINMUX_FUNC_A },
77 { 11, GALILEO_PINMUX_FUNC_B },
78 { 12, GALILEO_PINMUX_FUNC_B },
79 { 13, GALILEO_PINMUX_FUNC_B },
80 { 14, GALILEO_PINMUX_FUNC_B },
81 { 15, GALILEO_PINMUX_FUNC_B },
82 { 16, GALILEO_PINMUX_FUNC_B },
83 { 17, GALILEO_PINMUX_FUNC_B },
84 { 18, GALILEO_PINMUX_FUNC_C },
85 { 19, GALILEO_PINMUX_FUNC_C },
97 GALILEO_PINMUX_FUNC func;
98 struct mux_pin path[PINMUX_NUM_PATHS];
101 struct pinmux_internal_data {
102 struct gpio_pcal9535a_data exp0;
103 struct gpio_pcal9535a_data exp1;
104 struct gpio_pcal9535a_data exp2;
105 struct pwm_pca9685_data pwm0;
108 static struct pinmux_internal_data data;
110 static struct mux_path galileo_pinmux_paths[PINMUX_NUM_PINS * PINMUX_NUM_FUNCS] = {
111 {0, GALILEO_PINMUX_FUNC_A, {
112 { EXP1, 0, PIN_HIGH, (QUARKX1000_GPIO_OUT) },
113 { EXP1, 1, PIN_LOW, (QUARKX1000_GPIO_OUT) },
114 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
115 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
116 {0, GALILEO_PINMUX_FUNC_B, {
117 { EXP1, 0, PIN_LOW, (QUARKX1000_GPIO_OUT) },
118 { EXP1, 1, PIN_LOW, (QUARKX1000_GPIO_OUT) },
119 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
120 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
121 {0, GALILEO_PINMUX_FUNC_C, {
122 { EXP1, 0, PIN_LOW, (QUARKX1000_GPIO_OUT) },
123 { EXP1, 1, PIN_LOW, (QUARKX1000_GPIO_OUT) },
124 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
125 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
126 {0, GALILEO_PINMUX_FUNC_D, {
127 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
128 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
129 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
130 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
132 {1, GALILEO_PINMUX_FUNC_A, {
133 { EXP1, 13, PIN_LOW, (QUARKX1000_GPIO_OUT) },
134 { EXP0, 12, PIN_LOW, (QUARKX1000_GPIO_OUT) },
135 { EXP0, 13, PIN_LOW, (QUARKX1000_GPIO_OUT) },
136 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
137 {1, GALILEO_PINMUX_FUNC_B, {
138 { EXP1, 13, PIN_LOW, (QUARKX1000_GPIO_OUT) },
139 { EXP0, 12, PIN_HIGH, (QUARKX1000_GPIO_OUT)},
140 { EXP0, 13, PIN_LOW, (QUARKX1000_GPIO_OUT) },
141 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
142 {1, GALILEO_PINMUX_FUNC_C, {
143 { EXP1, 13, PIN_HIGH, (QUARKX1000_GPIO_OUT)},
144 { EXP0, 12, PIN_LOW, (QUARKX1000_GPIO_OUT) },
145 { EXP0, 13, PIN_LOW, (QUARKX1000_GPIO_OUT) },
146 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
147 {1, GALILEO_PINMUX_FUNC_D, {
148 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
149 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
150 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
151 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
153 {2, GALILEO_PINMUX_FUNC_A, {
154 { PWM0, 13, PIN_HIGH, (QUARKX1000_GPIO_OUT) },
155 { EXP1, 2, PIN_LOW, (QUARKX1000_GPIO_OUT) },
156 { EXP1, 3, PIN_LOW, (QUARKX1000_GPIO_OUT) },
157 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
158 {2, GALILEO_PINMUX_FUNC_B, {
159 { PWM0, 13, PIN_HIGH, (QUARKX1000_GPIO_OUT) },
160 { EXP1, 2, PIN_HIGH, (QUARKX1000_GPIO_OUT) },
161 { EXP1, 3, PIN_LOW, (QUARKX1000_GPIO_OUT) },
162 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
163 {2, GALILEO_PINMUX_FUNC_C, {
164 { PWM0, 13, PIN_LOW, (QUARKX1000_GPIO_OUT) },
165 { EXP1, 2, PIN_HIGH, (QUARKX1000_GPIO_OUT) },
166 { EXP1, 3, PIN_HIGH, (QUARKX1000_GPIO_OUT) },
167 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
168 {2, GALILEO_PINMUX_FUNC_D, {
169 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
170 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
171 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
172 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
174 {3, GALILEO_PINMUX_FUNC_A, {
175 { PWM0, 0, PIN_LOW, (QUARKX1000_GPIO_OUT) },
176 { PWM0, 12, PIN_LOW, (QUARKX1000_GPIO_OUT) },
177 { EXP0, 0, PIN_LOW, (QUARKX1000_GPIO_OUT) },
178 { EXP0, 1, PIN_LOW, (QUARKX1000_GPIO_OUT) }}},
179 {3, GALILEO_PINMUX_FUNC_B, {
180 { PWM0, 0, PIN_LOW, (QUARKX1000_GPIO_OUT) },
181 { PWM0, 12, PIN_LOW, (QUARKX1000_GPIO_OUT) },
182 { EXP0, 0, PIN_HIGH, (QUARKX1000_GPIO_OUT) },
183 { EXP0, 1, PIN_LOW, (QUARKX1000_GPIO_OUT) }}},
184 {3, GALILEO_PINMUX_FUNC_C, {
185 { PWM0, 0, PIN_LOW, (QUARKX1000_GPIO_OUT) },
186 { PWM0, 12, PIN_HIGH, (QUARKX1000_GPIO_OUT) },
187 { EXP0, 0, PIN_LOW, (QUARKX1000_GPIO_OUT) },
188 { EXP0, 1, PIN_LOW, (QUARKX1000_GPIO_OUT) }}},
189 {3, GALILEO_PINMUX_FUNC_D, {
190 { PWM0, 0, PIN_HIGH, (QUARKX1000_GPIO_OUT) },
191 { PWM0, 12, PIN_LOW, (QUARKX1000_GPIO_OUT) },
192 { EXP0, 0, PIN_LOW, (QUARKX1000_GPIO_OUT) },
193 { EXP0, 1, PIN_LOW, (QUARKX1000_GPIO_OUT) }}},
195 {4, GALILEO_PINMUX_FUNC_A, {
196 { EXP1, 4, PIN_LOW, (QUARKX1000_GPIO_OUT) },
197 { EXP1, 5, PIN_LOW, (QUARKX1000_GPIO_OUT) },
198 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
199 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
200 {4, GALILEO_PINMUX_FUNC_B, {
201 { EXP1, 4, PIN_HIGH, (QUARKX1000_GPIO_OUT) },
202 { EXP1, 5, PIN_LOW, (QUARKX1000_GPIO_OUT) },
203 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
204 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
205 {4, GALILEO_PINMUX_FUNC_C, {
206 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
207 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
208 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
209 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
210 {4, GALILEO_PINMUX_FUNC_D, {
211 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
212 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
213 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
214 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
216 {5, GALILEO_PINMUX_FUNC_A, {
217 { PWM0, 2, PIN_LOW, (QUARKX1000_GPIO_OUT) },
218 { EXP0, 2, PIN_LOW, (QUARKX1000_GPIO_OUT) },
219 { EXP0, 3, PIN_LOW, (QUARKX1000_GPIO_OUT) },
220 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
221 {5, GALILEO_PINMUX_FUNC_B, {
222 { PWM0, 2, PIN_LOW, (QUARKX1000_GPIO_OUT) },
223 { EXP0, 2, PIN_HIGH, (QUARKX1000_GPIO_OUT) },
224 { EXP0, 3, PIN_LOW, (QUARKX1000_GPIO_OUT) },
225 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
226 {5, GALILEO_PINMUX_FUNC_C, {
227 { PWM0, 2, PIN_HIGH, (QUARKX1000_GPIO_OUT) },
228 { EXP0, 2, PIN_LOW, (QUARKX1000_GPIO_OUT) },
229 { EXP0, 3, PIN_LOW, (QUARKX1000_GPIO_OUT) },
230 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
231 {5, GALILEO_PINMUX_FUNC_D, {
232 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
233 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
234 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
235 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
237 {6, GALILEO_PINMUX_FUNC_A, {
238 { PWM0, 4, PIN_LOW, (QUARKX1000_GPIO_OUT) },
239 { EXP0, 4, PIN_LOW, (QUARKX1000_GPIO_OUT) },
240 { EXP0, 5, PIN_LOW, (QUARKX1000_GPIO_OUT) },
241 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
242 {6, GALILEO_PINMUX_FUNC_B, {
243 { PWM0, 4, PIN_LOW, (QUARKX1000_GPIO_OUT) },
244 { EXP0, 4, PIN_HIGH, (QUARKX1000_GPIO_OUT) },
245 { EXP0, 5, PIN_LOW, (QUARKX1000_GPIO_OUT) },
246 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
247 {6, GALILEO_PINMUX_FUNC_C, {
248 { PWM0, 4, PIN_HIGH, (QUARKX1000_GPIO_OUT) },
249 { EXP0, 4, PIN_LOW, (QUARKX1000_GPIO_OUT) },
250 { EXP0, 5, PIN_LOW, (QUARKX1000_GPIO_OUT) },
251 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
252 {6, GALILEO_PINMUX_FUNC_D, {
253 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
254 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
255 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
256 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
258 {7, GALILEO_PINMUX_FUNC_A, {
259 { EXP1, 6, PIN_LOW, (QUARKX1000_GPIO_OUT) },
260 { EXP1, 7, PIN_LOW, (QUARKX1000_GPIO_OUT) },
261 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
262 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
263 {7, GALILEO_PINMUX_FUNC_B, {
264 { EXP1, 6, PIN_LOW, (QUARKX1000_GPIO_IN ) },
265 { EXP1, 7, PIN_LOW, (QUARKX1000_GPIO_OUT) },
266 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
267 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
268 {7, GALILEO_PINMUX_FUNC_C, {
269 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
270 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
271 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
272 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
273 {7, GALILEO_PINMUX_FUNC_D, {
274 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
275 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
276 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
277 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
279 {8, GALILEO_PINMUX_FUNC_A, {
280 { EXP1, 8, PIN_LOW, (QUARKX1000_GPIO_OUT) },
281 { EXP1, 9, PIN_LOW, (QUARKX1000_GPIO_OUT) },
282 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
283 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
284 {8, GALILEO_PINMUX_FUNC_B, {
285 { EXP1, 8, PIN_LOW, (QUARKX1000_GPIO_IN ) },
286 { EXP1, 9, PIN_LOW, (QUARKX1000_GPIO_OUT) },
287 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
288 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
289 {8, GALILEO_PINMUX_FUNC_C, {
290 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
291 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
292 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
293 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
294 {8, GALILEO_PINMUX_FUNC_D, {
295 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
296 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
297 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
298 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
300 {9, GALILEO_PINMUX_FUNC_A, {
301 { PWM0, 6, PIN_LOW, (QUARKX1000_GPIO_OUT) },
302 { EXP0, 6, PIN_LOW, (QUARKX1000_GPIO_OUT) },
303 { EXP0, 7, PIN_LOW, (QUARKX1000_GPIO_OUT) },
304 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
305 {9, GALILEO_PINMUX_FUNC_B, {
306 { PWM0, 6, PIN_LOW, (QUARKX1000_GPIO_OUT) },
307 { EXP0, 6, PIN_HIGH, (QUARKX1000_GPIO_OUT) },
308 { EXP0, 7, PIN_LOW, (QUARKX1000_GPIO_OUT) },
309 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
310 {9, GALILEO_PINMUX_FUNC_C, {
311 { PWM0, 6, PIN_HIGH, (QUARKX1000_GPIO_OUT) },
312 { EXP0, 6, PIN_LOW, (QUARKX1000_GPIO_OUT) },
313 { EXP0, 7, PIN_LOW, (QUARKX1000_GPIO_OUT) },
314 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
315 {9, GALILEO_PINMUX_FUNC_C, {
316 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
317 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
318 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
319 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
321 {10, GALILEO_PINMUX_FUNC_A, {
322 { PWM0, 10, PIN_LOW, (QUARKX1000_GPIO_OUT) },
323 { EXP0, 10, PIN_LOW, (QUARKX1000_GPIO_OUT) },
324 { EXP0, 11, PIN_LOW, (QUARKX1000_GPIO_OUT) },
325 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
326 {10, GALILEO_PINMUX_FUNC_B, {
327 { PWM0, 10, PIN_LOW, (QUARKX1000_GPIO_OUT) },
328 { EXP0, 10, PIN_HIGH, (QUARKX1000_GPIO_OUT) },
329 { EXP0, 11, PIN_LOW, (QUARKX1000_GPIO_OUT) },
330 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
331 {10, GALILEO_PINMUX_FUNC_C, {
332 { PWM0, 10, PIN_HIGH, (QUARKX1000_GPIO_OUT) },
333 { EXP0, 10, PIN_LOW, (QUARKX1000_GPIO_OUT) },
334 { EXP0, 11, PIN_LOW, (QUARKX1000_GPIO_OUT) },
335 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
336 {10, GALILEO_PINMUX_FUNC_D, {
337 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
338 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
339 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
340 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
342 {11, GALILEO_PINMUX_FUNC_A, {
343 { EXP1, 12, PIN_LOW, (QUARKX1000_GPIO_OUT) },
344 { PWM0, 8, PIN_LOW, (QUARKX1000_GPIO_OUT) },
345 { EXP0, 8, PIN_LOW, (QUARKX1000_GPIO_OUT) },
346 { EXP0, 9, PIN_LOW, (QUARKX1000_GPIO_OUT) }}},
347 {11, GALILEO_PINMUX_FUNC_B, {
348 { EXP1, 12, PIN_LOW, (QUARKX1000_GPIO_OUT) },
349 { PWM0, 8, PIN_LOW, (QUARKX1000_GPIO_OUT) },
350 { EXP0, 8, PIN_HIGH, (QUARKX1000_GPIO_OUT) },
351 { EXP0, 9, PIN_LOW, (QUARKX1000_GPIO_OUT) }}},
352 {11, GALILEO_PINMUX_FUNC_C, {
353 { EXP1, 12, PIN_LOW, (QUARKX1000_GPIO_OUT) },
354 { PWM0, 8, PIN_HIGH, (QUARKX1000_GPIO_OUT) },
355 { EXP0, 8, PIN_LOW, (QUARKX1000_GPIO_OUT) },
356 { EXP0, 9, PIN_LOW, (QUARKX1000_GPIO_OUT) }}},
357 {11, GALILEO_PINMUX_FUNC_D, {
358 { EXP1, 12, PIN_HIGH, (QUARKX1000_GPIO_OUT) },
359 { PWM0, 8, PIN_LOW, (QUARKX1000_GPIO_OUT) },
360 { EXP0, 8, PIN_LOW, (QUARKX1000_GPIO_OUT) },
361 { EXP0, 9, PIN_LOW, (QUARKX1000_GPIO_OUT) }}},
363 {12, GALILEO_PINMUX_FUNC_A, {
364 { EXP1, 10, PIN_LOW, (QUARKX1000_GPIO_OUT) },
365 { EXP1, 11, PIN_LOW, (QUARKX1000_GPIO_OUT) },
366 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
367 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
368 {12, GALILEO_PINMUX_FUNC_B, {
369 { EXP1, 10, PIN_HIGH, (QUARKX1000_GPIO_OUT) },
370 { EXP1, 11, PIN_LOW, (QUARKX1000_GPIO_OUT) },
371 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
372 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
373 {12, GALILEO_PINMUX_FUNC_C, {
374 { EXP1, 10, PIN_LOW, (QUARKX1000_GPIO_OUT) },
375 { EXP1, 11, PIN_LOW, (QUARKX1000_GPIO_OUT) },
376 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
377 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
378 {12, GALILEO_PINMUX_FUNC_D, {
379 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
380 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
381 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
382 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
384 {13, GALILEO_PINMUX_FUNC_A, {
385 { EXP1, 14, PIN_LOW, (QUARKX1000_GPIO_OUT) },
386 { EXP0, 14, PIN_LOW, (QUARKX1000_GPIO_OUT) },
387 { EXP0, 15, PIN_LOW, (QUARKX1000_GPIO_OUT) },
388 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
389 {13, GALILEO_PINMUX_FUNC_B, {
390 { EXP1, 14, PIN_LOW, (QUARKX1000_GPIO_OUT) },
391 { EXP0, 14, PIN_HIGH, (QUARKX1000_GPIO_OUT) },
392 { EXP0, 15, PIN_LOW, (QUARKX1000_GPIO_OUT) },
393 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
394 {13, GALILEO_PINMUX_FUNC_C, {
395 { EXP1, 14, PIN_HIGH, (QUARKX1000_GPIO_OUT) },
396 { EXP0, 14, PIN_LOW, (QUARKX1000_GPIO_OUT) },
397 { EXP0, 15, PIN_LOW, (QUARKX1000_GPIO_OUT) },
398 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
399 {13, GALILEO_PINMUX_FUNC_D, {
400 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
401 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
402 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
403 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
405 {14, GALILEO_PINMUX_FUNC_A, {
406 { EXP2, 0, PIN_LOW, (QUARKX1000_GPIO_OUT) },
407 { EXP2, 1, PIN_LOW, (QUARKX1000_GPIO_OUT) },
408 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
409 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
410 {14, GALILEO_PINMUX_FUNC_B, {
411 { EXP2, 0, PIN_LOW, (QUARKX1000_GPIO_IN ) },
412 { EXP2, 1, PIN_LOW, (QUARKX1000_GPIO_OUT) },
413 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
414 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
415 {14, GALILEO_PINMUX_FUNC_C, {
416 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
417 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
418 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
419 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
420 {14, GALILEO_PINMUX_FUNC_D, {
421 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
422 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
423 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
424 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
426 {15, GALILEO_PINMUX_FUNC_A, {
427 { EXP2, 2, PIN_LOW, (QUARKX1000_GPIO_OUT) },
428 { EXP2, 3, PIN_LOW, (QUARKX1000_GPIO_OUT) },
429 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
430 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
431 {15, GALILEO_PINMUX_FUNC_B, {
432 { EXP2, 2, PIN_LOW, (QUARKX1000_GPIO_IN ) },
433 { EXP2, 3, PIN_LOW, (QUARKX1000_GPIO_OUT) },
434 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
435 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
436 {15, GALILEO_PINMUX_FUNC_C, {
437 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
438 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
439 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
440 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
441 {15, GALILEO_PINMUX_FUNC_D, {
442 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
443 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
444 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
445 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
447 {16, GALILEO_PINMUX_FUNC_A, {
448 { EXP2, 4, PIN_LOW, (QUARKX1000_GPIO_OUT) },
449 { EXP2, 5, PIN_LOW, (QUARKX1000_GPIO_OUT) },
450 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
451 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
452 {16, GALILEO_PINMUX_FUNC_B, {
453 { EXP2, 4, PIN_LOW, (QUARKX1000_GPIO_IN ) },
454 { EXP2, 5, PIN_LOW, (QUARKX1000_GPIO_OUT) },
455 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
456 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
457 {16, GALILEO_PINMUX_FUNC_C, {
458 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
459 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
460 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
461 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
462 {16, GALILEO_PINMUX_FUNC_D, {
463 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
464 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
465 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
466 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
468 {17, GALILEO_PINMUX_FUNC_A, {
469 { EXP2, 6, PIN_LOW, (QUARKX1000_GPIO_OUT) },
470 { EXP2, 7, PIN_LOW, (QUARKX1000_GPIO_OUT) },
471 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
472 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
473 {17, GALILEO_PINMUX_FUNC_B, {
474 { EXP2, 6, PIN_LOW, (QUARKX1000_GPIO_IN ) },
475 { EXP2, 7, PIN_LOW, (QUARKX1000_GPIO_OUT) },
476 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
477 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
478 {17, GALILEO_PINMUX_FUNC_C, {
479 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
480 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
481 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
482 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
483 {17, GALILEO_PINMUX_FUNC_D, {
484 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
485 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
486 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
487 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
489 {18, GALILEO_PINMUX_FUNC_A, {
490 { PWM0, 14, PIN_HIGH, (QUARKX1000_GPIO_OUT) },
491 { EXP2, 12, PIN_HIGH, (QUARKX1000_GPIO_OUT) },
492 { EXP2, 8, PIN_LOW, (QUARKX1000_GPIO_OUT) },
493 { EXP2, 9, PIN_LOW, (QUARKX1000_GPIO_OUT) }}},
494 {18, GALILEO_PINMUX_FUNC_B, {
495 { PWM0, 14, PIN_LOW, (QUARKX1000_GPIO_OUT) },
496 { EXP2, 12, PIN_HIGH, (QUARKX1000_GPIO_OUT) },
497 { EXP2, 8, PIN_LOW, (QUARKX1000_GPIO_IN ) },
498 { EXP2, 9, PIN_LOW, (QUARKX1000_GPIO_OUT) }}},
499 {18, GALILEO_PINMUX_FUNC_C, {
500 { PWM0, 14, PIN_HIGH, (QUARKX1000_GPIO_OUT) },
501 { EXP2, 9, PIN_LOW, (QUARKX1000_GPIO_OUT) },
502 { EXP2, 12, PIN_LOW, (QUARKX1000_GPIO_OUT) },
503 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
504 {18, GALILEO_PINMUX_FUNC_D, {
505 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
506 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
507 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
508 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
510 {19, GALILEO_PINMUX_FUNC_A, {
511 { PWM0, 15, PIN_HIGH, (QUARKX1000_GPIO_OUT) },
512 { EXP2, 12, PIN_HIGH, (QUARKX1000_GPIO_OUT) },
513 { EXP2, 10, PIN_LOW, (QUARKX1000_GPIO_OUT) },
514 { EXP2, 11, PIN_LOW, (QUARKX1000_GPIO_OUT) }}},
515 {19, GALILEO_PINMUX_FUNC_B, {
516 { PWM0, 15, PIN_LOW, (QUARKX1000_GPIO_OUT) },
517 { EXP2, 12, PIN_HIGH, (QUARKX1000_GPIO_OUT) },
518 { EXP2, 10, PIN_LOW, (QUARKX1000_GPIO_IN ) },
519 { EXP2, 11, PIN_LOW, (QUARKX1000_GPIO_OUT) }}},
520 {19, GALILEO_PINMUX_FUNC_C, {
521 { PWM0, 15, PIN_HIGH, (QUARKX1000_GPIO_OUT) },
522 { EXP2, 11, PIN_LOW, (QUARKX1000_GPIO_OUT) },
523 { EXP2, 12, PIN_LOW, (QUARKX1000_GPIO_OUT) },
524 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
525 {19, GALILEO_PINMUX_FUNC_D, {
526 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
527 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
528 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) },
529 { NONE, 0, DISABLED, (QUARKX1000_GPIO_IN ) }}},
533 galileo_pinmux_set_pin(uint8_t pin, GALILEO_PINMUX_FUNC func)
535 struct mux_path *mux_path;
538 if(pin > PINMUX_NUM_PINS) {
542 index = PINMUX_NUM_FUNCS * pin;
545 mux_path = &galileo_pinmux_paths[index];
547 for(i = 0; i < PINMUX_NUM_PATHS; i++) {
548 switch(mux_path->path[i].chip) {
550 if(gpio_pcal9535a_write(&data.exp0, mux_path->path[i].pin, mux_path->path[i].level) < 0) {
553 if(gpio_pcal9535a_config(&data.exp0, mux_path->path[i].pin, mux_path->path[i].cfg) < 0) {
558 if(gpio_pcal9535a_write(&data.exp1, mux_path->path[i].pin, mux_path->path[i].level) < 0) {
561 if(gpio_pcal9535a_config(&data.exp1, mux_path->path[i].pin, mux_path->path[i].cfg) < 0) {
566 if(gpio_pcal9535a_write(&data.exp2, mux_path->path[i].pin, mux_path->path[i].level) < 0) {
569 if(gpio_pcal9535a_config(&data.exp2, mux_path->path[i].pin, mux_path->path[i].cfg) < 0) {
574 if(pwm_pca9685_set_duty_cycle(&data.pwm0, mux_path->path[i].pin, mux_path->path[i].level ? 100 : 0) < 0) {
586 galileo_pinmux_initialize(
void)
591 if(!quarkX1000_i2c_is_available()) {
595 if(gpio_pcal9535a_init(&data.exp0, GPIO_PCAL9535A_0_I2C_ADDR) < 0) {
599 if(gpio_pcal9535a_init(&data.exp1, GPIO_PCAL9535A_1_I2C_ADDR) < 0) {
603 if(gpio_pcal9535a_init(&data.exp2, GPIO_PCAL9535A_2_I2C_ADDR) < 0) {
607 if(pwm_pca9685_init(&data.pwm0, PWM_PCA9685_0_I2C_ADDR) < 0) {
611 for(i = 0; i < PINMUX_NUM_PINS; i++) {
612 if(galileo_pinmux_set_pin(default_pinmux_config[i].pin_num, default_pinmux_config[i].func) < 0) {