Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
mxm8x10.c
Go to the documentation of this file.
1 /*
2  * linux/arch/arm/mach-pxa/mxm8x10.c
3  *
4  * Support for the Embedian MXM-8x10 Computer on Module
5  *
6  * Copyright (C) 2006 Marvell International Ltd.
7  * Copyright (C) 2009 Embedian Inc.
8  * Copyright (C) 2009 TMT Services & Supplies (Pty) Ltd.
9  *
10  * 2007-09-04: eric miao <[email protected]>
11  * rewrite to align with latest kernel
12  *
13  * 2010-01-09: Edwin Peer <[email protected]>
14  * Hennie van der Merwe <[email protected]>
15  * rework for upstream merge
16  *
17  * This program is free software; you can redistribute it and/or modify
18  * it under the terms of the GNU General Public License version 2 as
19  * published by the Free Software Foundation.
20  */
21 
22 #include <linux/serial_8250.h>
23 #include <linux/dm9000.h>
24 #include <linux/gpio.h>
25 #include <linux/i2c/pxa-i2c.h>
26 
28 
32 #include <mach/pxa320.h>
33 
34 #include <mach/mxm8x10.h>
35 
36 #include "devices.h"
37 #include "generic.h"
38 
39 /* GPIO pin definition
40 
41 External device stuff - Leave unconfigured for now...
42 ---------------------
43 GPIO0 - DREQ (External DMA Request)
44 GPIO3 - nGCS2 (External Chip Select) Where is nGCS0; nGCS1; nGCS4; nGCS5 ?
45 GPIO4 - nGCS3
46 GPIO15 - EXT_GPIO1
47 GPIO16 - EXT_GPIO2
48 GPIO17 - EXT_GPIO3
49 GPIO24 - EXT_GPIO4
50 GPIO25 - EXT_GPIO5
51 GPIO26 - EXT_GPIO6
52 GPIO27 - EXT_GPIO7
53 GPIO28 - EXT_GPIO8
54 GPIO29 - EXT_GPIO9
55 GPIO30 - EXT_GPIO10
56 GPIO31 - EXT_GPIO11
57 GPIO57 - EXT_GPIO12
58 GPIO74 - EXT_IRQ1
59 GPIO75 - EXT_IRQ2
60 GPIO76 - EXT_IRQ3
61 GPIO77 - EXT_IRQ4
62 GPIO78 - EXT_IRQ5
63 GPIO79 - EXT_IRQ6
64 GPIO80 - EXT_IRQ7
65 GPIO81 - EXT_IRQ8
66 GPIO87 - VCCIO_PWREN (External Device PWREN)
67 
68 Dallas 1-Wire - Leave unconfigured for now...
69 -------------
70 GPIO0_2 - DS - 1Wire
71 
72 Ethernet
73 --------
74 GPIO1 - DM9000 PWR
75 GPIO9 - DM9K_nIRQ
76 GPIO36 - DM9K_RESET
77 
78 Keypad - Leave unconfigured by for now...
79 ------
80 GPIO1_2 - KP_DKIN0
81 GPIO5_2 - KP_MKOUT7
82 GPIO82 - KP_DKIN1
83 GPIO85 - KP_DKIN2
84 GPIO86 - KP_DKIN3
85 GPIO113 - KP_MKIN0
86 GPIO114 - KP_MKIN1
87 GPIO115 - KP_MKIN2
88 GPIO116 - KP_MKIN3
89 GPIO117 - KP_MKIN4
90 GPIO118 - KP_MKIN5
91 GPIO119 - KP_MKIN6
92 GPIO120 - KP_MKIN7
93 GPIO121 - KP_MKOUT0
94 GPIO122 - KP_MKOUT1
95 GPIO122 - KP_MKOUT2
96 GPIO123 - KP_MKOUT3
97 GPIO124 - KP_MKOUT4
98 GPIO125 - KP_MKOUT5
99 GPIO127 - KP_MKOUT6
100 
101 Data Bus - Leave unconfigured for now...
102 --------
103 GPIO2 - nWait (Data Bus)
104 
105 USB Device
106 ----------
107 GPIO4_2 - USBD_PULLUP
108 GPIO10 - UTM_CLK (USB Device UTM Clk)
109 GPIO49 - USB 2.0 Device UTM_DATA0
110 GPIO50 - USB 2.0 Device UTM_DATA1
111 GPIO51 - USB 2.0 Device UTM_DATA2
112 GPIO52 - USB 2.0 Device UTM_DATA3
113 GPIO53 - USB 2.0 Device UTM_DATA4
114 GPIO54 - USB 2.0 Device UTM_DATA5
115 GPIO55 - USB 2.0 Device UTM_DATA6
116 GPIO56 - USB 2.0 Device UTM_DATA7
117 GPIO58 - UTM_RXVALID (USB 2.0 Device)
118 GPIO59 - UTM_RXACTIVE (USB 2.0 Device)
119 GPIO60 - UTM_RXERROR
120 GPIO61 - UTM_OPMODE0
121 GPIO62 - UTM_OPMODE1
122 GPIO71 - USBD_INT (USB Device?)
123 GPIO73 - UTM_TXREADY (USB 2.0 Device)
124 GPIO83 - UTM_TXVALID (USB 2.0 Device)
125 GPIO98 - UTM_RESET (USB 2.0 device)
126 GPIO99 - UTM_XCVR_SELECT
127 GPIO100 - UTM_TERM_SELECT
128 GPIO101 - UTM_SUSPENDM_X
129 GPIO102 - UTM_LINESTATE0
130 GPIO103 - UTM_LINESTATE1
131 
132 Card-Bus Interface - Leave unconfigured for now...
133 ------------------
134 GPIO5 - nPIOR (I/O space output enable)
135 GPIO6 - nPIOW (I/O space write enable)
136 GPIO7 - nIOS16 (Input from I/O space telling size of data bus)
137 GPIO8 - nPWAIT (Input for inserting wait states)
138 
139 LCD
140 ---
141 GPIO6_2 - LDD0
142 GPIO7_2 - LDD1
143 GPIO8_2 - LDD2
144 GPIO9_2 - LDD3
145 GPIO11_2 - LDD5
146 GPIO12_2 - LDD6
147 GPIO13_2 - LDD7
148 GPIO14_2 - VSYNC
149 GPIO15_2 - HSYNC
150 GPIO16_2 - VCLK
151 GPIO17_2 - HCLK
152 GPIO18_2 - VDEN
153 GPIO63 - LDD8 (CPU LCD)
154 GPIO64 - LDD9 (CPU LCD)
155 GPIO65 - LDD10 (CPU LCD)
156 GPIO66 - LDD11 (CPU LCD)
157 GPIO67 - LDD12 (CPU LCD)
158 GPIO68 - LDD13 (CPU LCD)
159 GPIO69 - LDD14 (CPU LCD)
160 GPIO70 - LDD15 (CPU LCD)
161 GPIO88 - VCCLCD_PWREN (LCD Panel PWREN)
162 GPIO97 - BACKLIGHT_EN
163 GPIO104 - LCD_PWREN
164 
165 PWM - Leave unconfigured for now...
166 ---
167 GPIO11 - PWM0
168 GPIO12 - PWM1
169 GPIO13 - PWM2
170 GPIO14 - PWM3
171 
172 SD-CARD
173 -------
174 GPIO18 - SDDATA0
175 GPIO19 - SDDATA1
176 GPIO20 - SDDATA2
177 GPIO21 - SDDATA3
178 GPIO22 - SDCLK
179 GPIO23 - SDCMD
180 GPIO72 - SD_WP
181 GPIO84 - SD_nIRQ_CD (SD-Card)
182 
183 I2C
184 ---
185 GPIO32 - I2CSCL
186 GPIO33 - I2CSDA
187 
188 AC97
189 ----
190 GPIO35 - AC97_SDATA_IN
191 GPIO37 - AC97_SDATA_OUT
192 GPIO38 - AC97_SYNC
193 GPIO39 - AC97_BITCLK
194 GPIO40 - AC97_nRESET
195 
196 UART1
197 -----
198 GPIO41 - UART_RXD1
199 GPIO42 - UART_TXD1
200 GPIO43 - UART_CTS1
201 GPIO44 - UART_DCD1
202 GPIO45 - UART_DSR1
203 GPIO46 - UART_nRI1
204 GPIO47 - UART_DTR1
205 GPIO48 - UART_RTS1
206 
207 UART2
208 -----
209 GPIO109 - RTS2
210 GPIO110 - RXD2
211 GPIO111 - TXD2
212 GPIO112 - nCTS2
213 
214 UART3
215 -----
216 GPIO105 - nCTS3
217 GPIO106 - nRTS3
218 GPIO107 - TXD3
219 GPIO108 - RXD3
220 
221 SSP3 - Leave unconfigured for now...
222 ----
223 GPIO89 - SSP3_CLK
224 GPIO90 - SSP3_SFRM
225 GPIO91 - SSP3_TXD
226 GPIO92 - SSP3_RXD
227 
228 SSP4
229 GPIO93 - SSP4_CLK
230 GPIO94 - SSP4_SFRM
231 GPIO95 - SSP4_TXD
232 GPIO96 - SSP4_RXD
233 */
234 
235 static mfp_cfg_t mfp_cfg[] __initdata = {
236  /* USB */
251  GPIO71_GPIO, /* USBD_INT */
260  GPIO4_2_GPIO | MFP_PULL_HIGH, /* UTM_PULLUP */
261 
262  /* DM9000 */
263  GPIO1_GPIO,
264  GPIO9_GPIO,
265  GPIO36_GPIO,
266 
267  /* AC97 */
273 
274  /* UARTS */
283 
288 
293 
294  GPIO78_GPIO,
295  GPIO79_GPIO,
296  GPIO80_GPIO,
297  GPIO81_GPIO,
298 
299  /* I2C */
302 
303  /* MMC */
310  GPIO72_GPIO | MFP_PULL_HIGH, /* Card Detect */
311  GPIO84_GPIO | MFP_PULL_LOW, /* Write Protect */
312 
313  /* IRQ */
314  GPIO74_GPIO | MFP_LPM_EDGE_RISE, /* EXT_IRQ1 */
315  GPIO75_GPIO | MFP_LPM_EDGE_RISE, /* EXT_IRQ2 */
316  GPIO76_GPIO | MFP_LPM_EDGE_RISE, /* EXT_IRQ3 */
317  GPIO77_GPIO | MFP_LPM_EDGE_RISE, /* EXT_IRQ4 */
318  GPIO78_GPIO | MFP_LPM_EDGE_RISE, /* EXT_IRQ5 */
319  GPIO79_GPIO | MFP_LPM_EDGE_RISE, /* EXT_IRQ6 */
320  GPIO80_GPIO | MFP_LPM_EDGE_RISE, /* EXT_IRQ7 */
321  GPIO81_GPIO | MFP_LPM_EDGE_RISE /* EXT_IRQ8 */
322 };
323 
324 /* MMC/MCI Support */
325 #if defined(CONFIG_MMC)
326 static struct pxamci_platform_data mxm_8x10_mci_platform_data = {
328  .detect_delay_ms = 10,
329  .gpio_card_detect = MXM_8X10_SD_nCD,
330  .gpio_card_ro = MXM_8X10_SD_WP,
331  .gpio_power = -1
332 };
333 
334 void __init mxm_8x10_mmc_init(void)
335 {
336  pxa_set_mci_info(&mxm_8x10_mci_platform_data);
337 }
338 #endif
339 
340 /* USB Open Host Controller Interface */
341 static struct pxaohci_platform_data mxm_8x10_ohci_platform_data = {
342  .port_mode = PMM_NPS_MODE,
343  .flags = ENABLE_PORT_ALL
344 };
345 
347 {
348  pxa_set_ohci_info(&mxm_8x10_ohci_platform_data);
349 }
350 
351 /* AC97 Sound Support */
352 static struct platform_device mxm_8x10_ac97_device = {
353  .name = "pxa2xx-ac97"
354 };
355 
357 {
358  platform_device_register(&mxm_8x10_ac97_device);
359 }
360 
361 /* NAND flash Support */
362 #if defined(CONFIG_MTD_NAND_PXA3xx) || defined(CONFIG_MTD_NAND_PXA3xx_MODULE)
363 #define NAND_BLOCK_SIZE SZ_128K
364 #define NB(x) (NAND_BLOCK_SIZE * (x))
365 static struct mtd_partition mxm_8x10_nand_partitions[] = {
366  [0] = {
367  .name = "boot",
368  .size = NB(0x002),
369  .offset = NB(0x000),
370  .mask_flags = MTD_WRITEABLE
371  },
372  [1] = {
373  .name = "kernel",
374  .size = NB(0x010),
375  .offset = NB(0x002),
376  .mask_flags = MTD_WRITEABLE
377  },
378  [2] = {
379  .name = "root",
380  .size = NB(0x36c),
381  .offset = NB(0x012)
382  },
383  [3] = {
384  .name = "bbt",
385  .size = NB(0x082),
386  .offset = NB(0x37e),
387  .mask_flags = MTD_WRITEABLE
388  }
389 };
390 
391 static struct pxa3xx_nand_platform_data mxm_8x10_nand_info = {
392  .enable_arbiter = 1,
393  .keep_config = 1,
394  .num_cs = 1,
395  .parts[0] = mxm_8x10_nand_partitions,
396  .nr_parts[0] = ARRAY_SIZE(mxm_8x10_nand_partitions)
397 };
398 
399 static void __init mxm_8x10_nand_init(void)
400 {
401  pxa3xx_set_nand_info(&mxm_8x10_nand_info);
402 }
403 #else
404 static inline void mxm_8x10_nand_init(void) {}
405 #endif /* CONFIG_MTD_NAND_PXA3xx || CONFIG_MTD_NAND_PXA3xx_MODULE */
406 
407 /* Ethernet support: Davicom DM9000 */
408 static struct resource dm9k_resources[] = {
409  [0] = {
410  .start = MXM_8X10_ETH_PHYS + 0x300,
411  .end = MXM_8X10_ETH_PHYS + 0x300,
412  .flags = IORESOURCE_MEM
413  },
414  [1] = {
415  .start = MXM_8X10_ETH_PHYS + 0x308,
416  .end = MXM_8X10_ETH_PHYS + 0x308,
417  .flags = IORESOURCE_MEM
418  },
419  [2] = {
423  }
424 };
425 
426 static struct dm9000_plat_data dm9k_plat_data = {
427  .flags = DM9000_PLATF_16BITONLY
428 };
429 
430 static struct platform_device dm9k_device = {
431  .name = "dm9000",
432  .id = 0,
433  .num_resources = ARRAY_SIZE(dm9k_resources),
434  .resource = dm9k_resources,
435  .dev = {
436  .platform_data = &dm9k_plat_data
437  }
438 };
439 
440 static void __init mxm_8x10_ethernet_init(void)
441 {
442  platform_device_register(&dm9k_device);
443 }
444 
445 /* PXA UARTs */
446 static void __init mxm_8x10_uarts_init(void)
447 {
451 }
452 
453 /* I2C and Real Time Clock */
454 static struct i2c_board_info __initdata mxm_8x10_i2c_devices[] = {
455  {
456  I2C_BOARD_INFO("ds1337", 0x68)
457  }
458 };
459 
460 static void __init mxm_8x10_i2c_init(void)
461 {
462  i2c_register_board_info(0, mxm_8x10_i2c_devices,
463  ARRAY_SIZE(mxm_8x10_i2c_devices));
465 }
466 
468 {
469  pxa3xx_mfp_config(ARRAY_AND_SIZE(mfp_cfg));
470 
471  mxm_8x10_uarts_init();
472  mxm_8x10_nand_init();
473  mxm_8x10_i2c_init();
474  mxm_8x10_ethernet_init();
475 }