c7fb091cdb593b716c4eceaa0433db73d6fdf643
[linux-3.10.git] / arch / arm / mach-tegra / board-pluto-pinmux.c
1 /*
2  * arch/arm/mach-tegra/board-pluto-pinmux.c
3  *
4  * Copyright (C) 2012-2013, NVIDIA Corporation. All rights reserved.
5  *
6  * This software is licensed under the terms of the GNU General Public
7  * License version 2, as published by the Free Software Foundation, and
8  * may be copied, distributed, and modified under those terms.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  */
16
17 #include <linux/kernel.h>
18 #include <linux/init.h>
19 #include <linux/gpio.h>
20 #include <mach/pinmux.h>
21 #include <mach/gpio-tegra.h>
22 #include "board.h"
23 #include "board-pluto.h"
24 #include "devices.h"
25 #include "gpio-names.h"
26
27 #include <mach/pinmux-t11.h>
28
29 static __initdata struct tegra_drive_pingroup_config pluto_drive_pinmux[] = {
30         /* DEFAULT_DRIVE(<pin_group>), */
31         SET_DRIVE(DAP2, DISABLE, ENABLE, DIV_1, 31, 31, FASTEST, FASTEST),
32
33         /* SDMMC1 */
34         SET_DRIVE(SDIO1, ENABLE, DISABLE, DIV_1, 36, 20, SLOW, SLOW),
35
36         /* SDMMC3 */
37         SET_DRIVE(SDIO3, ENABLE, DISABLE, DIV_1, 22, 36, FASTEST, FASTEST),
38
39         /* SDMMC4 */
40         SET_DRIVE_WITH_TYPE(GMA, ENABLE, DISABLE, DIV_1, 2, 2, FASTEST,
41                                                                 FASTEST, 1),
42 };
43
44 /* Initially setting all used GPIO's to non-TRISTATE */
45 static __initdata struct tegra_pingroup_config pluto_pinmux_set_nontristate[] = {
46         DEFAULT_PINMUX(GPIO_X4_AUD,    RSVD,    PULL_DOWN,    NORMAL,    OUTPUT),
47         DEFAULT_PINMUX(GPIO_X5_AUD,    RSVD,    PULL_UP,      NORMAL,    INPUT),
48         DEFAULT_PINMUX(GPIO_X6_AUD,    RSVD3,   PULL_UP,      NORMAL,    INPUT),
49         DEFAULT_PINMUX(GPIO_X7_AUD,    RSVD,    PULL_DOWN,    NORMAL,    OUTPUT),
50         DEFAULT_PINMUX(GPIO_W2_AUD,    RSVD1,   PULL_UP,      NORMAL,    INPUT),
51         DEFAULT_PINMUX(GPIO_W3_AUD,    SPI6,    PULL_UP,      NORMAL,    INPUT),
52         DEFAULT_PINMUX(GPIO_X1_AUD,    RSVD3,   PULL_DOWN,    NORMAL,    INPUT),
53         DEFAULT_PINMUX(GPIO_X3_AUD,    RSVD3,   PULL_UP,      NORMAL,    INPUT),
54
55         DEFAULT_PINMUX(GPIO_PV0,      RSVD3,    NORMAL,      NORMAL,    INPUT),
56         DEFAULT_PINMUX(GPIO_PV1,      RSVD,     NORMAL,      NORMAL,    INPUT),
57         DEFAULT_PINMUX(ULPI_DATA0,    ULPI,     NORMAL,      NORMAL,    OUTPUT),
58         DEFAULT_PINMUX(ULPI_DATA1,    ULPI,     NORMAL,      NORMAL,    OUTPUT),
59         DEFAULT_PINMUX(ULPI_DATA2,    ULPI,     NORMAL,      NORMAL,    OUTPUT),
60         DEFAULT_PINMUX(ULPI_DATA3,    ULPI,     NORMAL,      NORMAL,    INPUT),
61         DEFAULT_PINMUX(ULPI_DATA4,    ULPI,     NORMAL,      NORMAL,    INPUT),
62         DEFAULT_PINMUX(ULPI_DATA5,    ULPI,     NORMAL,      NORMAL,    OUTPUT),
63         DEFAULT_PINMUX(ULPI_DATA6,    ULPI,     NORMAL,      NORMAL,    INPUT),
64         DEFAULT_PINMUX(ULPI_DATA7,    ULPI,     NORMAL,      NORMAL,    OUTPUT),
65
66         DEFAULT_PINMUX(GPIO_PBB3,     RSVD3,    PULL_DOWN,    NORMAL,    OUTPUT),
67         DEFAULT_PINMUX(GPIO_PBB5,     RSVD3,    PULL_DOWN,    NORMAL,    OUTPUT),
68         DEFAULT_PINMUX(GPIO_PBB6,     RSVD3,    PULL_DOWN,    NORMAL,    OUTPUT),
69         DEFAULT_PINMUX(GPIO_PBB7,     RSVD3,    PULL_DOWN,    NORMAL,    OUTPUT),
70         DEFAULT_PINMUX(GPIO_PCC1,     RSVD3,    PULL_DOWN,    NORMAL,    OUTPUT),
71         DEFAULT_PINMUX(GPIO_PCC2,     RSVD3,    PULL_DOWN,    NORMAL,    INPUT),
72
73         DEFAULT_PINMUX(GMI_AD1,     GMI,      NORMAL,       NORMAL,    OUTPUT),
74         DEFAULT_PINMUX(GMI_AD10,    GMI,      PULL_DOWN,    NORMAL,    OUTPUT),
75         DEFAULT_PINMUX(GMI_AD12,    GMI,      PULL_UP,      NORMAL,    OUTPUT),
76         DEFAULT_PINMUX(GMI_AD13,    GMI,      PULL_DOWN,    NORMAL,    OUTPUT),
77         DEFAULT_PINMUX(GMI_AD14,    GMI,      PULL_UP,      NORMAL,    OUTPUT),
78         DEFAULT_PINMUX(GMI_AD2,     GMI,      NORMAL,       NORMAL,    INPUT),
79         DEFAULT_PINMUX(GMI_AD3,     GMI,      NORMAL,       NORMAL,    INPUT),
80         DEFAULT_PINMUX(GMI_AD8,     GMI,      PULL_DOWN,    NORMAL,    OUTPUT),
81         DEFAULT_PINMUX(GMI_ADV_N,   GMI,      PULL_UP,      NORMAL,    INPUT),
82         DEFAULT_PINMUX(GMI_CLK,     GMI,      PULL_DOWN,    NORMAL,    OUTPUT),
83         DEFAULT_PINMUX(GMI_CS0_N,   GMI,      PULL_UP,      NORMAL,    INPUT),
84         DEFAULT_PINMUX(GMI_CS3_N,   GMI,      PULL_UP,      NORMAL,    OUTPUT),
85         DEFAULT_PINMUX(GMI_CS4_N,   GMI,      PULL_UP,      NORMAL,    INPUT),
86         DEFAULT_PINMUX(GMI_CS7_N,   GMI,      PULL_UP,      NORMAL,    INPUT),
87         DEFAULT_PINMUX(GMI_IORDY,   GMI,      PULL_UP,      NORMAL,    INPUT),
88         DEFAULT_PINMUX(GMI_RST_N,   GMI,      PULL_DOWN,    NORMAL,    INPUT),
89
90         DEFAULT_PINMUX(SDMMC1_WP_N, SDMMC1,      PULL_UP,      NORMAL,    OUTPUT),
91         DEFAULT_PINMUX(CLK2_REQ,    RSVD3,     NORMAL,       NORMAL,    OUTPUT),
92
93         DEFAULT_PINMUX(KB_COL3,     KBC,      PULL_UP,      NORMAL,    INPUT),
94         DEFAULT_PINMUX(KB_COL4,     KBC,      PULL_UP,      NORMAL,    INPUT),
95         DEFAULT_PINMUX(KB_COL6,     KBC,      PULL_UP,      NORMAL,    OUTPUT),
96         DEFAULT_PINMUX(KB_COL7,     KBC,      PULL_UP,      NORMAL,    OUTPUT),
97         DEFAULT_PINMUX(KB_ROW3,     KBC,      PULL_DOWN,    NORMAL,    INPUT),
98         DEFAULT_PINMUX(KB_ROW4,     KBC,      PULL_DOWN,    NORMAL,    INPUT),
99         DEFAULT_PINMUX(KB_ROW5,     KBC,      PULL_DOWN,    NORMAL,    OUTPUT),
100         DEFAULT_PINMUX(KB_ROW6,     KBC,      PULL_DOWN,    NORMAL,    OUTPUT),
101         DEFAULT_PINMUX(KB_ROW7,     KBC,      PULL_UP,      NORMAL,    INPUT),
102         DEFAULT_PINMUX(KB_ROW8,     KBC,      PULL_DOWN,    NORMAL,    INPUT),
103
104         DEFAULT_PINMUX(CLK3_REQ,    RSVD3,    NORMAL,      NORMAL,     OUTPUT),
105         DEFAULT_PINMUX(GPIO_PU4,    PWM1,     NORMAL,      NORMAL,     OUTPUT),
106         DEFAULT_PINMUX(GPIO_PU5,    PWM2,     NORMAL,      NORMAL,     INPUT),
107         DEFAULT_PINMUX(GPIO_PU6,    PWM3,     NORMAL,      NORMAL,     INPUT),
108
109         DEFAULT_PINMUX(HDMI_INT,    RSVD,      PULL_DOWN,    NORMAL,    INPUT),
110 };
111
112 #include "board-pluto-pinmux-t11x.h"
113
114 #ifdef CONFIG_PM_SLEEP
115 /* pinmux settings during low power mode for power saving purpose */
116 static struct tegra_pingroup_config pluto_sleep_pinmux[] = {
117         DEFAULT_PINMUX(GMI_AD14,    DTV,     NORMAL,    TRISTATE,  INPUT),
118         DEFAULT_PINMUX(GMI_AD15,    DTV,     NORMAL,    TRISTATE,  INPUT),
119         DEFAULT_PINMUX(GMI_AD8,     DTV,     NORMAL,    TRISTATE,  INPUT),
120         DEFAULT_PINMUX(GMI_WAIT,    DTV,     NORMAL,    TRISTATE,  INPUT),
121         DEFAULT_PINMUX(GMI_AD6,     SPI4,    NORMAL,    NORMAL,    OUTPUT),
122         DEFAULT_PINMUX(GMI_AD7,     SPI4,    NORMAL,    NORMAL,    INPUT),
123         DEFAULT_PINMUX(GMI_CS6_N,   SPI4,    NORMAL,    NORMAL,    OUTPUT),
124         DEFAULT_PINMUX(GMI_WR_N,    SPI4,    NORMAL,    NORMAL,    OUTPUT),
125         DEFAULT_PINMUX(GMI_OE_N,    SOC,     NORMAL,    TRISTATE,  INPUT),
126         DEFAULT_PINMUX(GMI_AD10,    GMI,     NORMAL,    NORMAL,    OUTPUT),
127         DEFAULT_PINMUX(GMI_AD12,    GMI,     NORMAL,    NORMAL,    OUTPUT),
128         DEFAULT_PINMUX(GMI_AD13,    GMI,     NORMAL,    NORMAL,    OUTPUT),
129         DEFAULT_PINMUX(GMI_AD14,    GMI,     NORMAL,    NORMAL,    OUTPUT),
130         DEFAULT_PINMUX(GMI_AD8,     GMI,     NORMAL,    NORMAL,    OUTPUT),
131         DEFAULT_PINMUX(GMI_ADV_N,   GMI,     NORMAL,    NORMAL,    INPUT),
132         DEFAULT_PINMUX(GMI_CLK,     GMI,     NORMAL,    NORMAL,    OUTPUT),
133         DEFAULT_PINMUX(GMI_CS0_N,   GMI,     NORMAL,    NORMAL,    INPUT),
134         DEFAULT_PINMUX(GMI_CS3_N,   GMI,     NORMAL,    NORMAL,    OUTPUT),
135         DEFAULT_PINMUX(GMI_CS4_N,   GMI,     NORMAL,    NORMAL,    INPUT),
136         DEFAULT_PINMUX(GMI_CS7_N,   GMI,     NORMAL,    NORMAL,    INPUT),
137         DEFAULT_PINMUX(GMI_IORDY,   GMI,     NORMAL,    NORMAL,    INPUT),
138         DEFAULT_PINMUX(GMI_RST_N,   GMI,     NORMAL,    NORMAL,    INPUT),
139
140         /* VDDIO_HV_AP */
141         DEFAULT_PINMUX(OWR,  OWR,  NORMAL, TRISTATE, INPUT),
142         CEC_PINMUX(HDMI_CEC, CEC,  NORMAL, TRISTATE, INPUT, DISABLE, ENABLE),
143         I2C_PINMUX(DDC_SCL,  I2C4, NORMAL, TRISTATE, INPUT, DEFAULT, DEFAULT),
144         I2C_PINMUX(DDC_SDA,  I2C4, NORMAL, TRISTATE, INPUT, DEFAULT, DEFAULT),
145         USB_PINMUX(USB_VBUS_EN0, RSVD3, NORMAL, NORMAL, OUTPUT, DISABLE, DISABLE),
146 };
147 #endif
148
149 /* THIS IS FOR EXPERIMENTAL OR WORKAROUND PURPOSES. ANYTHING INSIDE THIS TABLE
150  * SHOULD BE CONSIDERED TO BE PUSHED TO PINMUX SPREADSHEET FOR CONSISTENCY
151  */
152 static __initdata struct tegra_pingroup_config manual_config_pinmux[] = {
153 };
154
155 static void __init pluto_gpio_init_configure(void)
156 {
157         int len;
158         int i;
159         struct gpio_init_pin_info *pins_info;
160
161         len = ARRAY_SIZE(init_gpio_mode_pluto_common);
162         pins_info = init_gpio_mode_pluto_common;
163
164         for (i = 0; i < len; ++i) {
165                 tegra_gpio_init_configure(pins_info->gpio_nr,
166                         pins_info->is_input, pins_info->value);
167                 pins_info++;
168         }
169 }
170
171 int __init pluto_pinmux_init(void)
172 {
173         tegra_pinmux_config_table(pluto_pinmux_set_nontristate,
174                                         ARRAY_SIZE(pluto_pinmux_set_nontristate));
175         pluto_gpio_init_configure();
176
177         tegra_pinmux_config_table(pluto_pinmux_common, ARRAY_SIZE(pluto_pinmux_common));
178         tegra_drive_pinmux_config_table(pluto_drive_pinmux,
179                                         ARRAY_SIZE(pluto_drive_pinmux));
180         tegra_pinmux_config_table(unused_pins_lowpower,
181                 ARRAY_SIZE(unused_pins_lowpower));
182         tegra_pinmux_config_table(manual_config_pinmux,
183                 ARRAY_SIZE(manual_config_pinmux));
184         return 0;
185 }
186
187 void pluto_pinmux_suspend(void)
188 {
189 #ifdef CONFIG_PM_SLEEP
190         tegra_pinmux_config_table(pluto_sleep_pinmux,
191                         ARRAY_SIZE(pluto_sleep_pinmux));
192 #endif
193 }