diff options
author | Linus Walleij <linus.walleij@linaro.org> | 2012-05-02 18:44:52 -0400 |
---|---|---|
committer | Linus Walleij <linus.walleij@linaro.org> | 2012-05-11 05:14:17 -0400 |
commit | ed781d395f85192fc9debb33ae5b45e7111eacee (patch) | |
tree | 4330a6c1a8980ae82f563882e46d4955b10ee1aa /arch/arm/mach-ux500/board-mop500-pins.c | |
parent | 65697e6b1a7d73d82d114377b448e89b9788e26b (diff) |
ARM: ux500: switch over to Nomadik pinctrl driver
This converts the Ux500 family to use the pinctrl driver for
configuring pins.
Acked-by: Stephen Warren <swarren@wwwdotorg.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'arch/arm/mach-ux500/board-mop500-pins.c')
-rw-r--r-- | arch/arm/mach-ux500/board-mop500-pins.c | 819 |
1 files changed, 396 insertions, 423 deletions
diff --git a/arch/arm/mach-ux500/board-mop500-pins.c b/arch/arm/mach-ux500/board-mop500-pins.c index df5b190d331c..28c456c2906c 100644 --- a/arch/arm/mach-ux500/board-mop500-pins.c +++ b/arch/arm/mach-ux500/board-mop500-pins.c | |||
@@ -8,6 +8,7 @@ | |||
8 | #include <linux/init.h> | 8 | #include <linux/init.h> |
9 | #include <linux/bug.h> | 9 | #include <linux/bug.h> |
10 | #include <linux/string.h> | 10 | #include <linux/string.h> |
11 | #include <linux/pinctrl/machine.h> | ||
11 | 12 | ||
12 | #include <asm/mach-types.h> | 13 | #include <asm/mach-types.h> |
13 | #include <plat/pincfg.h> | 14 | #include <plat/pincfg.h> |
@@ -26,399 +27,390 @@ enum custom_pin_cfg_t { | |||
26 | 27 | ||
27 | static enum custom_pin_cfg_t pinsfor; | 28 | static enum custom_pin_cfg_t pinsfor; |
28 | 29 | ||
29 | static pin_cfg_t mop500_pins_common[] = { | 30 | /* These simply sets bias for pins */ |
30 | /* uMSP0 */ | 31 | #define BIAS(a,b) static unsigned long a[] = { b } |
31 | GPIO12_MSP0_TXD, | 32 | |
32 | GPIO13_MSP0_TFS, | 33 | BIAS(pd, PIN_PULL_DOWN); |
33 | GPIO14_MSP0_TCK, | 34 | BIAS(slpm_gpio_nopull, PIN_SLPM_GPIO|PIN_SLPM_INPUT_NOPULL); |
34 | GPIO15_MSP0_RXD, | 35 | BIAS(in_nopull, PIN_INPUT_NOPULL); |
35 | 36 | BIAS(in_pu, PIN_INPUT_PULLUP); | |
36 | /* MSP2: HDMI */ | 37 | BIAS(in_pd, PIN_INPUT_PULLDOWN); |
37 | GPIO193_MSP2_TXD | PIN_INPUT_PULLDOWN, | 38 | BIAS(in_pd_slpm_in_pu, PIN_INPUT_PULLDOWN|PIN_SLPM_INPUT_PULLUP); |
38 | GPIO194_MSP2_TCK | PIN_INPUT_PULLDOWN, | 39 | BIAS(in_pu_slpm_out_lo, PIN_INPUT_PULLUP|PIN_SLPM_OUTPUT_LOW); |
39 | GPIO195_MSP2_TFS | PIN_INPUT_PULLDOWN, | 40 | BIAS(out_hi, PIN_OUTPUT_HIGH); |
40 | GPIO196_MSP2_RXD | PIN_OUTPUT_LOW, | 41 | BIAS(out_lo, PIN_OUTPUT_LOW); |
41 | 42 | /* These also force them into GPIO mode */ | |
42 | /* LCD TE0 */ | 43 | BIAS(gpio_in_pu, PIN_INPUT_PULLUP|PIN_GPIOMODE_ENABLED); |
43 | GPIO68_LCD_VSI0 | PIN_INPUT_PULLUP, | 44 | BIAS(gpio_in_pd, PIN_INPUT_PULLDOWN|PIN_GPIOMODE_ENABLED); |
44 | 45 | BIAS(gpio_in_pu_slpm_gpio_nopull, PIN_INPUT_PULLUP|PIN_GPIOMODE_ENABLED|PIN_SLPM_GPIO|PIN_SLPM_INPUT_NOPULL); | |
45 | /* Touch screen INTERFACE */ | 46 | BIAS(gpio_in_pd_slpm_gpio_nopull, PIN_INPUT_PULLDOWN|PIN_GPIOMODE_ENABLED|PIN_SLPM_GPIO|PIN_SLPM_INPUT_NOPULL); |
46 | GPIO84_GPIO | PIN_INPUT_PULLUP, /* TOUCH_INT1 */ | 47 | BIAS(gpio_out_hi, PIN_OUTPUT_HIGH|PIN_GPIOMODE_ENABLED); |
47 | 48 | BIAS(gpio_out_lo, PIN_OUTPUT_LOW|PIN_GPIOMODE_ENABLED); | |
48 | /* STMPE1601/tc35893 keypad IRQ */ | 49 | |
49 | GPIO218_GPIO | PIN_INPUT_PULLUP, | 50 | /* We use these to define hog settings that are always done on boot */ |
50 | 51 | #define DB8500_MUX_HOG(group,func) \ | |
51 | /* UART */ | 52 | PIN_MAP_MUX_GROUP_HOG_DEFAULT("pinctrl-db8500", group, func) |
52 | /* uart-0 pins gpio configuration should be | 53 | #define DB8500_PIN_HOG(pin,conf) \ |
53 | * kept intact to prevent glitch in tx line | 54 | PIN_MAP_CONFIGS_PIN_HOG_DEFAULT("pinctrl-db8500", pin, conf) |
54 | * when tty dev is opened. Later these pins | 55 | |
56 | /* These are default states associated with device and changed runtime */ | ||
57 | #define DB8500_MUX(group,func,dev) \ | ||
58 | PIN_MAP_MUX_GROUP_DEFAULT(dev, "pinctrl-db8500", group, func) | ||
59 | #define DB8500_PIN(pin,conf,dev) \ | ||
60 | PIN_MAP_CONFIGS_PIN_DEFAULT(dev, "pinctrl-db8500", pin, conf) | ||
61 | |||
62 | /* Pin control settings */ | ||
63 | static struct pinctrl_map __initdata mop500_family_pinmap[] = { | ||
64 | /* | ||
65 | * uMSP0, mux in 4 pins, regular placement of RX/TX | ||
66 | * explicitly set the pins to no pull | ||
67 | */ | ||
68 | DB8500_MUX_HOG("msp0txrx_a_1", "msp0"), | ||
69 | DB8500_MUX_HOG("msp0tfstck_a_1", "msp0"), | ||
70 | DB8500_PIN_HOG("GPIO12_AC4", in_nopull), /* TXD */ | ||
71 | DB8500_PIN_HOG("GPIO15_AC3", in_nopull), /* RXD */ | ||
72 | DB8500_PIN_HOG("GPIO13_AF3", in_nopull), /* TFS */ | ||
73 | DB8500_PIN_HOG("GPIO14_AE3", in_nopull), /* TCK */ | ||
74 | /* MSP2 for HDMI, pull down TXD, TCK, TFS */ | ||
75 | DB8500_MUX_HOG("msp2_a_1", "msp2"), | ||
76 | DB8500_PIN_HOG("GPIO193_AH27", in_pd), /* TXD */ | ||
77 | DB8500_PIN_HOG("GPIO194_AF27", in_pd), /* TCK */ | ||
78 | DB8500_PIN_HOG("GPIO195_AG28", in_pd), /* TFS */ | ||
79 | DB8500_PIN_HOG("GPIO196_AG26", out_lo), /* RXD */ | ||
80 | /* | ||
81 | * LCD, set TE0 (using LCD VSI0) and D14 (touch screen interrupt) to | ||
82 | * pull-up | ||
83 | * TODO: is this really correct? Snowball doesn't have a LCD. | ||
84 | */ | ||
85 | DB8500_MUX_HOG("lcdvsi0_a_1", "lcd"), | ||
86 | DB8500_PIN_HOG("GPIO68_E1", in_pu), | ||
87 | DB8500_PIN_HOG("GPIO84_C2", gpio_in_pu), | ||
88 | /* | ||
89 | * STMPE1601/tc35893 keypad IRQ GPIO 218 | ||
90 | * TODO: set for snowball and HREF really?? | ||
91 | */ | ||
92 | DB8500_PIN_HOG("GPIO218_AH11", gpio_in_pu), | ||
93 | /* | ||
94 | * UART0, we do not mux in u0 here. | ||
95 | * uart-0 pins gpio configuration should be kept intact to prevent | ||
96 | * a glitch in tx line when the tty dev is opened. Later these pins | ||
55 | * are configured to uart mop500_pins_uart0 | 97 | * are configured to uart mop500_pins_uart0 |
56 | * | ||
57 | * It will be replaced with uart configuration | ||
58 | * once the issue is solved. | ||
59 | */ | 98 | */ |
60 | GPIO0_GPIO | PIN_INPUT_PULLUP, | 99 | DB8500_PIN_HOG("GPIO0_AJ5", in_pu), /* CTS */ |
61 | GPIO1_GPIO | PIN_OUTPUT_HIGH, | 100 | DB8500_PIN_HOG("GPIO1_AJ3", out_hi), /* RTS */ |
62 | GPIO2_GPIO | PIN_INPUT_PULLUP, | 101 | DB8500_PIN_HOG("GPIO2_AH4", in_pu), /* RXD */ |
63 | GPIO3_GPIO | PIN_OUTPUT_HIGH, | 102 | DB8500_PIN_HOG("GPIO3_AH3", out_hi), /* TXD */ |
64 | 103 | /* | |
65 | GPIO29_U2_RXD | PIN_INPUT_PULLUP, | 104 | * Mux in UART2 on altfunction C and set pull-ups. |
66 | GPIO30_U2_TXD | PIN_OUTPUT_HIGH, | 105 | * TODO: is this used on U8500 variants and Snowball really? |
67 | GPIO31_U2_CTSn | PIN_INPUT_PULLUP, | 106 | * The setting on GPIO31 conflicts with magnetometer use on hrefv60 |
68 | GPIO32_U2_RTSn | PIN_OUTPUT_HIGH, | 107 | */ |
108 | DB8500_MUX_HOG("u2rxtx_c_1", "u2"), | ||
109 | DB8500_MUX_HOG("u2ctsrts_c_1", "u2"), | ||
110 | DB8500_PIN_HOG("GPIO29_W2", in_pu), /* RXD */ | ||
111 | DB8500_PIN_HOG("GPIO30_W3", out_hi), /* TXD */ | ||
112 | DB8500_PIN_HOG("GPIO31_V3", in_pu), /* CTS */ | ||
113 | DB8500_PIN_HOG("GPIO32_V2", out_hi), /* RTS */ | ||
114 | /* | ||
115 | * The following pin sets were known as "runtime pins" before being | ||
116 | * converted to the pinctrl model. Here we model them as "default" | ||
117 | * states. | ||
118 | */ | ||
119 | /* Mux in LCD data lines 8 thru 11 and LCDA CLK for MCDE TVOUT */ | ||
120 | DB8500_MUX("lcd_d8_d11_a_1", "lcd", "mcde-tvout"), | ||
121 | DB8500_MUX("lcdaclk_b_1", "lcda", "mcde-tvout"), | ||
122 | /* Mux in LCD VSI1 and pull it up for MCDE HDMI output */ | ||
123 | DB8500_MUX("lcdvsi1_a_1", "lcd", "av8100-hdmi"), | ||
124 | /* Mux in I2C blocks, put pins into GPIO in sleepmode no pull-up */ | ||
125 | DB8500_MUX("i2c0_a_1", "i2c0", "nmk-i2c.0"), | ||
126 | DB8500_PIN("GPIO147_C15", slpm_gpio_nopull, "nmk-i2c.0"), | ||
127 | DB8500_PIN("GPIO148_B16", slpm_gpio_nopull, "nmk-i2c.0"), | ||
128 | DB8500_MUX("i2c1_b_2", "i2c1", "nmk-i2c.1"), | ||
129 | DB8500_PIN("GPIO16_AD3", slpm_gpio_nopull, "nmk-i2c.1"), | ||
130 | DB8500_PIN("GPIO17_AD4", slpm_gpio_nopull, "nmk-i2c.1"), | ||
131 | DB8500_MUX("i2c2_b_2", "i2c2", "nmk-i2c.2"), | ||
132 | DB8500_PIN("GPIO10_AF5", slpm_gpio_nopull, "nmk-i2c.2"), | ||
133 | DB8500_PIN("GPIO11_AG4", slpm_gpio_nopull, "nmk-i2c.2"), | ||
134 | DB8500_MUX("i2c3_c_2", "i2c3", "nmk-i2c.3"), | ||
135 | DB8500_PIN("GPIO229_AG7", slpm_gpio_nopull, "nmk-i2c.3"), | ||
136 | DB8500_PIN("GPIO230_AF7", slpm_gpio_nopull, "nmk-i2c.3"), | ||
137 | /* Mux in SDI0 (here called MC0) used for removable MMC/SD/SDIO cards */ | ||
138 | DB8500_MUX("mc0_a_1", "mc0", "sdi0"), | ||
139 | DB8500_PIN("GPIO18_AC2", out_hi, "sdi0"), /* CMDDIR */ | ||
140 | DB8500_PIN("GPIO19_AC1", out_hi, "sdi0"), /* DAT0DIR */ | ||
141 | DB8500_PIN("GPIO20_AB4", out_hi, "sdi0"), /* DAT2DIR */ | ||
142 | DB8500_PIN("GPIO22_AA3", in_nopull, "sdi0"), /* FBCLK */ | ||
143 | DB8500_PIN("GPIO23_AA4", out_lo, "sdi0"), /* CLK */ | ||
144 | DB8500_PIN("GPIO24_AB2", in_pu, "sdi0"), /* CMD */ | ||
145 | DB8500_PIN("GPIO25_Y4", in_pu, "sdi0"), /* DAT0 */ | ||
146 | DB8500_PIN("GPIO26_Y2", in_pu, "sdi0"), /* DAT1 */ | ||
147 | DB8500_PIN("GPIO27_AA2", in_pu, "sdi0"), /* DAT2 */ | ||
148 | DB8500_PIN("GPIO28_AA1", in_pu, "sdi0"), /* DAT3 */ | ||
149 | /* Mux in SDI1 (here called MC1) used for SDIO for CW1200 WLAN */ | ||
150 | DB8500_MUX("mc1_a_1", "mc1", "sdi1"), | ||
151 | DB8500_PIN("GPIO208_AH16", out_lo, "sdi1"), /* CLK */ | ||
152 | DB8500_PIN("GPIO209_AG15", in_nopull, "sdi1"), /* FBCLK */ | ||
153 | DB8500_PIN("GPIO210_AJ15", in_pu, "sdi1"), /* CMD */ | ||
154 | DB8500_PIN("GPIO211_AG14", in_pu, "sdi1"), /* DAT0 */ | ||
155 | DB8500_PIN("GPIO212_AF13", in_pu, "sdi1"), /* DAT1 */ | ||
156 | DB8500_PIN("GPIO213_AG13", in_pu, "sdi1"), /* DAT2 */ | ||
157 | DB8500_PIN("GPIO214_AH15", in_pu, "sdi1"), /* DAT3 */ | ||
158 | /* Mux in SDI2 (here called MC2) used for for PoP eMMC */ | ||
159 | DB8500_MUX("mc2_a_1", "mc2", "sdi2"), | ||
160 | DB8500_PIN("GPIO128_A5", out_lo, "sdi2"), /* CLK */ | ||
161 | DB8500_PIN("GPIO129_B4", in_pu, "sdi2"), /* CMD */ | ||
162 | DB8500_PIN("GPIO130_C8", in_nopull, "sdi2"), /* FBCLK */ | ||
163 | DB8500_PIN("GPIO131_A12", in_pu, "sdi2"), /* DAT0 */ | ||
164 | DB8500_PIN("GPIO132_C10", in_pu, "sdi2"), /* DAT1 */ | ||
165 | DB8500_PIN("GPIO133_B10", in_pu, "sdi2"), /* DAT2 */ | ||
166 | DB8500_PIN("GPIO134_B9", in_pu, "sdi2"), /* DAT3 */ | ||
167 | DB8500_PIN("GPIO135_A9", in_pu, "sdi2"), /* DAT4 */ | ||
168 | DB8500_PIN("GPIO136_C7", in_pu, "sdi2"), /* DAT5 */ | ||
169 | DB8500_PIN("GPIO137_A7", in_pu, "sdi2"), /* DAT6 */ | ||
170 | DB8500_PIN("GPIO138_C5", in_pu, "sdi2"), /* DAT7 */ | ||
171 | /* Mux in SDI4 (here called MC4) used for for PCB-mounted eMMC */ | ||
172 | DB8500_MUX("mc4_a_1", "mc4", "sdi4"), | ||
173 | DB8500_PIN("GPIO197_AH24", in_pu, "sdi4"), /* DAT3 */ | ||
174 | DB8500_PIN("GPIO198_AG25", in_pu, "sdi4"), /* DAT2 */ | ||
175 | DB8500_PIN("GPIO199_AH23", in_pu, "sdi4"), /* DAT1 */ | ||
176 | DB8500_PIN("GPIO200_AH26", in_pu, "sdi4"), /* DAT0 */ | ||
177 | DB8500_PIN("GPIO201_AF24", in_pu, "sdi4"), /* CMD */ | ||
178 | DB8500_PIN("GPIO202_AF25", in_nopull, "sdi4"), /* FBCLK */ | ||
179 | DB8500_PIN("GPIO203_AE23", out_lo, "sdi4"), /* CLK */ | ||
180 | DB8500_PIN("GPIO204_AF23", in_pu, "sdi4"), /* DAT7 */ | ||
181 | DB8500_PIN("GPIO205_AG23", in_pu, "sdi4"), /* DAT6 */ | ||
182 | DB8500_PIN("GPIO206_AG24", in_pu, "sdi4"), /* DAT5 */ | ||
183 | DB8500_PIN("GPIO207_AJ23", in_pu, "sdi4"), /* DAT4 */ | ||
184 | /* Mux in USB pins, drive STP high */ | ||
185 | DB8500_MUX("usb_a_1", "usb", "musb-ux500.0"), | ||
186 | DB8500_PIN("GPIO257_AE29", out_hi, "musb-ux500.0"), /* STP */ | ||
187 | /* Mux in SPI2 pins on the "other C1" altfunction */ | ||
188 | DB8500_MUX("spi2_oc1_1", "spi2", "spi2"), | ||
189 | DB8500_PIN("GPIO216_AG12", gpio_out_hi, "spi2"), /* FRM */ | ||
190 | DB8500_PIN("GPIO218_AH11", in_pd, "spi2"), /* RXD */ | ||
191 | DB8500_PIN("GPIO215_AH13", out_lo, "spi2"), /* TXD */ | ||
192 | DB8500_PIN("GPIO217_AH12", out_lo, "spi2"), /* CLK */ | ||
69 | }; | 193 | }; |
70 | 194 | ||
71 | static pin_cfg_t mop500_pins_default[] = { | 195 | /* |
72 | /* SSP0 */ | 196 | * These are specifically for the MOP500 and HREFP (pre-v60) version of the |
73 | GPIO143_SSP0_CLK, | 197 | * board, which utilized a TC35892 GPIO expander instead of using a lot of |
74 | GPIO144_SSP0_FRM, | 198 | * on-chip pins as the HREFv60 and later does. |
75 | GPIO145_SSP0_RXD | PIN_PULL_DOWN, | 199 | */ |
76 | GPIO146_SSP0_TXD, | 200 | static struct pinctrl_map __initdata mop500_pinmap[] = { |
77 | 201 | /* Mux in SSP0, pull down RXD pin */ | |
78 | /* XENON Flashgun INTERFACE */ | 202 | DB8500_MUX_HOG("ssp0_a_1", "ssp0"), |
79 | GPIO6_IP_GPIO0 | PIN_INPUT_PULLUP,/* XENON_FLASH_ID */ | 203 | DB8500_PIN_HOG("GPIO145_C13", pd), |
80 | GPIO7_IP_GPIO1 | PIN_INPUT_PULLUP,/* XENON_READY */ | 204 | /* |
81 | 205 | * XENON Flashgun on image processor GPIO (controlled from image | |
82 | GPIO217_GPIO | PIN_INPUT_PULLUP, /* TC35892 IRQ */ | 206 | * processor firmware), mux in these image processor GPIO lines 0 |
83 | 207 | * (XENON_FLASH_ID) and 1 (XENON_READY) on altfunction C and pull up | |
84 | /* sdi0 (removable MMC/SD/SDIO cards) not handled by pm_runtime */ | 208 | * the pins. |
85 | GPIO21_MC0_DAT31DIR | PIN_OUTPUT_HIGH, | 209 | */ |
86 | 210 | DB8500_MUX_HOG("ipgpio0_c_1", "ipgpio"), | |
87 | /* UART */ | 211 | DB8500_MUX_HOG("ipgpio1_c_1", "ipgpio"), |
88 | GPIO4_U1_RXD | PIN_INPUT_PULLUP, | 212 | DB8500_PIN_HOG("GPIO6_AF6", in_pu), |
89 | GPIO5_U1_TXD | PIN_OUTPUT_HIGH, | 213 | DB8500_PIN_HOG("GPIO7_AG5", in_pu), |
90 | GPIO6_U1_CTSn | PIN_INPUT_PULLUP, | 214 | /* TC35892 IRQ, pull up the line, let the driver mux in the pin */ |
91 | GPIO7_U1_RTSn | PIN_OUTPUT_HIGH, | 215 | DB8500_PIN_HOG("GPIO217_AH12", gpio_in_pu), |
216 | /* Mux in UART1 and set the pull-ups */ | ||
217 | DB8500_MUX_HOG("u1rxtx_a_1", "u1"), | ||
218 | DB8500_MUX_HOG("u1ctsrts_a_1", "u1"), | ||
219 | DB8500_PIN_HOG("GPIO4_AH6", in_pu), /* RXD */ | ||
220 | DB8500_PIN_HOG("GPIO5_AG6", out_hi), /* TXD */ | ||
221 | DB8500_PIN_HOG("GPIO6_AF6", in_pu), /* CTS */ | ||
222 | DB8500_PIN_HOG("GPIO7_AG5", out_hi), /* RTS */ | ||
223 | /* | ||
224 | * Runtime stuff: make it possible to mux in the SKE keypad | ||
225 | * and bias the pins | ||
226 | */ | ||
227 | DB8500_MUX("kp_a_2", "kp", "ske"), | ||
228 | DB8500_PIN("GPIO153_B17", in_pd_slpm_in_pu, "ske"), /* I7 */ | ||
229 | DB8500_PIN("GPIO154_C16", in_pd_slpm_in_pu, "ske"), /* I6 */ | ||
230 | DB8500_PIN("GPIO155_C19", in_pd_slpm_in_pu, "ske"), /* I5 */ | ||
231 | DB8500_PIN("GPIO156_C17", in_pd_slpm_in_pu, "ske"), /* I4 */ | ||
232 | DB8500_PIN("GPIO161_D21", in_pd_slpm_in_pu, "ske"), /* I3 */ | ||
233 | DB8500_PIN("GPIO162_D20", in_pd_slpm_in_pu, "ske"), /* I2 */ | ||
234 | DB8500_PIN("GPIO163_C20", in_pd_slpm_in_pu, "ske"), /* I1 */ | ||
235 | DB8500_PIN("GPIO164_B21", in_pd_slpm_in_pu, "ske"), /* I0 */ | ||
236 | DB8500_PIN("GPIO157_A18", in_pu_slpm_out_lo, "ske"), /* O7 */ | ||
237 | DB8500_PIN("GPIO158_C18", in_pu_slpm_out_lo, "ske"), /* O6 */ | ||
238 | DB8500_PIN("GPIO159_B19", in_pu_slpm_out_lo, "ske"), /* O5 */ | ||
239 | DB8500_PIN("GPIO160_B20", in_pu_slpm_out_lo, "ske"), /* O4 */ | ||
240 | DB8500_PIN("GPIO165_C21", in_pu_slpm_out_lo, "ske"), /* O3 */ | ||
241 | DB8500_PIN("GPIO166_A22", in_pu_slpm_out_lo, "ske"), /* O2 */ | ||
242 | DB8500_PIN("GPIO167_B24", in_pu_slpm_out_lo, "ske"), /* O1 */ | ||
243 | DB8500_PIN("GPIO168_C22", in_pu_slpm_out_lo, "ske"), /* O0 */ | ||
244 | /* Mux in and drive the SDI0 DAT31DIR line high at runtime */ | ||
245 | DB8500_MUX("mc0dat31dir_a_1", "mc0", "sdi0"), | ||
246 | DB8500_PIN("GPIO21_AB3", out_hi, "sdi0"), | ||
92 | }; | 247 | }; |
93 | 248 | ||
94 | static pin_cfg_t hrefv60_pins[] = { | 249 | /* |
95 | /* WLAN */ | 250 | * The HREFv60 series of platforms is using available pins on the DB8500 |
96 | GPIO85_GPIO | PIN_OUTPUT_LOW,/* WLAN_ENA */ | 251 | * insteaf of the Toshiba I2C GPIO expander, reusing some pins like the SSP0 |
97 | 252 | * and SSP1 ports (previously connected to the AB8500) as generic GPIO lines. | |
98 | /* XENON Flashgun INTERFACE */ | 253 | */ |
99 | GPIO6_IP_GPIO0 | PIN_INPUT_PULLUP,/* XENON_FLASH_ID */ | 254 | static struct pinctrl_map __initdata hrefv60_pinmap[] = { |
100 | GPIO7_IP_GPIO1 | PIN_INPUT_PULLUP,/* XENON_READY */ | 255 | /* Drive WLAN_ENA low */ |
101 | 256 | DB8500_PIN_HOG("GPIO85_D5", gpio_out_lo), /* WLAN_ENA */ | |
102 | /* Assistant LED INTERFACE */ | 257 | /* |
103 | GPIO21_GPIO | PIN_OUTPUT_LOW, /* XENON_EN1 */ | 258 | * XENON Flashgun on image processor GPIO (controlled from image |
104 | GPIO64_IP_GPIO4 | PIN_OUTPUT_LOW, /* XENON_EN2 */ | 259 | * processor firmware), mux in these image processor GPIO lines 0 |
105 | 260 | * (XENON_FLASH_ID), 1 (XENON_READY) and there is an assistant | |
106 | /* Magnetometer */ | 261 | * LED on IP GPIO 4 (XENON_EN2) on altfunction C, that need bias |
107 | GPIO31_GPIO | PIN_INPUT_PULLUP, /* magnetometer_INT */ | 262 | * from GPIO21 so pull up 0, 1 and drive 4 and GPIO21 low as output. |
108 | GPIO32_GPIO | PIN_INPUT_PULLDOWN, /* Magnetometer DRDY */ | 263 | */ |
109 | 264 | DB8500_MUX_HOG("ipgpio0_c_1", "ipgpio"), | |
110 | /* Display Interface */ | 265 | DB8500_MUX_HOG("ipgpio1_c_1", "ipgpio"), |
111 | GPIO65_GPIO | PIN_OUTPUT_HIGH, /* DISP1 NO RST */ | 266 | DB8500_MUX_HOG("ipgpio4_c_1", "ipgpio"), |
112 | GPIO66_GPIO | PIN_OUTPUT_LOW, /* DISP2 RST */ | 267 | DB8500_PIN_HOG("GPIO6_AF6", in_pu), /* XENON_FLASH_ID */ |
113 | 268 | DB8500_PIN_HOG("GPIO7_AG5", in_pu), /* XENON_READY */ | |
114 | /* Touch screen INTERFACE */ | 269 | DB8500_PIN_HOG("GPIO21_AB3", gpio_out_lo), /* XENON_EN1 */ |
115 | GPIO143_GPIO | PIN_OUTPUT_LOW,/*TOUCH_RST1 */ | 270 | DB8500_PIN_HOG("GPIO64_F3", out_lo), /* XENON_EN2 */ |
116 | 271 | /* Magnetometer uses GPIO 31 and 32, pull these up/down respectively */ | |
117 | /* Touch screen INTERFACE 2 */ | 272 | DB8500_PIN_HOG("GPIO31_V3", gpio_in_pu), /* EN1 */ |
118 | GPIO67_GPIO | PIN_INPUT_PULLUP, /* TOUCH_INT2 */ | 273 | DB8500_PIN_HOG("GPIO32_V2", gpio_in_pd), /* DRDY */ |
119 | GPIO146_GPIO | PIN_OUTPUT_LOW,/*TOUCH_RST2 */ | 274 | /* |
120 | 275 | * Display Interface 1 uses GPIO 65 for RST (reset). | |
121 | /* ETM_PTM_TRACE INTERFACE */ | 276 | * Display Interface 2 uses GPIO 66 for RST (reset). |
122 | GPIO70_GPIO | PIN_OUTPUT_LOW,/* ETM_PTM_DATA23 */ | 277 | * Drive DISP1 reset high (not reset), driver DISP2 reset low (reset) |
123 | GPIO71_GPIO | PIN_OUTPUT_LOW,/* ETM_PTM_DATA22 */ | 278 | */ |
124 | GPIO72_GPIO | PIN_OUTPUT_LOW,/* ETM_PTM_DATA21 */ | 279 | DB8500_PIN_HOG("GPIO65_F1", gpio_out_hi), /* DISP1 NO RST */ |
125 | GPIO73_GPIO | PIN_OUTPUT_LOW,/* ETM_PTM_DATA20 */ | 280 | DB8500_PIN_HOG("GPIO66_G3", gpio_out_lo), /* DISP2 RST */ |
126 | GPIO74_GPIO | PIN_OUTPUT_LOW,/* ETM_PTM_DATA19 */ | 281 | /* |
127 | 282 | * Touch screen uses GPIO 143 for RST1, GPIO 146 for RST2 and | |
128 | /* NAHJ INTERFACE */ | 283 | * GPIO 67 for interrupts. Pull-up the IRQ line and drive both |
129 | GPIO76_GPIO | PIN_OUTPUT_LOW,/* NAHJ_CTRL */ | 284 | * reset signals low. |
130 | GPIO216_GPIO | PIN_OUTPUT_HIGH,/* NAHJ_CTRL_INV */ | 285 | */ |
131 | 286 | DB8500_PIN_HOG("GPIO143_D12", gpio_out_lo), /* TOUCH_RST1 */ | |
132 | /* NFC INTERFACE */ | 287 | DB8500_PIN_HOG("GPIO67_G2", gpio_in_pu), /* TOUCH_INT2 */ |
133 | GPIO77_GPIO | PIN_OUTPUT_LOW, /* NFC_ENA */ | 288 | DB8500_PIN_HOG("GPIO146_D13", gpio_out_lo), /* TOUCH_RST2 */ |
134 | GPIO144_GPIO | PIN_INPUT_PULLDOWN, /* NFC_IRQ */ | 289 | /* |
135 | GPIO142_GPIO | PIN_OUTPUT_LOW, /* NFC_RESET */ | 290 | * Drive D19-D23 for the ETM PTM trace interface low, |
136 | 291 | * (presumably pins are unconnected therefore grounded here, | |
137 | /* Keyboard MATRIX INTERFACE */ | 292 | * the "other alt C1" setting enables these pins) |
138 | GPIO90_MC5_CMD | PIN_OUTPUT_LOW, /* KP_O_1 */ | 293 | */ |
139 | GPIO87_MC5_DAT1 | PIN_OUTPUT_LOW, /* KP_O_2 */ | 294 | DB8500_PIN_HOG("GPIO70_G5", gpio_out_lo), |
140 | GPIO86_MC5_DAT0 | PIN_OUTPUT_LOW, /* KP_O_3 */ | 295 | DB8500_PIN_HOG("GPIO71_G4", gpio_out_lo), |
141 | GPIO96_KP_O6 | PIN_OUTPUT_LOW, /* KP_O_6 */ | 296 | DB8500_PIN_HOG("GPIO72_H4", gpio_out_lo), |
142 | GPIO94_KP_O7 | PIN_OUTPUT_LOW, /* KP_O_7 */ | 297 | DB8500_PIN_HOG("GPIO73_H3", gpio_out_lo), |
143 | GPIO93_MC5_DAT4 | PIN_INPUT_PULLUP, /* KP_I_0 */ | 298 | DB8500_PIN_HOG("GPIO74_J3", gpio_out_lo), |
144 | GPIO89_MC5_DAT3 | PIN_INPUT_PULLUP, /* KP_I_2 */ | 299 | /* NAHJ CTRL on GPIO 76 to low, CTRL_INV on GPIO216 to high */ |
145 | GPIO88_MC5_DAT2 | PIN_INPUT_PULLUP, /* KP_I_3 */ | 300 | DB8500_PIN_HOG("GPIO76_J2", gpio_out_lo), /* CTRL */ |
146 | GPIO91_GPIO | PIN_INPUT_PULLUP, /* FORCE_SENSING_INT */ | 301 | DB8500_PIN_HOG("GPIO216_AG12", gpio_out_hi), /* CTRL_INV */ |
147 | GPIO92_GPIO | PIN_OUTPUT_LOW, /* FORCE_SENSING_RST */ | 302 | /* NFC ENA and RESET to low, pulldown IRQ line */ |
148 | GPIO97_GPIO | PIN_OUTPUT_LOW, /* FORCE_SENSING_WU */ | 303 | DB8500_PIN_HOG("GPIO77_H1", gpio_out_lo), /* NFC_ENA */ |
149 | 304 | DB8500_PIN_HOG("GPIO144_B13", gpio_in_pd), /* NFC_IRQ */ | |
150 | /* DiPro Sensor Interface */ | 305 | DB8500_PIN_HOG("GPIO142_C11", gpio_out_lo), /* NFC_RESET */ |
151 | GPIO139_GPIO | PIN_INPUT_PULLUP, /* DIPRO_INT */ | 306 | /* |
152 | 307 | * SKE keyboard partly on alt A and partly on "Other alt C1" | |
153 | /* Audio Amplifier Interface */ | 308 | * Driver KP_O1,2,3,6,7 low and pull up KP_I 0,2,3 for three |
154 | GPIO149_GPIO | PIN_OUTPUT_HIGH, /* VAUDIO_HF_EN, enable MAX8968 */ | 309 | * rows of 6 keys, then pull up force sensing interrup and |
155 | 310 | * drive reset and force sensing WU low. | |
156 | /* GBF INTERFACE */ | 311 | */ |
157 | GPIO171_GPIO | PIN_OUTPUT_LOW, /* GBF_ENA_RESET */ | 312 | DB8500_MUX_HOG("kp_a_1", "kp"), |
158 | 313 | DB8500_MUX_HOG("kp_oc1_1", "kp"), | |
159 | /* MSP : HDTV INTERFACE */ | 314 | DB8500_PIN_HOG("GPIO90_A3", out_lo), /* KP_O1 */ |
160 | GPIO192_GPIO | PIN_INPUT_PULLDOWN, | 315 | DB8500_PIN_HOG("GPIO87_B3", out_lo), /* KP_O2 */ |
161 | 316 | DB8500_PIN_HOG("GPIO86_C6", out_lo), /* KP_O3 */ | |
162 | /* ACCELEROMETER_INTERFACE */ | 317 | DB8500_PIN_HOG("GPIO96_D8", out_lo), /* KP_O6 */ |
163 | GPIO82_GPIO | PIN_INPUT_PULLUP, /* ACC_INT1 */ | 318 | DB8500_PIN_HOG("GPIO94_D7", out_lo), /* KP_O7 */ |
164 | GPIO83_GPIO | PIN_INPUT_PULLUP, /* ACC_INT2 */ | 319 | DB8500_PIN_HOG("GPIO93_B7", in_pu), /* KP_I0 */ |
165 | 320 | DB8500_PIN_HOG("GPIO89_E6", in_pu), /* KP_I2 */ | |
166 | /* SD card detect */ | 321 | DB8500_PIN_HOG("GPIO88_C4", in_pu), /* KP_I3 */ |
167 | GPIO95_GPIO | PIN_INPUT_PULLUP, | 322 | DB8500_PIN_HOG("GPIO91_B6", gpio_in_pu), /* FORCE_SENSING_INT */ |
323 | DB8500_PIN_HOG("GPIO92_D6", gpio_out_lo), /* FORCE_SENSING_RST */ | ||
324 | DB8500_PIN_HOG("GPIO97_D9", gpio_out_lo), /* FORCE_SENSING_WU */ | ||
325 | /* DiPro Sensor interrupt */ | ||
326 | DB8500_PIN_HOG("GPIO139_C9", gpio_in_pu), /* DIPRO_INT */ | ||
327 | /* Audio Amplifier HF enable */ | ||
328 | DB8500_PIN_HOG("GPIO149_B14", gpio_out_hi), /* VAUDIO_HF_EN, enable MAX8968 */ | ||
329 | /* GBF interface, pull low to reset state */ | ||
330 | DB8500_PIN_HOG("GPIO171_D23", gpio_out_lo), /* GBF_ENA_RESET */ | ||
331 | /* MSP : HDTV INTERFACE GPIO line */ | ||
332 | DB8500_PIN_HOG("GPIO192_AJ27", gpio_in_pd), | ||
333 | /* Accelerometer interrupt lines */ | ||
334 | DB8500_PIN_HOG("GPIO82_C1", gpio_in_pu), /* ACC_INT1 */ | ||
335 | DB8500_PIN_HOG("GPIO83_D3", gpio_in_pu), /* ACC_INT2 */ | ||
336 | /* SD card detect GPIO pin */ | ||
337 | DB8500_PIN_HOG("GPIO95_E8", gpio_in_pu), | ||
338 | /* | ||
339 | * Runtime stuff | ||
340 | * Pull up/down of some sensor GPIO pins, for proximity, HAL sensor | ||
341 | * etc. | ||
342 | */ | ||
343 | DB8500_PIN("GPIO217_AH12", gpio_in_pu_slpm_gpio_nopull, "gpio-keys.0"), | ||
344 | DB8500_PIN("GPIO145_C13", gpio_in_pd_slpm_gpio_nopull, "gpio-keys.0"), | ||
345 | DB8500_PIN("GPIO139_C9", gpio_in_pu_slpm_gpio_nopull, "gpio-keys.0"), | ||
346 | /* | ||
347 | * Make it possible to mux in the SKE keypad and bias the pins | ||
348 | * FIXME: what's the point with this on HREFv60? KP/SKE is already | ||
349 | * muxed in at another place! Enabling this will bork. | ||
350 | */ | ||
351 | DB8500_MUX("kp_a_2", "kp", "ske"), | ||
352 | DB8500_PIN("GPIO153_B17", in_pd_slpm_in_pu, "ske"), /* I7 */ | ||
353 | DB8500_PIN("GPIO154_C16", in_pd_slpm_in_pu, "ske"), /* I6 */ | ||
354 | DB8500_PIN("GPIO155_C19", in_pd_slpm_in_pu, "ske"), /* I5 */ | ||
355 | DB8500_PIN("GPIO156_C17", in_pd_slpm_in_pu, "ske"), /* I4 */ | ||
356 | DB8500_PIN("GPIO161_D21", in_pd_slpm_in_pu, "ske"), /* I3 */ | ||
357 | DB8500_PIN("GPIO162_D20", in_pd_slpm_in_pu, "ske"), /* I2 */ | ||
358 | DB8500_PIN("GPIO163_C20", in_pd_slpm_in_pu, "ske"), /* I1 */ | ||
359 | DB8500_PIN("GPIO164_B21", in_pd_slpm_in_pu, "ske"), /* I0 */ | ||
360 | DB8500_PIN("GPIO157_A18", in_pu_slpm_out_lo, "ske"), /* O7 */ | ||
361 | DB8500_PIN("GPIO158_C18", in_pu_slpm_out_lo, "ske"), /* O6 */ | ||
362 | DB8500_PIN("GPIO159_B19", in_pu_slpm_out_lo, "ske"), /* O5 */ | ||
363 | DB8500_PIN("GPIO160_B20", in_pu_slpm_out_lo, "ske"), /* O4 */ | ||
364 | DB8500_PIN("GPIO165_C21", in_pu_slpm_out_lo, "ske"), /* O3 */ | ||
365 | DB8500_PIN("GPIO166_A22", in_pu_slpm_out_lo, "ske"), /* O2 */ | ||
366 | DB8500_PIN("GPIO167_B24", in_pu_slpm_out_lo, "ske"), /* O1 */ | ||
367 | DB8500_PIN("GPIO168_C22", in_pu_slpm_out_lo, "ske"), /* O0 */ | ||
168 | }; | 368 | }; |
169 | 369 | ||
170 | static pin_cfg_t u9500_pins[] = { | 370 | static struct pinctrl_map __initdata u9500_pinmap[] = { |
171 | GPIO4_U1_RXD | PIN_INPUT_PULLUP, | 371 | /* Mux in UART1 (just RX/TX) and set the pull-ups */ |
172 | GPIO5_U1_TXD | PIN_OUTPUT_HIGH, | 372 | DB8500_MUX_HOG("u1rxtx_a_1", "u1"), |
173 | GPIO144_GPIO | PIN_INPUT_PULLUP,/* WLAN_IRQ */ | 373 | DB8500_PIN_HOG("GPIO4_AH6", in_pu), |
174 | 374 | DB8500_PIN_HOG("GPIO5_AG6", out_hi), | |
375 | /* WLAN_IRQ line */ | ||
376 | DB8500_PIN_HOG("GPIO144_B13", gpio_in_pu), | ||
175 | /* HSI */ | 377 | /* HSI */ |
176 | GPIO219_HSIR_FLA0 | PIN_INPUT_PULLDOWN, | 378 | DB8500_MUX_HOG("hsir_a_1", "hsi"), |
177 | GPIO220_HSIR_DAT0 | PIN_INPUT_PULLDOWN, | 379 | DB8500_MUX_HOG("hsit_a_1", "hsi"), |
178 | GPIO221_HSIR_RDY0 | PIN_OUTPUT_LOW, | 380 | DB8500_PIN_HOG("GPIO219_AG10", in_pd), /* RX FLA0 */ |
179 | GPIO222_HSIT_FLA0 | PIN_OUTPUT_LOW, | 381 | DB8500_PIN_HOG("GPIO220_AH10", in_pd), /* RX DAT0 */ |
180 | GPIO223_HSIT_DAT0 | PIN_OUTPUT_LOW, | 382 | DB8500_PIN_HOG("GPIO221_AJ11", out_lo), /* RX RDY0 */ |
181 | GPIO224_HSIT_RDY0 | PIN_INPUT_PULLDOWN, | 383 | DB8500_PIN_HOG("GPIO222_AJ9", out_lo), /* TX FLA0 */ |
182 | GPIO225_HSIT_CAWAKE0 | PIN_INPUT_PULLDOWN, /* CA_WAKE0 */ | 384 | DB8500_PIN_HOG("GPIO223_AH9", out_lo), /* TX DAT0 */ |
183 | GPIO226_GPIO | PIN_OUTPUT_HIGH, /* AC_WAKE0 */ | 385 | DB8500_PIN_HOG("GPIO224_AG9", in_pd), /* TX RDY0 */ |
386 | DB8500_PIN_HOG("GPIO225_AG8", in_pd), /* CAWAKE0 */ | ||
387 | DB8500_PIN_HOG("GPIO226_AF8", out_hi), /* ACWAKE0 */ | ||
184 | }; | 388 | }; |
185 | 389 | ||
186 | static pin_cfg_t u8500_pins[] = { | 390 | static struct pinctrl_map __initdata u8500_pinmap[] = { |
187 | GPIO226_GPIO | PIN_OUTPUT_LOW, /* WLAN_PMU_EN */ | 391 | DB8500_PIN_HOG("GPIO226_AF8", gpio_out_lo), /* WLAN_PMU_EN */ |
188 | GPIO4_GPIO | PIN_INPUT_PULLUP,/* WLAN_IRQ */ | 392 | DB8500_PIN_HOG("GPIO4_AH6", gpio_in_pu), /* WLAN_IRQ */ |
189 | }; | 393 | }; |
190 | 394 | ||
191 | static pin_cfg_t snowball_pins[] = { | 395 | static struct pinctrl_map __initdata snowball_pinmap[] = { |
192 | /* SSP0, to AB8500 */ | 396 | /* Mux in SSP0 connected to AB8500, pull down RXD pin */ |
193 | GPIO143_SSP0_CLK, | 397 | DB8500_MUX_HOG("ssp0_a_1", "ssp0"), |
194 | GPIO144_SSP0_FRM, | 398 | DB8500_PIN_HOG("GPIO145_C13", pd), |
195 | GPIO145_SSP0_RXD | PIN_PULL_DOWN, | 399 | /* Always drive the MC0 DAT31DIR line high on these boards */ |
196 | GPIO146_SSP0_TXD, | 400 | DB8500_PIN_HOG("GPIO21_AB3", out_hi), |
197 | 401 | /* Mux in "SM" which is used for the SMSC911x Ethernet adapter */ | |
198 | /* MMC0: MicroSD card */ | 402 | DB8500_MUX_HOG("sm_b_1", "sm"), |
199 | GPIO21_MC0_DAT31DIR | PIN_OUTPUT_HIGH, | 403 | /* Drive RSTn_LAN high */ |
200 | 404 | DB8500_PIN_HOG("GPIO141_C12", gpio_out_hi), | |
201 | /* MMC2: LAN */ | ||
202 | GPIO86_SM_ADQ0, | ||
203 | GPIO87_SM_ADQ1, | ||
204 | GPIO88_SM_ADQ2, | ||
205 | GPIO89_SM_ADQ3, | ||
206 | GPIO90_SM_ADQ4, | ||
207 | GPIO91_SM_ADQ5, | ||
208 | GPIO92_SM_ADQ6, | ||
209 | GPIO93_SM_ADQ7, | ||
210 | |||
211 | GPIO94_SM_ADVn, | ||
212 | GPIO95_SM_CS0n, | ||
213 | GPIO96_SM_OEn, | ||
214 | GPIO97_SM_WEn, | ||
215 | |||
216 | GPIO128_SM_CKO, | ||
217 | GPIO130_SM_FBCLK, | ||
218 | GPIO131_SM_ADQ8, | ||
219 | GPIO132_SM_ADQ9, | ||
220 | GPIO133_SM_ADQ10, | ||
221 | GPIO134_SM_ADQ11, | ||
222 | GPIO135_SM_ADQ12, | ||
223 | GPIO136_SM_ADQ13, | ||
224 | GPIO137_SM_ADQ14, | ||
225 | GPIO138_SM_ADQ15, | ||
226 | |||
227 | /* RSTn_LAN */ | ||
228 | GPIO141_GPIO | PIN_OUTPUT_HIGH, | ||
229 | |||
230 | /* Accelerometer/Magnetometer */ | 405 | /* Accelerometer/Magnetometer */ |
231 | GPIO163_GPIO | PIN_INPUT_PULLUP, /* ACCEL_IRQ1 */ | 406 | DB8500_PIN_HOG("GPIO163_C20", gpio_in_pu), /* ACCEL_IRQ1 */ |
232 | GPIO164_GPIO | PIN_INPUT_PULLUP, /* ACCEL_IRQ2 */ | 407 | DB8500_PIN_HOG("GPIO164_B21", gpio_in_pu), /* ACCEL_IRQ2 */ |
233 | GPIO165_GPIO | PIN_INPUT_PULLUP, /* MAG_DRDY */ | 408 | DB8500_PIN_HOG("GPIO165_C21", gpio_in_pu), /* MAG_DRDY */ |
234 | |||
235 | /* WLAN/GBF */ | 409 | /* WLAN/GBF */ |
236 | GPIO161_GPIO | PIN_OUTPUT_LOW, /* WLAN_PMU_EN */ | 410 | DB8500_PIN_HOG("GPIO161_D21", gpio_out_lo), /* WLAN_PMU_EN */ |
237 | GPIO171_GPIO | PIN_OUTPUT_HIGH,/* GBF_ENA */ | 411 | DB8500_PIN_HOG("GPIO171_D23", gpio_out_hi), /* GBF_ENA */ |
238 | GPIO215_GPIO | PIN_OUTPUT_LOW,/* WLAN_ENA */ | 412 | DB8500_PIN_HOG("GPIO215_AH13", gpio_out_lo), /* WLAN_ENA */ |
239 | GPIO216_GPIO | PIN_INPUT_PULLUP,/* WLAN_IRQ */ | 413 | DB8500_PIN_HOG("GPIO216_AG12", gpio_in_pu), /* WLAN_IRQ */ |
240 | }; | ||
241 | |||
242 | /* | ||
243 | * I2C | ||
244 | */ | ||
245 | |||
246 | static UX500_PINS(mop500_pins_i2c0, | ||
247 | GPIO147_I2C0_SCL | | ||
248 | PIN_SLPM_GPIO | PIN_SLPM_INPUT_NOPULL, | ||
249 | GPIO148_I2C0_SDA | | ||
250 | PIN_SLPM_GPIO | PIN_SLPM_INPUT_NOPULL, | ||
251 | ); | ||
252 | |||
253 | static UX500_PINS(mop500_pins_i2c1, | ||
254 | GPIO16_I2C1_SCL | | ||
255 | PIN_SLPM_GPIO | PIN_SLPM_INPUT_NOPULL, | ||
256 | GPIO17_I2C1_SDA | | ||
257 | PIN_SLPM_GPIO | PIN_SLPM_INPUT_NOPULL, | ||
258 | ); | ||
259 | |||
260 | static UX500_PINS(mop500_pins_i2c2, | ||
261 | GPIO10_I2C2_SDA | | ||
262 | PIN_SLPM_GPIO | PIN_SLPM_INPUT_NOPULL, | ||
263 | GPIO11_I2C2_SCL | | ||
264 | PIN_SLPM_GPIO | PIN_SLPM_INPUT_NOPULL, | ||
265 | ); | ||
266 | |||
267 | static UX500_PINS(mop500_pins_i2c3, | ||
268 | GPIO229_I2C3_SDA | | ||
269 | PIN_SLPM_GPIO | PIN_SLPM_INPUT_NOPULL, | ||
270 | GPIO230_I2C3_SCL | | ||
271 | PIN_SLPM_GPIO | PIN_SLPM_INPUT_NOPULL, | ||
272 | ); | ||
273 | |||
274 | static UX500_PINS(mop500_pins_mcde_tvout, | ||
275 | GPIO78_LCD_D8, | ||
276 | GPIO79_LCD_D9, | ||
277 | GPIO80_LCD_D10, | ||
278 | GPIO81_LCD_D11, | ||
279 | GPIO150_LCDA_CLK, | ||
280 | ); | ||
281 | |||
282 | static UX500_PINS(mop500_pins_mcde_hdmi, | ||
283 | GPIO69_LCD_VSI1 | PIN_INPUT_PULLUP, | ||
284 | ); | ||
285 | |||
286 | static UX500_PINS(mop500_pins_ske, | ||
287 | GPIO153_KP_I7 | PIN_INPUT_PULLDOWN | PIN_SLPM_INPUT_PULLUP, | ||
288 | GPIO154_KP_I6 | PIN_INPUT_PULLDOWN | PIN_SLPM_INPUT_PULLUP, | ||
289 | GPIO155_KP_I5 | PIN_INPUT_PULLDOWN | PIN_SLPM_INPUT_PULLUP, | ||
290 | GPIO156_KP_I4 | PIN_INPUT_PULLDOWN | PIN_SLPM_INPUT_PULLUP, | ||
291 | GPIO161_KP_I3 | PIN_INPUT_PULLDOWN | PIN_SLPM_INPUT_PULLUP, | ||
292 | GPIO162_KP_I2 | PIN_INPUT_PULLDOWN | PIN_SLPM_INPUT_PULLUP, | ||
293 | GPIO163_KP_I1 | PIN_INPUT_PULLDOWN | PIN_SLPM_INPUT_PULLUP, | ||
294 | GPIO164_KP_I0 | PIN_INPUT_PULLDOWN | PIN_SLPM_INPUT_PULLUP, | ||
295 | GPIO157_KP_O7 | PIN_INPUT_PULLUP | PIN_SLPM_OUTPUT_LOW, | ||
296 | GPIO158_KP_O6 | PIN_INPUT_PULLUP | PIN_SLPM_OUTPUT_LOW, | ||
297 | GPIO159_KP_O5 | PIN_INPUT_PULLUP | PIN_SLPM_OUTPUT_LOW, | ||
298 | GPIO160_KP_O4 | PIN_INPUT_PULLUP | PIN_SLPM_OUTPUT_LOW, | ||
299 | GPIO165_KP_O3 | PIN_INPUT_PULLUP | PIN_SLPM_OUTPUT_LOW, | ||
300 | GPIO166_KP_O2 | PIN_INPUT_PULLUP | PIN_SLPM_OUTPUT_LOW, | ||
301 | GPIO167_KP_O1 | PIN_INPUT_PULLUP | PIN_SLPM_OUTPUT_LOW, | ||
302 | GPIO168_KP_O0 | PIN_INPUT_PULLUP | PIN_SLPM_OUTPUT_LOW, | ||
303 | ); | ||
304 | |||
305 | /* sdi0 (removable MMC/SD/SDIO cards) */ | ||
306 | static UX500_PINS(mop500_pins_sdi0, | ||
307 | GPIO18_MC0_CMDDIR | PIN_OUTPUT_HIGH, | ||
308 | GPIO19_MC0_DAT0DIR | PIN_OUTPUT_HIGH, | ||
309 | GPIO20_MC0_DAT2DIR | PIN_OUTPUT_HIGH, | ||
310 | |||
311 | GPIO22_MC0_FBCLK | PIN_INPUT_NOPULL, | ||
312 | GPIO23_MC0_CLK | PIN_OUTPUT_LOW, | ||
313 | GPIO24_MC0_CMD | PIN_INPUT_PULLUP, | ||
314 | GPIO25_MC0_DAT0 | PIN_INPUT_PULLUP, | ||
315 | GPIO26_MC0_DAT1 | PIN_INPUT_PULLUP, | ||
316 | GPIO27_MC0_DAT2 | PIN_INPUT_PULLUP, | ||
317 | GPIO28_MC0_DAT3 | PIN_INPUT_PULLUP, | ||
318 | ); | ||
319 | |||
320 | /* sdi1 (WLAN CW1200) */ | ||
321 | static UX500_PINS(mop500_pins_sdi1, | ||
322 | GPIO208_MC1_CLK | PIN_OUTPUT_LOW, | ||
323 | GPIO209_MC1_FBCLK | PIN_INPUT_NOPULL, | ||
324 | GPIO210_MC1_CMD | PIN_INPUT_PULLUP, | ||
325 | GPIO211_MC1_DAT0 | PIN_INPUT_PULLUP, | ||
326 | GPIO212_MC1_DAT1 | PIN_INPUT_PULLUP, | ||
327 | GPIO213_MC1_DAT2 | PIN_INPUT_PULLUP, | ||
328 | GPIO214_MC1_DAT3 | PIN_INPUT_PULLUP, | ||
329 | ); | ||
330 | |||
331 | /* sdi2 (POP eMMC) */ | ||
332 | static UX500_PINS(mop500_pins_sdi2, | ||
333 | GPIO128_MC2_CLK | PIN_OUTPUT_LOW, | ||
334 | GPIO129_MC2_CMD | PIN_INPUT_PULLUP, | ||
335 | GPIO130_MC2_FBCLK | PIN_INPUT_NOPULL, | ||
336 | GPIO131_MC2_DAT0 | PIN_INPUT_PULLUP, | ||
337 | GPIO132_MC2_DAT1 | PIN_INPUT_PULLUP, | ||
338 | GPIO133_MC2_DAT2 | PIN_INPUT_PULLUP, | ||
339 | GPIO134_MC2_DAT3 | PIN_INPUT_PULLUP, | ||
340 | GPIO135_MC2_DAT4 | PIN_INPUT_PULLUP, | ||
341 | GPIO136_MC2_DAT5 | PIN_INPUT_PULLUP, | ||
342 | GPIO137_MC2_DAT6 | PIN_INPUT_PULLUP, | ||
343 | GPIO138_MC2_DAT7 | PIN_INPUT_PULLUP, | ||
344 | ); | ||
345 | |||
346 | /* sdi4 (PCB eMMC) */ | ||
347 | static UX500_PINS(mop500_pins_sdi4, | ||
348 | GPIO197_MC4_DAT3 | PIN_INPUT_PULLUP, | ||
349 | GPIO198_MC4_DAT2 | PIN_INPUT_PULLUP, | ||
350 | GPIO199_MC4_DAT1 | PIN_INPUT_PULLUP, | ||
351 | GPIO200_MC4_DAT0 | PIN_INPUT_PULLUP, | ||
352 | GPIO201_MC4_CMD | PIN_INPUT_PULLUP, | ||
353 | GPIO202_MC4_FBCLK | PIN_INPUT_NOPULL, | ||
354 | GPIO203_MC4_CLK | PIN_OUTPUT_LOW, | ||
355 | GPIO204_MC4_DAT7 | PIN_INPUT_PULLUP, | ||
356 | GPIO205_MC4_DAT6 | PIN_INPUT_PULLUP, | ||
357 | GPIO206_MC4_DAT5 | PIN_INPUT_PULLUP, | ||
358 | GPIO207_MC4_DAT4 | PIN_INPUT_PULLUP, | ||
359 | ); | ||
360 | |||
361 | /* USB */ | ||
362 | static UX500_PINS(mop500_pins_usb, | ||
363 | GPIO256_USB_NXT, | ||
364 | GPIO257_USB_STP | PIN_OUTPUT_HIGH, | ||
365 | GPIO258_USB_XCLK, | ||
366 | GPIO259_USB_DIR, | ||
367 | GPIO260_USB_DAT7, | ||
368 | GPIO261_USB_DAT6, | ||
369 | GPIO262_USB_DAT5, | ||
370 | GPIO263_USB_DAT4, | ||
371 | GPIO264_USB_DAT3, | ||
372 | GPIO265_USB_DAT2, | ||
373 | GPIO266_USB_DAT1, | ||
374 | GPIO267_USB_DAT0, | ||
375 | ); | ||
376 | |||
377 | /* SPI2 */ | ||
378 | static UX500_PINS(mop500_pins_spi2, | ||
379 | GPIO216_GPIO | PIN_OUTPUT_HIGH, | ||
380 | GPIO218_SPI2_RXD | PIN_INPUT_PULLDOWN, | ||
381 | GPIO215_SPI2_TXD | PIN_OUTPUT_LOW, | ||
382 | GPIO217_SPI2_CLK | PIN_OUTPUT_LOW, | ||
383 | ); | ||
384 | |||
385 | static UX500_PINS(mop500_pins_sensors1p_v60, | ||
386 | GPIO217_GPIO| PIN_INPUT_PULLUP | | ||
387 | PIN_SLPM_GPIO | PIN_SLPM_INPUT_NOPULL, | ||
388 | GPIO145_GPIO | PIN_INPUT_PULLDOWN | | ||
389 | PIN_SLPM_GPIO | PIN_SLPM_INPUT_NOPULL, | ||
390 | GPIO139_GPIO | PIN_INPUT_PULLUP | | ||
391 | PIN_SLPM_GPIO | PIN_SLPM_INPUT_NOPULL, | ||
392 | ); | ||
393 | |||
394 | static UX500_PINS(mop500_pins_sensors1p, | ||
395 | PIN_CFG_INPUT(GPIO_PROX_SENSOR, GPIO, NOPULL), | ||
396 | PIN_CFG_INPUT(GPIO_HAL_SENSOR, GPIO, NOPULL), | ||
397 | ); | ||
398 | |||
399 | static struct ux500_pin_lookup mop500_runtime_pins[] = { | ||
400 | PIN_LOOKUP("mcde-tvout", &mop500_pins_mcde_tvout), | ||
401 | PIN_LOOKUP("av8100-hdmi", &mop500_pins_mcde_hdmi), | ||
402 | PIN_LOOKUP("nmk-i2c.0", &mop500_pins_i2c0), | ||
403 | PIN_LOOKUP("nmk-i2c.1", &mop500_pins_i2c1), | ||
404 | PIN_LOOKUP("nmk-i2c.2", &mop500_pins_i2c2), | ||
405 | PIN_LOOKUP("nmk-i2c.3", &mop500_pins_i2c3), | ||
406 | PIN_LOOKUP("sdi0", &mop500_pins_sdi0), | ||
407 | PIN_LOOKUP("sdi1", &mop500_pins_sdi1), | ||
408 | PIN_LOOKUP("sdi2", &mop500_pins_sdi2), | ||
409 | PIN_LOOKUP("sdi4", &mop500_pins_sdi4), | ||
410 | PIN_LOOKUP("musb-ux500.0", &mop500_pins_usb), | ||
411 | PIN_LOOKUP("spi2", &mop500_pins_spi2), | ||
412 | }; | ||
413 | |||
414 | static struct ux500_pin_lookup mop500_runtime_pins_v60[] = { | ||
415 | PIN_LOOKUP("ske", &mop500_pins_ske), | ||
416 | PIN_LOOKUP("gpio-keys.0", &mop500_pins_sensors1p_v60), | ||
417 | }; | ||
418 | |||
419 | static struct ux500_pin_lookup mop500_runtime_pins_pre_v60[] = { | ||
420 | PIN_LOOKUP("ske", &mop500_pins_ske), | ||
421 | PIN_LOOKUP("gpio-keys.0", &mop500_pins_sensors1p), | ||
422 | }; | 414 | }; |
423 | 415 | ||
424 | /* | 416 | /* |
@@ -444,64 +436,45 @@ int pins_for_u9500(void) | |||
444 | return 0; | 436 | return 0; |
445 | } | 437 | } |
446 | 438 | ||
447 | void __init mop500_pins_init(void) | 439 | static void __init mop500_href_family_pinmaps_init(void) |
448 | { | 440 | { |
449 | nmk_config_pins(mop500_pins_common, | ||
450 | ARRAY_SIZE(mop500_pins_common)); | ||
451 | |||
452 | ux500_pins_add(mop500_runtime_pins, ARRAY_SIZE(mop500_runtime_pins)); | ||
453 | |||
454 | ux500_pins_add(mop500_runtime_pins_pre_v60, | ||
455 | ARRAY_SIZE(mop500_runtime_pins_pre_v60)); | ||
456 | |||
457 | switch (pinsfor) { | 441 | switch (pinsfor) { |
458 | case PINS_FOR_U9500: | 442 | case PINS_FOR_U9500: |
459 | nmk_config_pins(u9500_pins, ARRAY_SIZE(u9500_pins)); | 443 | pinctrl_register_mappings(u9500_pinmap, |
444 | ARRAY_SIZE(u9500_pinmap)); | ||
460 | break; | 445 | break; |
461 | |||
462 | case PINS_FOR_DEFAULT: | 446 | case PINS_FOR_DEFAULT: |
463 | nmk_config_pins(u8500_pins, ARRAY_SIZE(u8500_pins)); | 447 | pinctrl_register_mappings(u8500_pinmap, |
448 | ARRAY_SIZE(u8500_pinmap)); | ||
464 | default: | 449 | default: |
465 | break; | 450 | break; |
466 | } | 451 | } |
467 | |||
468 | nmk_config_pins(mop500_pins_default, | ||
469 | ARRAY_SIZE(mop500_pins_default)); | ||
470 | } | 452 | } |
471 | 453 | ||
472 | void __init snowball_pins_init(void) | 454 | void __init mop500_pinmaps_init(void) |
473 | { | 455 | { |
474 | nmk_config_pins(mop500_pins_common, | 456 | pinctrl_register_mappings(mop500_family_pinmap, |
475 | ARRAY_SIZE(mop500_pins_common)); | 457 | ARRAY_SIZE(mop500_family_pinmap)); |
476 | 458 | pinctrl_register_mappings(mop500_pinmap, | |
477 | ux500_pins_add(mop500_runtime_pins, ARRAY_SIZE(mop500_runtime_pins)); | 459 | ARRAY_SIZE(mop500_pinmap)); |
478 | 460 | mop500_href_family_pinmaps_init(); | |
479 | nmk_config_pins(u8500_pins, ARRAY_SIZE(u8500_pins)); | ||
480 | |||
481 | nmk_config_pins(snowball_pins, ARRAY_SIZE(snowball_pins)); | ||
482 | } | 461 | } |
483 | 462 | ||
484 | void __init hrefv60_pins_init(void) | 463 | void __init snowball_pinmaps_init(void) |
485 | { | 464 | { |
486 | nmk_config_pins(mop500_pins_common, | 465 | pinctrl_register_mappings(mop500_family_pinmap, |
487 | ARRAY_SIZE(mop500_pins_common)); | 466 | ARRAY_SIZE(mop500_family_pinmap)); |
488 | 467 | pinctrl_register_mappings(snowball_pinmap, | |
489 | ux500_pins_add(mop500_runtime_pins, ARRAY_SIZE(mop500_runtime_pins)); | 468 | ARRAY_SIZE(snowball_pinmap)); |
490 | 469 | pinctrl_register_mappings(u8500_pinmap, | |
491 | ux500_pins_add(mop500_runtime_pins_v60, | 470 | ARRAY_SIZE(u8500_pinmap)); |
492 | ARRAY_SIZE(mop500_runtime_pins_v60)); | 471 | } |
493 | |||
494 | nmk_config_pins(hrefv60_pins, | ||
495 | ARRAY_SIZE(hrefv60_pins)); | ||
496 | |||
497 | switch (pinsfor) { | ||
498 | case PINS_FOR_U9500: | ||
499 | nmk_config_pins(u9500_pins, ARRAY_SIZE(u9500_pins)); | ||
500 | break; | ||
501 | 472 | ||
502 | case PINS_FOR_DEFAULT: | 473 | void __init hrefv60_pinmaps_init(void) |
503 | nmk_config_pins(u8500_pins, ARRAY_SIZE(u8500_pins)); | 474 | { |
504 | default: | 475 | pinctrl_register_mappings(mop500_family_pinmap, |
505 | break; | 476 | ARRAY_SIZE(mop500_family_pinmap)); |
506 | } | 477 | pinctrl_register_mappings(hrefv60_pinmap, |
478 | ARRAY_SIZE(hrefv60_pinmap)); | ||
479 | mop500_href_family_pinmaps_init(); | ||
507 | } | 480 | } |