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