diff options
Diffstat (limited to 'arch/arm/mach-spear3xx/spear300.c')
-rw-r--r-- | arch/arm/mach-spear3xx/spear300.c | 389 |
1 files changed, 1 insertions, 388 deletions
diff --git a/arch/arm/mach-spear3xx/spear300.c b/arch/arm/mach-spear3xx/spear300.c index febcdd8d4e92..f75fe25a620c 100644 --- a/arch/arm/mach-spear3xx/spear300.c +++ b/arch/arm/mach-spear3xx/spear300.c | |||
@@ -60,357 +60,6 @@ | |||
60 | /* IRQs sharing IRQ_INTRCOMM_RAS_ARM */ | 60 | /* IRQs sharing IRQ_INTRCOMM_RAS_ARM */ |
61 | #define SPEAR300_IRQ_SDHCI SPEAR3XX_IRQ_INTRCOMM_RAS_ARM | 61 | #define SPEAR300_IRQ_SDHCI SPEAR3XX_IRQ_INTRCOMM_RAS_ARM |
62 | 62 | ||
63 | /* pad multiplexing support */ | ||
64 | /* muxing registers */ | ||
65 | #define PAD_MUX_CONFIG_REG 0x00 | ||
66 | #define MODE_CONFIG_REG 0x04 | ||
67 | |||
68 | /* modes */ | ||
69 | #define NAND_MODE (1 << 0) | ||
70 | #define NOR_MODE (1 << 1) | ||
71 | #define PHOTO_FRAME_MODE (1 << 2) | ||
72 | #define LEND_IP_PHONE_MODE (1 << 3) | ||
73 | #define HEND_IP_PHONE_MODE (1 << 4) | ||
74 | #define LEND_WIFI_PHONE_MODE (1 << 5) | ||
75 | #define HEND_WIFI_PHONE_MODE (1 << 6) | ||
76 | #define ATA_PABX_WI2S_MODE (1 << 7) | ||
77 | #define ATA_PABX_I2S_MODE (1 << 8) | ||
78 | #define CAML_LCDW_MODE (1 << 9) | ||
79 | #define CAMU_LCD_MODE (1 << 10) | ||
80 | #define CAMU_WLCD_MODE (1 << 11) | ||
81 | #define CAML_LCD_MODE (1 << 12) | ||
82 | #define ALL_MODES 0x1FFF | ||
83 | |||
84 | struct pmx_mode spear300_nand_mode = { | ||
85 | .id = NAND_MODE, | ||
86 | .name = "nand mode", | ||
87 | .mask = 0x00, | ||
88 | }; | ||
89 | |||
90 | struct pmx_mode spear300_nor_mode = { | ||
91 | .id = NOR_MODE, | ||
92 | .name = "nor mode", | ||
93 | .mask = 0x01, | ||
94 | }; | ||
95 | |||
96 | struct pmx_mode spear300_photo_frame_mode = { | ||
97 | .id = PHOTO_FRAME_MODE, | ||
98 | .name = "photo frame mode", | ||
99 | .mask = 0x02, | ||
100 | }; | ||
101 | |||
102 | struct pmx_mode spear300_lend_ip_phone_mode = { | ||
103 | .id = LEND_IP_PHONE_MODE, | ||
104 | .name = "lend ip phone mode", | ||
105 | .mask = 0x03, | ||
106 | }; | ||
107 | |||
108 | struct pmx_mode spear300_hend_ip_phone_mode = { | ||
109 | .id = HEND_IP_PHONE_MODE, | ||
110 | .name = "hend ip phone mode", | ||
111 | .mask = 0x04, | ||
112 | }; | ||
113 | |||
114 | struct pmx_mode spear300_lend_wifi_phone_mode = { | ||
115 | .id = LEND_WIFI_PHONE_MODE, | ||
116 | .name = "lend wifi phone mode", | ||
117 | .mask = 0x05, | ||
118 | }; | ||
119 | |||
120 | struct pmx_mode spear300_hend_wifi_phone_mode = { | ||
121 | .id = HEND_WIFI_PHONE_MODE, | ||
122 | .name = "hend wifi phone mode", | ||
123 | .mask = 0x06, | ||
124 | }; | ||
125 | |||
126 | struct pmx_mode spear300_ata_pabx_wi2s_mode = { | ||
127 | .id = ATA_PABX_WI2S_MODE, | ||
128 | .name = "ata pabx wi2s mode", | ||
129 | .mask = 0x07, | ||
130 | }; | ||
131 | |||
132 | struct pmx_mode spear300_ata_pabx_i2s_mode = { | ||
133 | .id = ATA_PABX_I2S_MODE, | ||
134 | .name = "ata pabx i2s mode", | ||
135 | .mask = 0x08, | ||
136 | }; | ||
137 | |||
138 | struct pmx_mode spear300_caml_lcdw_mode = { | ||
139 | .id = CAML_LCDW_MODE, | ||
140 | .name = "caml lcdw mode", | ||
141 | .mask = 0x0C, | ||
142 | }; | ||
143 | |||
144 | struct pmx_mode spear300_camu_lcd_mode = { | ||
145 | .id = CAMU_LCD_MODE, | ||
146 | .name = "camu lcd mode", | ||
147 | .mask = 0x0D, | ||
148 | }; | ||
149 | |||
150 | struct pmx_mode spear300_camu_wlcd_mode = { | ||
151 | .id = CAMU_WLCD_MODE, | ||
152 | .name = "camu wlcd mode", | ||
153 | .mask = 0x0E, | ||
154 | }; | ||
155 | |||
156 | struct pmx_mode spear300_caml_lcd_mode = { | ||
157 | .id = CAML_LCD_MODE, | ||
158 | .name = "caml lcd mode", | ||
159 | .mask = 0x0F, | ||
160 | }; | ||
161 | |||
162 | /* devices */ | ||
163 | static struct pmx_dev_mode pmx_fsmc_2_chips_modes[] = { | ||
164 | { | ||
165 | .ids = NAND_MODE | NOR_MODE | PHOTO_FRAME_MODE | | ||
166 | ATA_PABX_WI2S_MODE | ATA_PABX_I2S_MODE, | ||
167 | .mask = PMX_FIRDA_MASK, | ||
168 | }, | ||
169 | }; | ||
170 | |||
171 | struct pmx_dev spear300_pmx_fsmc_2_chips = { | ||
172 | .name = "fsmc_2_chips", | ||
173 | .modes = pmx_fsmc_2_chips_modes, | ||
174 | .mode_count = ARRAY_SIZE(pmx_fsmc_2_chips_modes), | ||
175 | .enb_on_reset = 1, | ||
176 | }; | ||
177 | |||
178 | static struct pmx_dev_mode pmx_fsmc_4_chips_modes[] = { | ||
179 | { | ||
180 | .ids = NAND_MODE | NOR_MODE | PHOTO_FRAME_MODE | | ||
181 | ATA_PABX_WI2S_MODE | ATA_PABX_I2S_MODE, | ||
182 | .mask = PMX_FIRDA_MASK | PMX_UART0_MASK, | ||
183 | }, | ||
184 | }; | ||
185 | |||
186 | struct pmx_dev spear300_pmx_fsmc_4_chips = { | ||
187 | .name = "fsmc_4_chips", | ||
188 | .modes = pmx_fsmc_4_chips_modes, | ||
189 | .mode_count = ARRAY_SIZE(pmx_fsmc_4_chips_modes), | ||
190 | .enb_on_reset = 1, | ||
191 | }; | ||
192 | |||
193 | static struct pmx_dev_mode pmx_keyboard_modes[] = { | ||
194 | { | ||
195 | .ids = LEND_IP_PHONE_MODE | HEND_IP_PHONE_MODE | | ||
196 | LEND_WIFI_PHONE_MODE | HEND_WIFI_PHONE_MODE | | ||
197 | CAML_LCDW_MODE | CAMU_LCD_MODE | CAMU_WLCD_MODE | | ||
198 | CAML_LCD_MODE, | ||
199 | .mask = 0x0, | ||
200 | }, | ||
201 | }; | ||
202 | |||
203 | struct pmx_dev spear300_pmx_keyboard = { | ||
204 | .name = "keyboard", | ||
205 | .modes = pmx_keyboard_modes, | ||
206 | .mode_count = ARRAY_SIZE(pmx_keyboard_modes), | ||
207 | .enb_on_reset = 1, | ||
208 | }; | ||
209 | |||
210 | static struct pmx_dev_mode pmx_clcd_modes[] = { | ||
211 | { | ||
212 | .ids = PHOTO_FRAME_MODE, | ||
213 | .mask = PMX_TIMER_1_2_MASK | PMX_TIMER_3_4_MASK , | ||
214 | }, { | ||
215 | .ids = HEND_IP_PHONE_MODE | HEND_WIFI_PHONE_MODE | | ||
216 | CAMU_LCD_MODE | CAML_LCD_MODE, | ||
217 | .mask = PMX_TIMER_3_4_MASK, | ||
218 | }, | ||
219 | }; | ||
220 | |||
221 | struct pmx_dev spear300_pmx_clcd = { | ||
222 | .name = "clcd", | ||
223 | .modes = pmx_clcd_modes, | ||
224 | .mode_count = ARRAY_SIZE(pmx_clcd_modes), | ||
225 | .enb_on_reset = 1, | ||
226 | }; | ||
227 | |||
228 | static struct pmx_dev_mode pmx_telecom_gpio_modes[] = { | ||
229 | { | ||
230 | .ids = PHOTO_FRAME_MODE | CAMU_LCD_MODE | CAML_LCD_MODE, | ||
231 | .mask = PMX_MII_MASK, | ||
232 | }, { | ||
233 | .ids = LEND_IP_PHONE_MODE | LEND_WIFI_PHONE_MODE, | ||
234 | .mask = PMX_MII_MASK | PMX_TIMER_1_2_MASK | PMX_TIMER_3_4_MASK, | ||
235 | }, { | ||
236 | .ids = ATA_PABX_I2S_MODE | CAML_LCDW_MODE | CAMU_WLCD_MODE, | ||
237 | .mask = PMX_MII_MASK | PMX_TIMER_3_4_MASK, | ||
238 | }, { | ||
239 | .ids = HEND_IP_PHONE_MODE | HEND_WIFI_PHONE_MODE, | ||
240 | .mask = PMX_MII_MASK | PMX_TIMER_1_2_MASK, | ||
241 | }, { | ||
242 | .ids = ATA_PABX_WI2S_MODE, | ||
243 | .mask = PMX_MII_MASK | PMX_TIMER_1_2_MASK | PMX_TIMER_3_4_MASK | ||
244 | | PMX_UART0_MODEM_MASK, | ||
245 | }, | ||
246 | }; | ||
247 | |||
248 | struct pmx_dev spear300_pmx_telecom_gpio = { | ||
249 | .name = "telecom_gpio", | ||
250 | .modes = pmx_telecom_gpio_modes, | ||
251 | .mode_count = ARRAY_SIZE(pmx_telecom_gpio_modes), | ||
252 | .enb_on_reset = 1, | ||
253 | }; | ||
254 | |||
255 | static struct pmx_dev_mode pmx_telecom_tdm_modes[] = { | ||
256 | { | ||
257 | .ids = PHOTO_FRAME_MODE | LEND_IP_PHONE_MODE | | ||
258 | HEND_IP_PHONE_MODE | LEND_WIFI_PHONE_MODE | ||
259 | | HEND_WIFI_PHONE_MODE | ATA_PABX_WI2S_MODE | ||
260 | | ATA_PABX_I2S_MODE | CAML_LCDW_MODE | CAMU_LCD_MODE | ||
261 | | CAMU_WLCD_MODE | CAML_LCD_MODE, | ||
262 | .mask = PMX_UART0_MODEM_MASK | PMX_SSP_CS_MASK, | ||
263 | }, | ||
264 | }; | ||
265 | |||
266 | struct pmx_dev spear300_pmx_telecom_tdm = { | ||
267 | .name = "telecom_tdm", | ||
268 | .modes = pmx_telecom_tdm_modes, | ||
269 | .mode_count = ARRAY_SIZE(pmx_telecom_tdm_modes), | ||
270 | .enb_on_reset = 1, | ||
271 | }; | ||
272 | |||
273 | static struct pmx_dev_mode pmx_telecom_spi_cs_i2c_clk_modes[] = { | ||
274 | { | ||
275 | .ids = LEND_IP_PHONE_MODE | HEND_IP_PHONE_MODE | | ||
276 | LEND_WIFI_PHONE_MODE | HEND_WIFI_PHONE_MODE | ||
277 | | ATA_PABX_WI2S_MODE | ATA_PABX_I2S_MODE | | ||
278 | CAML_LCDW_MODE | CAML_LCD_MODE, | ||
279 | .mask = PMX_TIMER_1_2_MASK | PMX_TIMER_3_4_MASK, | ||
280 | }, | ||
281 | }; | ||
282 | |||
283 | struct pmx_dev spear300_pmx_telecom_spi_cs_i2c_clk = { | ||
284 | .name = "telecom_spi_cs_i2c_clk", | ||
285 | .modes = pmx_telecom_spi_cs_i2c_clk_modes, | ||
286 | .mode_count = ARRAY_SIZE(pmx_telecom_spi_cs_i2c_clk_modes), | ||
287 | .enb_on_reset = 1, | ||
288 | }; | ||
289 | |||
290 | static struct pmx_dev_mode pmx_telecom_camera_modes[] = { | ||
291 | { | ||
292 | .ids = CAML_LCDW_MODE | CAML_LCD_MODE, | ||
293 | .mask = PMX_MII_MASK, | ||
294 | }, { | ||
295 | .ids = CAMU_LCD_MODE | CAMU_WLCD_MODE, | ||
296 | .mask = PMX_TIMER_1_2_MASK | PMX_TIMER_3_4_MASK | PMX_MII_MASK, | ||
297 | }, | ||
298 | }; | ||
299 | |||
300 | struct pmx_dev spear300_pmx_telecom_camera = { | ||
301 | .name = "telecom_camera", | ||
302 | .modes = pmx_telecom_camera_modes, | ||
303 | .mode_count = ARRAY_SIZE(pmx_telecom_camera_modes), | ||
304 | .enb_on_reset = 1, | ||
305 | }; | ||
306 | |||
307 | static struct pmx_dev_mode pmx_telecom_dac_modes[] = { | ||
308 | { | ||
309 | .ids = ATA_PABX_I2S_MODE | CAML_LCDW_MODE | CAMU_LCD_MODE | ||
310 | | CAMU_WLCD_MODE | CAML_LCD_MODE, | ||
311 | .mask = PMX_TIMER_1_2_MASK, | ||
312 | }, | ||
313 | }; | ||
314 | |||
315 | struct pmx_dev spear300_pmx_telecom_dac = { | ||
316 | .name = "telecom_dac", | ||
317 | .modes = pmx_telecom_dac_modes, | ||
318 | .mode_count = ARRAY_SIZE(pmx_telecom_dac_modes), | ||
319 | .enb_on_reset = 1, | ||
320 | }; | ||
321 | |||
322 | static struct pmx_dev_mode pmx_telecom_i2s_modes[] = { | ||
323 | { | ||
324 | .ids = LEND_IP_PHONE_MODE | HEND_IP_PHONE_MODE | ||
325 | | LEND_WIFI_PHONE_MODE | HEND_WIFI_PHONE_MODE | | ||
326 | ATA_PABX_I2S_MODE | CAML_LCDW_MODE | CAMU_LCD_MODE | ||
327 | | CAMU_WLCD_MODE | CAML_LCD_MODE, | ||
328 | .mask = PMX_UART0_MODEM_MASK, | ||
329 | }, | ||
330 | }; | ||
331 | |||
332 | struct pmx_dev spear300_pmx_telecom_i2s = { | ||
333 | .name = "telecom_i2s", | ||
334 | .modes = pmx_telecom_i2s_modes, | ||
335 | .mode_count = ARRAY_SIZE(pmx_telecom_i2s_modes), | ||
336 | .enb_on_reset = 1, | ||
337 | }; | ||
338 | |||
339 | static struct pmx_dev_mode pmx_telecom_boot_pins_modes[] = { | ||
340 | { | ||
341 | .ids = NAND_MODE | NOR_MODE, | ||
342 | .mask = PMX_UART0_MODEM_MASK | PMX_TIMER_1_2_MASK | | ||
343 | PMX_TIMER_3_4_MASK, | ||
344 | }, | ||
345 | }; | ||
346 | |||
347 | struct pmx_dev spear300_pmx_telecom_boot_pins = { | ||
348 | .name = "telecom_boot_pins", | ||
349 | .modes = pmx_telecom_boot_pins_modes, | ||
350 | .mode_count = ARRAY_SIZE(pmx_telecom_boot_pins_modes), | ||
351 | .enb_on_reset = 1, | ||
352 | }; | ||
353 | |||
354 | static struct pmx_dev_mode pmx_telecom_sdhci_4bit_modes[] = { | ||
355 | { | ||
356 | .ids = PHOTO_FRAME_MODE | LEND_IP_PHONE_MODE | | ||
357 | HEND_IP_PHONE_MODE | LEND_WIFI_PHONE_MODE | | ||
358 | HEND_WIFI_PHONE_MODE | CAML_LCDW_MODE | CAMU_LCD_MODE | | ||
359 | CAMU_WLCD_MODE | CAML_LCD_MODE | ATA_PABX_WI2S_MODE | | ||
360 | ATA_PABX_I2S_MODE, | ||
361 | .mask = PMX_GPIO_PIN0_MASK | PMX_GPIO_PIN1_MASK | | ||
362 | PMX_GPIO_PIN2_MASK | PMX_GPIO_PIN3_MASK | | ||
363 | PMX_GPIO_PIN4_MASK | PMX_GPIO_PIN5_MASK, | ||
364 | }, | ||
365 | }; | ||
366 | |||
367 | struct pmx_dev spear300_pmx_telecom_sdhci_4bit = { | ||
368 | .name = "telecom_sdhci_4bit", | ||
369 | .modes = pmx_telecom_sdhci_4bit_modes, | ||
370 | .mode_count = ARRAY_SIZE(pmx_telecom_sdhci_4bit_modes), | ||
371 | .enb_on_reset = 1, | ||
372 | }; | ||
373 | |||
374 | static struct pmx_dev_mode pmx_telecom_sdhci_8bit_modes[] = { | ||
375 | { | ||
376 | .ids = PHOTO_FRAME_MODE | LEND_IP_PHONE_MODE | | ||
377 | HEND_IP_PHONE_MODE | LEND_WIFI_PHONE_MODE | | ||
378 | HEND_WIFI_PHONE_MODE | CAML_LCDW_MODE | CAMU_LCD_MODE | | ||
379 | CAMU_WLCD_MODE | CAML_LCD_MODE, | ||
380 | .mask = PMX_GPIO_PIN0_MASK | PMX_GPIO_PIN1_MASK | | ||
381 | PMX_GPIO_PIN2_MASK | PMX_GPIO_PIN3_MASK | | ||
382 | PMX_GPIO_PIN4_MASK | PMX_GPIO_PIN5_MASK | PMX_MII_MASK, | ||
383 | }, | ||
384 | }; | ||
385 | |||
386 | struct pmx_dev spear300_pmx_telecom_sdhci_8bit = { | ||
387 | .name = "telecom_sdhci_8bit", | ||
388 | .modes = pmx_telecom_sdhci_8bit_modes, | ||
389 | .mode_count = ARRAY_SIZE(pmx_telecom_sdhci_8bit_modes), | ||
390 | .enb_on_reset = 1, | ||
391 | }; | ||
392 | |||
393 | static struct pmx_dev_mode pmx_gpio1_modes[] = { | ||
394 | { | ||
395 | .ids = PHOTO_FRAME_MODE, | ||
396 | .mask = PMX_UART0_MODEM_MASK | PMX_TIMER_1_2_MASK | | ||
397 | PMX_TIMER_3_4_MASK, | ||
398 | }, | ||
399 | }; | ||
400 | |||
401 | struct pmx_dev spear300_pmx_gpio1 = { | ||
402 | .name = "arm gpio1", | ||
403 | .modes = pmx_gpio1_modes, | ||
404 | .mode_count = ARRAY_SIZE(pmx_gpio1_modes), | ||
405 | .enb_on_reset = 1, | ||
406 | }; | ||
407 | |||
408 | /* pmx driver structure */ | ||
409 | static struct pmx_driver pmx_driver = { | ||
410 | .mode_reg = {.offset = MODE_CONFIG_REG, .mask = 0x0000000f}, | ||
411 | .mux_reg = {.offset = PAD_MUX_CONFIG_REG, .mask = 0x00007fff}, | ||
412 | }; | ||
413 | |||
414 | /* spear3xx shared irq */ | 63 | /* spear3xx shared irq */ |
415 | static struct shirq_dev_config shirq_ras1_config[] = { | 64 | static struct shirq_dev_config shirq_ras1_config[] = { |
416 | { | 65 | { |
@@ -464,22 +113,6 @@ static struct spear_shirq shirq_ras1 = { | |||
464 | }, | 113 | }, |
465 | }; | 114 | }; |
466 | 115 | ||
467 | /* padmux devices to enable */ | ||
468 | static struct pmx_dev *spear300_evb_pmx_devs[] = { | ||
469 | /* spear3xx specific devices */ | ||
470 | &spear3xx_pmx_i2c, | ||
471 | &spear3xx_pmx_ssp_cs, | ||
472 | &spear3xx_pmx_ssp, | ||
473 | &spear3xx_pmx_mii, | ||
474 | &spear3xx_pmx_uart0, | ||
475 | |||
476 | /* spear300 specific devices */ | ||
477 | &spear300_pmx_fsmc_2_chips, | ||
478 | &spear300_pmx_clcd, | ||
479 | &spear300_pmx_telecom_sdhci_4bit, | ||
480 | &spear300_pmx_gpio1, | ||
481 | }; | ||
482 | |||
483 | /* DMAC platform data's slave info */ | 116 | /* DMAC platform data's slave info */ |
484 | struct pl08x_channel_data spear300_dma_info[] = { | 117 | struct pl08x_channel_data spear300_dma_info[] = { |
485 | { | 118 | { |
@@ -678,7 +311,7 @@ static struct of_dev_auxdata spear300_auxdata_lookup[] __initdata = { | |||
678 | 311 | ||
679 | static void __init spear300_dt_init(void) | 312 | static void __init spear300_dt_init(void) |
680 | { | 313 | { |
681 | int ret = -EINVAL; | 314 | int ret; |
682 | 315 | ||
683 | pl080_plat_data.slave_channels = spear300_dma_info; | 316 | pl080_plat_data.slave_channels = spear300_dma_info; |
684 | pl080_plat_data.num_slave_channels = ARRAY_SIZE(spear300_dma_info); | 317 | pl080_plat_data.num_slave_channels = ARRAY_SIZE(spear300_dma_info); |
@@ -693,26 +326,6 @@ static void __init spear300_dt_init(void) | |||
693 | if (ret) | 326 | if (ret) |
694 | pr_err("Error registering Shared IRQ\n"); | 327 | pr_err("Error registering Shared IRQ\n"); |
695 | } | 328 | } |
696 | |||
697 | if (of_machine_is_compatible("st,spear300-evb")) { | ||
698 | /* pmx initialization */ | ||
699 | pmx_driver.mode = &spear300_photo_frame_mode; | ||
700 | pmx_driver.devs = spear300_evb_pmx_devs; | ||
701 | pmx_driver.devs_count = ARRAY_SIZE(spear300_evb_pmx_devs); | ||
702 | |||
703 | pmx_driver.base = ioremap(SPEAR300_SOC_CONFIG_BASE, SZ_4K); | ||
704 | if (pmx_driver.base) { | ||
705 | ret = pmx_register(&pmx_driver); | ||
706 | if (ret) | ||
707 | pr_err("padmux: registration failed. err no: %d\n", | ||
708 | ret); | ||
709 | /* Free Mapping, device selection already done */ | ||
710 | iounmap(pmx_driver.base); | ||
711 | } | ||
712 | |||
713 | if (ret) | ||
714 | pr_err("Initialization Failed"); | ||
715 | } | ||
716 | } | 329 | } |
717 | 330 | ||
718 | static const char * const spear300_dt_board_compat[] = { | 331 | static const char * const spear300_dt_board_compat[] = { |