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