ARM: Build fix after Tegra14 K3.4 merge
[linux-3.10.git] / arch / arm / mach-tegra / include / mach / pinmux.h
1 /*
2  * linux/arch/arm/mach-tegra/include/mach/pinmux.h
3  *
4  * Copyright (C) 2010 Google, Inc.
5  * Copyright (C) 2011-2012 NVIDIA Corporation.
6  *
7  * This software is licensed under the terms of the GNU General Public
8  * License version 2, as published by the Free Software Foundation, and
9  * may be copied, distributed, and modified under those terms.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  */
17
18 #ifndef __MACH_TEGRA_PINMUX_H
19 #define __MACH_TEGRA_PINMUX_H
20
21 #if defined(CONFIG_ARCH_TEGRA_2x_SOC)
22 #include "pinmux-t2.h"
23 #elif defined(CONFIG_ARCH_TEGRA_3x_SOC)
24 #include "pinmux-t3.h"
25 #elif defined(CONFIG_ARCH_TEGRA_11x_SOC)
26 #include "pinmux-t11.h"
27 #elif defined(CONFIG_ARCH_TEGRA_14x_SOC)
28 #include "pinmux-t14.h"
29 #else
30 #error "Undefined Tegra architecture"
31 #endif
32
33 #define TEGRA_MUX_LIST \
34         TEGRA_MUX(NONE) \
35         TEGRA_MUX(AHB_CLK) \
36         TEGRA_MUX(APB_CLK) \
37         TEGRA_MUX(AUDIO_SYNC) \
38         TEGRA_MUX(CRT) \
39         TEGRA_MUX(DAP1) \
40         TEGRA_MUX(DAP2) \
41         TEGRA_MUX(DAP3) \
42         TEGRA_MUX(DAP4) \
43         TEGRA_MUX(DAP5) \
44         TEGRA_MUX(DISPLAYA) \
45         TEGRA_MUX(DISPLAYB) \
46         TEGRA_MUX(EMC_TEST0_DLL) \
47         TEGRA_MUX(EMC_TEST1_DLL) \
48         TEGRA_MUX(GMI) \
49         TEGRA_MUX(GMI_INT) \
50         TEGRA_MUX(HDMI) \
51         TEGRA_MUX(I2C1) \
52         TEGRA_MUX(I2C2) \
53         TEGRA_MUX(I2C3) \
54         TEGRA_MUX(IDE) \
55         TEGRA_MUX(IRDA) \
56         TEGRA_MUX(KBC) \
57         TEGRA_MUX(MIO) \
58         TEGRA_MUX(MIPI_HS) \
59         TEGRA_MUX(NAND) \
60         TEGRA_MUX(OSC) \
61         TEGRA_MUX(OWR) \
62         TEGRA_MUX(PCIE) \
63         TEGRA_MUX(PLLA_OUT) \
64         TEGRA_MUX(PLLC_OUT1) \
65         TEGRA_MUX(PLLM_OUT1) \
66         TEGRA_MUX(PLLP_OUT2) \
67         TEGRA_MUX(PLLP_OUT3) \
68         TEGRA_MUX(PLLP_OUT4) \
69         TEGRA_MUX(PWM) \
70         TEGRA_MUX(PWR_INTR) \
71         TEGRA_MUX(PWR_ON) \
72         TEGRA_MUX(RTCK) \
73         TEGRA_MUX(SDIO1) \
74         TEGRA_MUX(SDIO2) \
75         TEGRA_MUX(SDIO3) \
76         TEGRA_MUX(SDIO4) \
77         TEGRA_MUX(SFLASH) \
78         TEGRA_MUX(SPDIF) \
79         TEGRA_MUX(SPI1) \
80         TEGRA_MUX(SPI2) \
81         TEGRA_MUX(SPI2_ALT) \
82         TEGRA_MUX(SPI3) \
83         TEGRA_MUX(SPI4) \
84         TEGRA_MUX(TRACE) \
85         TEGRA_MUX(TWC) \
86         TEGRA_MUX(UARTA) \
87         TEGRA_MUX(UARTB) \
88         TEGRA_MUX(UARTC) \
89         TEGRA_MUX(UARTD) \
90         TEGRA_MUX(UARTE) \
91         TEGRA_MUX(ULPI) \
92         TEGRA_MUX(VI) \
93         TEGRA_MUX(VI_SENSOR_CLK) \
94         TEGRA_MUX(XIO) \
95         /* End of Tegra2 MUX selectors */ \
96         TEGRA_MUX(BLINK) \
97         TEGRA_MUX(CEC) \
98         TEGRA_MUX(CLK12) \
99         TEGRA_MUX(DAP) \
100         TEGRA_MUX(DAPSDMMC2) \
101         TEGRA_MUX(DDR) \
102         TEGRA_MUX(DEV3) \
103         TEGRA_MUX(DTV) \
104         TEGRA_MUX(VI_ALT1) \
105         TEGRA_MUX(VI_ALT2) \
106         TEGRA_MUX(VI_ALT3) \
107         TEGRA_MUX(EMC_DLL) \
108         TEGRA_MUX(EXTPERIPH1) \
109         TEGRA_MUX(EXTPERIPH2) \
110         TEGRA_MUX(EXTPERIPH3) \
111         TEGRA_MUX(GMI_ALT) \
112         TEGRA_MUX(HDA) \
113         TEGRA_MUX(HSI) \
114         TEGRA_MUX(I2C4) \
115         TEGRA_MUX(I2C5) \
116         TEGRA_MUX(I2CPWR) \
117         TEGRA_MUX(I2S0) \
118         TEGRA_MUX(I2S1) \
119         TEGRA_MUX(I2S2) \
120         TEGRA_MUX(I2S3) \
121         TEGRA_MUX(I2S4) \
122         TEGRA_MUX(NAND_ALT) \
123         TEGRA_MUX(POPSDIO4) \
124         TEGRA_MUX(POPSDMMC4) \
125         TEGRA_MUX(PWM0) \
126         TEGRA_MUX(PWM1) \
127         TEGRA_MUX(PWM2) \
128         TEGRA_MUX(PWM3) \
129         TEGRA_MUX(SATA) \
130         TEGRA_MUX(SPI5) \
131         TEGRA_MUX(SPI6) \
132         TEGRA_MUX(SYSCLK) \
133         TEGRA_MUX(VGP1) \
134         TEGRA_MUX(VGP2) \
135         TEGRA_MUX(VGP3) \
136         TEGRA_MUX(VGP4) \
137         TEGRA_MUX(VGP5) \
138         TEGRA_MUX(VGP6) \
139         /* End of Tegra3 MUX selectors */ \
140         TEGRA_MUX(USB) \
141         TEGRA_MUX(SOC) \
142         TEGRA_MUX(CPU) \
143         TEGRA_MUX(CLK) \
144         TEGRA_MUX(PWRON) \
145         TEGRA_MUX(PMI) \
146         TEGRA_MUX(CLDVFS) \
147         TEGRA_MUX(RESET_OUT_N) \
148         TEGRA_MUX(I2C6) \
149         TEGRA_MUX(DMIC0) \
150         TEGRA_MUX(DMIC1) \
151         TEGRA_MUX(DDR0) \
152         /* End of Tegra114 MUX selectors */
153
154 enum tegra_mux_func {
155 #define TEGRA_MUX(mux) TEGRA_MUX_##mux,
156         TEGRA_MUX_LIST
157 #undef  TEGRA_MUX
158         TEGRA_MUX_SAFE,         /* "Safe" default mux selector */
159         TEGRA_MAX_MUX,          /* Number of mux selectors */
160         TEGRA_MUX_TEGRA2_LAST = TEGRA_MUX_XIO,
161         TEGRA_MUX_TEGRA3_LAST = TEGRA_MUX_VGP6,
162
163         /* Mux selector aliases */
164         TEGRA_MUX_I2C    = TEGRA_MUX_I2C1,
165         TEGRA_MUX_SDMMC1 = TEGRA_MUX_SDIO1,
166         TEGRA_MUX_SDMMC2 = TEGRA_MUX_SDIO2,
167         TEGRA_MUX_SDMMC3 = TEGRA_MUX_SDIO3,
168         TEGRA_MUX_SDMMC4 = TEGRA_MUX_SDIO4,
169
170         /* Special mux selector values */
171         TEGRA_MUX_INVALID = 0x4000,
172         TEGRA_MUX_RSVD  = 0x8000,
173         TEGRA_MUX_RSVD0 = TEGRA_MUX_RSVD,
174         TEGRA_MUX_RSVD1 = 0x8001,
175         TEGRA_MUX_RSVD2 = 0x8002,
176         TEGRA_MUX_RSVD3 = 0x8003,
177         TEGRA_MUX_RSVD4 = 0x8004,
178 };
179
180 enum tegra_pullupdown {
181         TEGRA_PUPD_NORMAL = 0,
182         TEGRA_PUPD_PULL_DOWN,
183         TEGRA_PUPD_PULL_UP,
184 };
185
186 enum tegra_tristate {
187         TEGRA_TRI_NORMAL = 0,
188         TEGRA_TRI_TRISTATE = 1,
189 };
190
191 enum tegra_pin_io {
192         TEGRA_PIN_OUTPUT = 0,
193         TEGRA_PIN_INPUT = 1,
194 };
195
196 enum tegra_pin_lock {
197         TEGRA_PIN_LOCK_DEFAULT = 0,
198         TEGRA_PIN_LOCK_DISABLE,
199         TEGRA_PIN_LOCK_ENABLE,
200 };
201
202 enum tegra_pin_od {
203         TEGRA_PIN_OD_DEFAULT = 0,
204         TEGRA_PIN_OD_DISABLE,
205         TEGRA_PIN_OD_ENABLE,
206 };
207
208 enum tegra_pin_ioreset {
209         TEGRA_PIN_IO_RESET_DEFAULT = 0,
210         TEGRA_PIN_IO_RESET_DISABLE,
211         TEGRA_PIN_IO_RESET_ENABLE,
212 };
213
214 enum tegra_pin_rcv_sel {
215         TEGRA_PIN_RCV_SEL_DEFAULT = 0,
216         TEGRA_PIN_RCV_SEL_NORMAL,
217         TEGRA_PIN_RCV_SEL_HIGH,
218 };
219
220 enum tegra_vddio {
221         TEGRA_VDDIO_BB = 0,
222         TEGRA_VDDIO_LCD,
223         TEGRA_VDDIO_VI,
224         TEGRA_VDDIO_UART,
225         TEGRA_VDDIO_DDR,
226         TEGRA_VDDIO_NAND,
227         TEGRA_VDDIO_SYS,
228         TEGRA_VDDIO_AUDIO,
229         TEGRA_VDDIO_SD,
230         TEGRA_VDDIO_CAM,
231         TEGRA_VDDIO_GMI,
232         TEGRA_VDDIO_PEXCTL,
233         TEGRA_VDDIO_SDMMC1,
234         TEGRA_VDDIO_SDMMC3,
235         TEGRA_VDDIO_SDMMC4,
236 };
237
238 struct tegra_pingroup_config {
239         int pingroup;
240         enum tegra_mux_func     func;
241         enum tegra_pullupdown   pupd;
242         enum tegra_tristate     tristate;
243         enum tegra_pin_io       io;
244         enum tegra_pin_lock     lock;
245         enum tegra_pin_od       od;
246         enum tegra_pin_ioreset  ioreset;
247         enum tegra_pin_rcv_sel  rcv_sel;
248 };
249
250 enum tegra_slew {
251         TEGRA_SLEW_FASTEST = 0,
252         TEGRA_SLEW_FAST,
253         TEGRA_SLEW_SLOW,
254         TEGRA_SLEW_SLOWEST,
255         TEGRA_MAX_SLEW,
256 };
257
258 enum tegra_pull_strength {
259         TEGRA_PULL_0 = 0,
260         TEGRA_PULL_1,
261         TEGRA_PULL_2,
262         TEGRA_PULL_3,
263         TEGRA_PULL_4,
264         TEGRA_PULL_5,
265         TEGRA_PULL_6,
266         TEGRA_PULL_7,
267         TEGRA_PULL_8,
268         TEGRA_PULL_9,
269         TEGRA_PULL_10,
270         TEGRA_PULL_11,
271         TEGRA_PULL_12,
272         TEGRA_PULL_13,
273         TEGRA_PULL_14,
274         TEGRA_PULL_15,
275         TEGRA_PULL_16,
276         TEGRA_PULL_17,
277         TEGRA_PULL_18,
278         TEGRA_PULL_19,
279         TEGRA_PULL_20,
280         TEGRA_PULL_21,
281         TEGRA_PULL_22,
282         TEGRA_PULL_23,
283         TEGRA_PULL_24,
284         TEGRA_PULL_25,
285         TEGRA_PULL_26,
286         TEGRA_PULL_27,
287         TEGRA_PULL_28,
288         TEGRA_PULL_29,
289         TEGRA_PULL_30,
290         TEGRA_PULL_31,
291         TEGRA_PULL_32,
292         TEGRA_PULL_33,
293         TEGRA_PULL_34,
294         TEGRA_PULL_35,
295         TEGRA_PULL_36,
296         TEGRA_PULL_37,
297         TEGRA_PULL_38,
298         TEGRA_PULL_39,
299         TEGRA_PULL_40,
300         TEGRA_PULL_41,
301         TEGRA_PULL_42,
302         TEGRA_PULL_43,
303         TEGRA_PULL_44,
304         TEGRA_PULL_45,
305         TEGRA_PULL_46,
306         TEGRA_PULL_47,
307         TEGRA_PULL_48,
308         TEGRA_PULL_49,
309         TEGRA_PULL_50,
310         TEGRA_PULL_51,
311         TEGRA_PULL_52,
312         TEGRA_PULL_53,
313         TEGRA_PULL_54,
314         TEGRA_PULL_55,
315         TEGRA_PULL_56,
316         TEGRA_PULL_57,
317         TEGRA_PULL_58,
318         TEGRA_PULL_59,
319         TEGRA_PULL_60,
320         TEGRA_PULL_61,
321         TEGRA_PULL_62,
322         TEGRA_PULL_63,
323         TEGRA_PULL_64,
324         TEGRA_PULL_65,
325         TEGRA_PULL_66,
326         TEGRA_PULL_67,
327         TEGRA_PULL_68,
328         TEGRA_PULL_69,
329         TEGRA_PULL_70,
330         TEGRA_PULL_71,
331         TEGRA_PULL_72,
332         TEGRA_PULL_73,
333         TEGRA_PULL_74,
334         TEGRA_PULL_75,
335         TEGRA_PULL_76,
336         TEGRA_PULL_77,
337         TEGRA_PULL_78,
338         TEGRA_PULL_79,
339         TEGRA_PULL_80,
340         TEGRA_PULL_81,
341         TEGRA_PULL_82,
342         TEGRA_PULL_83,
343         TEGRA_PULL_84,
344         TEGRA_PULL_85,
345         TEGRA_PULL_86,
346         TEGRA_PULL_87,
347         TEGRA_PULL_88,
348         TEGRA_PULL_89,
349         TEGRA_PULL_90,
350         TEGRA_PULL_91,
351         TEGRA_PULL_92,
352         TEGRA_PULL_93,
353         TEGRA_PULL_94,
354         TEGRA_PULL_95,
355         TEGRA_PULL_96,
356         TEGRA_PULL_97,
357         TEGRA_PULL_98,
358         TEGRA_PULL_99,
359         TEGRA_PULL_100,
360         TEGRA_PULL_101,
361         TEGRA_PULL_102,
362         TEGRA_PULL_103,
363         TEGRA_PULL_104,
364         TEGRA_PULL_105,
365         TEGRA_PULL_106,
366         TEGRA_PULL_107,
367         TEGRA_PULL_108,
368         TEGRA_PULL_109,
369         TEGRA_PULL_110,
370         TEGRA_PULL_111,
371         TEGRA_PULL_112,
372         TEGRA_PULL_113,
373         TEGRA_PULL_114,
374         TEGRA_PULL_115,
375         TEGRA_PULL_116,
376         TEGRA_PULL_117,
377         TEGRA_PULL_118,
378         TEGRA_PULL_119,
379         TEGRA_PULL_120,
380         TEGRA_PULL_121,
381         TEGRA_PULL_122,
382         TEGRA_PULL_123,
383         TEGRA_PULL_124,
384         TEGRA_PULL_125,
385         TEGRA_PULL_126,
386         TEGRA_PULL_127,
387         TEGRA_MAX_PULL,
388 };
389
390 enum tegra_drive {
391         TEGRA_DRIVE_DIV_8 = 0,
392         TEGRA_DRIVE_DIV_4,
393         TEGRA_DRIVE_DIV_2,
394         TEGRA_DRIVE_DIV_1,
395         TEGRA_MAX_DRIVE,
396 };
397
398 enum tegra_drive_type {
399         TEGRA_DRIVE_TYPE_0 = 0,
400         TEGRA_DRIVE_TYPE_1,
401         TEGRA_DRIVE_TYPE_2,
402         TEGRA_DRIVE_TYPE_3,
403         TEGRA_MAX_DRIVE_TYPE,
404 };
405
406 enum tegra_hsm {
407         TEGRA_HSM_DISABLE = 0,
408         TEGRA_HSM_ENABLE,
409 };
410
411 enum tegra_schmitt {
412         TEGRA_SCHMITT_DISABLE = 0,
413         TEGRA_SCHMITT_ENABLE,
414 };
415
416 struct tegra_drive_pingroup_config {
417         int pingroup;
418         enum tegra_hsm hsm;
419         enum tegra_schmitt schmitt;
420         enum tegra_drive drive;
421         enum tegra_pull_strength pull_down;
422         enum tegra_pull_strength pull_up;
423         enum tegra_slew slew_rising;
424         enum tegra_slew slew_falling;
425         enum tegra_drive_type drive_type;
426 };
427
428 struct tegra_drive_pingroup_desc {
429         const char *name;
430         s16 reg_bank;
431         s16 reg;
432         u8 drvup_offset;
433         u16 drvup_mask;
434         u8 drvdown_offset;
435         u16 drvdown_mask;
436         u8 slewrise_offset;
437         u16 slewrise_mask;
438         u8 slewfall_offset;
439         u16 slewfall_mask;
440         u8 drvtype_valid;
441         u8 drvtype_offset;
442         u8 drvtype_mask;
443         const char *dev_id;
444 };
445
446 struct tegra_pingroup_desc {
447         const char *name;
448         int funcs[4];
449         int func_safe;
450         int vddio;
451         enum tegra_pin_io io_default;
452         s16 tri_bank;   /* Register bank the tri_reg exists within */
453         s16 mux_bank;   /* Register bank the mux_reg exists within */
454         s16 pupd_bank;  /* Register bank the pupd_reg exists within */
455         s16 tri_reg;    /* offset into the TRISTATE_REG_* register bank */
456         s16 mux_reg;    /* offset into the PIN_MUX_CTL_* register bank */
457         s16 pupd_reg;   /* offset into the PULL_UPDOWN_REG_* register bank */
458         s8 tri_bit;     /* offset into the TRISTATE_REG_* register bit */
459         s8 mux_bit;     /* offset into the PIN_MUX_CTL_* register bit */
460         s8 pupd_bit;    /* offset into the PULL_UPDOWN_REG_* register bit */
461         s8 lock_bit;    /* offset of the LOCK bit into mux register bit */
462         s8 od_bit;      /* offset of the OD bit into mux register bit */
463         s8 ioreset_bit; /* offset of the IO_RESET bit into mux register bit */
464         s8 rcv_sel_bit; /* offset of the RCV_SEL bit into mux register bit */
465         int gpionr;
466 };
467
468 u32 pg_readl(u32 bank, u32 reg);
469 void pg_writel(u32 val, u32 bank, u32 reg);
470
471 typedef void (*pinmux_init) (const struct tegra_pingroup_desc **pg,
472         int *pg_max, const struct tegra_drive_pingroup_desc **pgdrive,
473         int *pgdrive_max, const int **gpiomap, int *gpiomap_max);
474
475 void tegra20_pinmux_init(const struct tegra_pingroup_desc **pg, int *pg_max,
476         const struct tegra_drive_pingroup_desc **pgdrive, int *pgdrive_max,
477         const int **gpiomap, int *gpiomap_max);
478
479 void tegra30_pinmux_init(const struct tegra_pingroup_desc **pg, int *pg_max,
480         const struct tegra_drive_pingroup_desc **pgdrive, int *pgdrive_max,
481         const int **gpiomap, int *gpiomap_max);
482
483 void tegra11x_pinmux_init(const struct tegra_pingroup_desc **pg, int *pg_max,
484         const struct tegra_drive_pingroup_desc **pgdrive, int *pgdrive_max,
485         const int **gpiomap, int *gpiomap_max);
486
487 void tegra14x_pinmux_init(const struct tegra_pingroup_desc **pg, int *pg_max,
488         const struct tegra_drive_pingroup_desc **pgdrive, int *pgdrive_max,
489         const int **gpiomap, int *gpiomap_max);
490
491 int tegra_pinmux_get_func(int pg);
492 int tegra_pinmux_set_tristate(int pg, enum tegra_tristate tristate);
493 int tegra_pinmux_set_io(int pg, enum tegra_pin_io input);
494 int tegra_pinmux_get_pingroup(int gpio_nr);
495 int tegra_pinmux_set_pullupdown(int pg, enum tegra_pullupdown pupd);
496
497 void tegra_pinmux_config_table(const struct tegra_pingroup_config *config,
498         int len);
499
500 void tegra_drive_pinmux_config_table(struct tegra_drive_pingroup_config *config,
501         int len);
502
503 int tegra_drive_pinmux_set_pull_down(int pg,
504         enum tegra_pull_strength pull_down);
505
506 int tegra_drive_pinmux_set_pull_up(int pg, enum tegra_pull_strength pull_up);
507
508 struct device;
509 int tegra_drive_get_pingroup(struct device *dev);
510
511 void tegra_pinmux_set_safe_pinmux_table(const struct tegra_pingroup_config *config,
512         int len);
513 void tegra_pinmux_config_pinmux_table(const struct tegra_pingroup_config *config,
514         int len);
515 void tegra_pinmux_config_tristate_table(const struct tegra_pingroup_config *config,
516         int len, enum tegra_tristate tristate);
517 void tegra_pinmux_config_pullupdown_table(const struct tegra_pingroup_config *config,
518         int len, enum tegra_pullupdown pupd);
519 #endif