~ubuntu-branches/debian/wheezy/linux-2.6/wheezy

« back to all changes in this revision

Viewing changes to arch/arm/mach-pxa/mxm8x10.c

  • Committer: Bazaar Package Importer
  • Author(s): Ben Hutchings, Ben Hutchings, Aurelien Jarno, Martin Michlmayr
  • Date: 2011-04-06 13:53:30 UTC
  • mfrom: (43.1.5 sid)
  • Revision ID: james.westby@ubuntu.com-20110406135330-wjufxhd0tvn3zx4z
Tags: 2.6.38-3
[ Ben Hutchings ]
* [ppc64] Add to linux-tools package architectures (Closes: #620124)
* [amd64] Save cr4 to mmu_cr4_features at boot time (Closes: #620284)
* appletalk: Fix bugs introduced when removing use of BKL
* ALSA: Fix yet another race in disconnection
* cciss: Fix lost command issue
* ath9k: Fix kernel panic in AR2427
* ses: Avoid kernel panic when lun 0 is not mapped
* PCI/ACPI: Report ASPM support to BIOS if not disabled from command line

[ Aurelien Jarno ]
* rtlwifi: fix build when PCI is not enabled.

[ Martin Michlmayr ]
* rtlwifi: Eliminate udelay calls with too large values (Closes: #620204)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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 <eric.y.miao@gmail.com>
 
11
 *             rewrite to align with latest kernel
 
12
 *
 
13
 * 2010-01-09: Edwin Peer <epeer@tmtservices.co.za>
 
14
 *             Hennie van der Merwe <hvdmerwe@tmtservices.co.za>
 
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
 
 
26
#include <plat/i2c.h>
 
27
#include <plat/pxa3xx_nand.h>
 
28
 
 
29
#include <mach/pxafb.h>
 
30
#include <mach/mmc.h>
 
31
#include <mach/ohci.h>
 
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 */
 
237
        GPIO10_UTM_CLK,
 
238
        GPIO49_U2D_PHYDATA_0,
 
239
        GPIO50_U2D_PHYDATA_1,
 
240
        GPIO51_U2D_PHYDATA_2,
 
241
        GPIO52_U2D_PHYDATA_3,
 
242
        GPIO53_U2D_PHYDATA_4,
 
243
        GPIO54_U2D_PHYDATA_5,
 
244
        GPIO55_U2D_PHYDATA_6,
 
245
        GPIO56_U2D_PHYDATA_7,
 
246
        GPIO58_UTM_RXVALID,
 
247
        GPIO59_UTM_RXACTIVE,
 
248
        GPIO60_U2D_RXERROR,
 
249
        GPIO61_U2D_OPMODE0,
 
250
        GPIO62_U2D_OPMODE1,
 
251
        GPIO71_GPIO, /* USBD_INT */
 
252
        GPIO73_UTM_TXREADY,
 
253
        GPIO83_U2D_TXVALID,
 
254
        GPIO98_U2D_RESET,
 
255
        GPIO99_U2D_XCVR_SEL,
 
256
        GPIO100_U2D_TERM_SEL,
 
257
        GPIO101_U2D_SUSPEND,
 
258
        GPIO102_UTM_LINESTATE_0,
 
259
        GPIO103_UTM_LINESTATE_1,
 
260
        GPIO4_2_GPIO | MFP_PULL_HIGH, /* UTM_PULLUP */
 
261
 
 
262
        /* DM9000 */
 
263
        GPIO1_GPIO,
 
264
        GPIO9_GPIO,
 
265
        GPIO36_GPIO,
 
266
 
 
267
        /* AC97 */
 
268
        GPIO35_AC97_SDATA_IN_0,
 
269
        GPIO37_AC97_SDATA_OUT,
 
270
        GPIO38_AC97_SYNC,
 
271
        GPIO39_AC97_BITCLK,
 
272
        GPIO40_AC97_nACRESET,
 
273
 
 
274
        /* UARTS */
 
275
        GPIO41_UART1_RXD,
 
276
        GPIO42_UART1_TXD,
 
277
        GPIO43_UART1_CTS,
 
278
        GPIO44_UART1_DCD,
 
279
        GPIO45_UART1_DSR,
 
280
        GPIO46_UART1_RI,
 
281
        GPIO47_UART1_DTR,
 
282
        GPIO48_UART1_RTS,
 
283
 
 
284
        GPIO109_UART2_RTS,
 
285
        GPIO110_UART2_RXD,
 
286
        GPIO111_UART2_TXD,
 
287
        GPIO112_UART2_CTS,
 
288
 
 
289
        GPIO105_UART3_CTS,
 
290
        GPIO106_UART3_RTS,
 
291
        GPIO107_UART3_TXD,
 
292
        GPIO108_UART3_RXD,
 
293
 
 
294
        GPIO78_GPIO,
 
295
        GPIO79_GPIO,
 
296
        GPIO80_GPIO,
 
297
        GPIO81_GPIO,
 
298
 
 
299
        /* I2C */
 
300
        GPIO32_I2C_SCL,
 
301
        GPIO33_I2C_SDA,
 
302
 
 
303
        /* MMC */
 
304
        GPIO18_MMC1_DAT0,
 
305
        GPIO19_MMC1_DAT1,
 
306
        GPIO20_MMC1_DAT2,
 
307
        GPIO21_MMC1_DAT3,
 
308
        GPIO22_MMC1_CLK,
 
309
        GPIO23_MMC1_CMD,
 
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 = {
 
327
        .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
 
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
 
 
346
void __init mxm_8x10_usb_host_init(void)
 
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
 
 
356
void __init mxm_8x10_ac97_init(void)
 
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
        .parts = mxm_8x10_nand_partitions,
 
395
        .nr_parts = ARRAY_SIZE(mxm_8x10_nand_partitions)
 
396
};
 
397
 
 
398
static void __init mxm_8x10_nand_init(void)
 
399
{
 
400
        pxa3xx_set_nand_info(&mxm_8x10_nand_info);
 
401
}
 
402
#else
 
403
static inline void mxm_8x10_nand_init(void) {}
 
404
#endif /* CONFIG_MTD_NAND_PXA3xx || CONFIG_MTD_NAND_PXA3xx_MODULE */
 
405
 
 
406
/* Ethernet support: Davicom DM9000 */
 
407
static struct resource dm9k_resources[] = {
 
408
        [0] = {
 
409
               .start = MXM_8X10_ETH_PHYS + 0x300,
 
410
               .end = MXM_8X10_ETH_PHYS + 0x300,
 
411
               .flags = IORESOURCE_MEM
 
412
        },
 
413
        [1] = {
 
414
               .start = MXM_8X10_ETH_PHYS + 0x308,
 
415
               .end = MXM_8X10_ETH_PHYS + 0x308,
 
416
               .flags = IORESOURCE_MEM
 
417
        },
 
418
        [2] = {
 
419
               .start = gpio_to_irq(mfp_to_gpio(MFP_PIN_GPIO9)),
 
420
               .end = gpio_to_irq(mfp_to_gpio(MFP_PIN_GPIO9)),
 
421
               .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE
 
422
        }
 
423
};
 
424
 
 
425
static struct dm9000_plat_data dm9k_plat_data = {
 
426
        .flags = DM9000_PLATF_16BITONLY
 
427
};
 
428
 
 
429
static struct platform_device dm9k_device = {
 
430
        .name = "dm9000",
 
431
        .id = 0,
 
432
        .num_resources = ARRAY_SIZE(dm9k_resources),
 
433
        .resource = dm9k_resources,
 
434
        .dev = {
 
435
                .platform_data = &dm9k_plat_data
 
436
        }
 
437
};
 
438
 
 
439
static void __init mxm_8x10_ethernet_init(void)
 
440
{
 
441
        platform_device_register(&dm9k_device);
 
442
}
 
443
 
 
444
/* PXA UARTs */
 
445
static void __init mxm_8x10_uarts_init(void)
 
446
{
 
447
        pxa_set_ffuart_info(NULL);
 
448
        pxa_set_btuart_info(NULL);
 
449
        pxa_set_stuart_info(NULL);
 
450
}
 
451
 
 
452
/* I2C and Real Time Clock */
 
453
static struct i2c_board_info __initdata mxm_8x10_i2c_devices[] = {
 
454
        {
 
455
                I2C_BOARD_INFO("ds1337", 0x68)
 
456
        }
 
457
};
 
458
 
 
459
static void __init mxm_8x10_i2c_init(void)
 
460
{
 
461
        i2c_register_board_info(0, mxm_8x10_i2c_devices,
 
462
                                ARRAY_SIZE(mxm_8x10_i2c_devices));
 
463
        pxa_set_i2c_info(NULL);
 
464
}
 
465
 
 
466
void __init mxm_8x10_barebones_init(void)
 
467
{
 
468
        pxa3xx_mfp_config(ARRAY_AND_SIZE(mfp_cfg));
 
469
 
 
470
        mxm_8x10_uarts_init();
 
471
        mxm_8x10_nand_init();
 
472
        mxm_8x10_i2c_init();
 
473
        mxm_8x10_ethernet_init();
 
474
}