1 // SPDX-License-Identifier: GPL-2.0-only
3 * linux/arch/arm/mach-pxa/mxm8x10.c
5 * Support for the Embedian MXM-8x10 Computer on Module
7 * Copyright (C) 2006 Marvell International Ltd.
8 * Copyright (C) 2009 Embedian Inc.
9 * Copyright (C) 2009 TMT Services & Supplies (Pty) Ltd.
11 * 2007-09-04: eric miao <eric.y.miao@gmail.com>
12 * rewrite to align with latest kernel
14 * 2010-01-09: Edwin Peer <epeer@tmtservices.co.za>
15 * Hennie van der Merwe <hvdmerwe@tmtservices.co.za>
16 * rework for upstream merge
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>
24 #include <linux/platform_data/mtd-nand-pxa3xx.h>
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 <linux/platform_data/asoc-pxa.h>
37 /* GPIO pin definition
39 External device stuff - Leave unconfigured for now...
41 GPIO0 - DREQ (External DMA Request)
42 GPIO3 - nGCS2 (External Chip Select) Where is nGCS0; nGCS1; nGCS4; nGCS5 ?
64 GPIO87 - VCCIO_PWREN (External Device PWREN)
66 Dallas 1-Wire - Leave unconfigured for now...
76 Keypad - Leave unconfigured by for now...
99 Data Bus - Leave unconfigured for now...
101 GPIO2 - nWait (Data Bus)
105 GPIO4_2 - USBD_PULLUP
106 GPIO10 - UTM_CLK (USB Device UTM Clk)
107 GPIO49 - USB 2.0 Device UTM_DATA0
108 GPIO50 - USB 2.0 Device UTM_DATA1
109 GPIO51 - USB 2.0 Device UTM_DATA2
110 GPIO52 - USB 2.0 Device UTM_DATA3
111 GPIO53 - USB 2.0 Device UTM_DATA4
112 GPIO54 - USB 2.0 Device UTM_DATA5
113 GPIO55 - USB 2.0 Device UTM_DATA6
114 GPIO56 - USB 2.0 Device UTM_DATA7
115 GPIO58 - UTM_RXVALID (USB 2.0 Device)
116 GPIO59 - UTM_RXACTIVE (USB 2.0 Device)
120 GPIO71 - USBD_INT (USB Device?)
121 GPIO73 - UTM_TXREADY (USB 2.0 Device)
122 GPIO83 - UTM_TXVALID (USB 2.0 Device)
123 GPIO98 - UTM_RESET (USB 2.0 device)
124 GPIO99 - UTM_XCVR_SELECT
125 GPIO100 - UTM_TERM_SELECT
126 GPIO101 - UTM_SUSPENDM_X
127 GPIO102 - UTM_LINESTATE0
128 GPIO103 - UTM_LINESTATE1
130 Card-Bus Interface - Leave unconfigured for now...
132 GPIO5 - nPIOR (I/O space output enable)
133 GPIO6 - nPIOW (I/O space write enable)
134 GPIO7 - nIOS16 (Input from I/O space telling size of data bus)
135 GPIO8 - nPWAIT (Input for inserting wait states)
151 GPIO63 - LDD8 (CPU LCD)
152 GPIO64 - LDD9 (CPU LCD)
153 GPIO65 - LDD10 (CPU LCD)
154 GPIO66 - LDD11 (CPU LCD)
155 GPIO67 - LDD12 (CPU LCD)
156 GPIO68 - LDD13 (CPU LCD)
157 GPIO69 - LDD14 (CPU LCD)
158 GPIO70 - LDD15 (CPU LCD)
159 GPIO88 - VCCLCD_PWREN (LCD Panel PWREN)
160 GPIO97 - BACKLIGHT_EN
163 PWM - Leave unconfigured for now...
179 GPIO84 - SD_nIRQ_CD (SD-Card)
188 GPIO35 - AC97_SDATA_IN
189 GPIO37 - AC97_SDATA_OUT
219 SSP3 - Leave unconfigured for now...
233 static mfp_cfg_t mfp_cfg[] __initdata = {
236 GPIO49_U2D_PHYDATA_0,
237 GPIO50_U2D_PHYDATA_1,
238 GPIO51_U2D_PHYDATA_2,
239 GPIO52_U2D_PHYDATA_3,
240 GPIO53_U2D_PHYDATA_4,
241 GPIO54_U2D_PHYDATA_5,
242 GPIO55_U2D_PHYDATA_6,
243 GPIO56_U2D_PHYDATA_7,
249 GPIO71_GPIO, /* USBD_INT */
254 GPIO100_U2D_TERM_SEL,
256 GPIO102_UTM_LINESTATE_0,
257 GPIO103_UTM_LINESTATE_1,
258 GPIO4_2_GPIO | MFP_PULL_HIGH, /* UTM_PULLUP */
266 GPIO35_AC97_SDATA_IN_0,
267 GPIO37_AC97_SDATA_OUT,
270 GPIO40_AC97_nACRESET,
308 GPIO72_GPIO | MFP_PULL_HIGH, /* Card Detect */
309 GPIO84_GPIO | MFP_PULL_LOW, /* Write Protect */
312 GPIO74_GPIO | MFP_LPM_EDGE_RISE, /* EXT_IRQ1 */
313 GPIO75_GPIO | MFP_LPM_EDGE_RISE, /* EXT_IRQ2 */
314 GPIO76_GPIO | MFP_LPM_EDGE_RISE, /* EXT_IRQ3 */
315 GPIO77_GPIO | MFP_LPM_EDGE_RISE, /* EXT_IRQ4 */
316 GPIO78_GPIO | MFP_LPM_EDGE_RISE, /* EXT_IRQ5 */
317 GPIO79_GPIO | MFP_LPM_EDGE_RISE, /* EXT_IRQ6 */
318 GPIO80_GPIO | MFP_LPM_EDGE_RISE, /* EXT_IRQ7 */
319 GPIO81_GPIO | MFP_LPM_EDGE_RISE /* EXT_IRQ8 */
322 /* MMC/MCI Support */
323 #if defined(CONFIG_MMC)
324 static struct pxamci_platform_data mxm_8x10_mci_platform_data = {
325 .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
326 .detect_delay_ms = 10,
329 static struct gpiod_lookup_table mxm_8x10_mci_gpio_table = {
330 .dev_id = "pxa2xx-mci.0",
332 /* Card detect on GPIO 72 */
333 GPIO_LOOKUP("gpio-pxa", MXM_8X10_SD_nCD,
334 "cd", GPIO_ACTIVE_LOW),
335 /* Write protect on GPIO 84 */
336 GPIO_LOOKUP("gpio-pxa", MXM_8X10_SD_WP,
337 "wp", GPIO_ACTIVE_LOW),
342 void __init mxm_8x10_mmc_init(void)
344 gpiod_add_lookup_table(&mxm_8x10_mci_gpio_table);
345 pxa_set_mci_info(&mxm_8x10_mci_platform_data);
349 /* USB Open Host Controller Interface */
350 static struct pxaohci_platform_data mxm_8x10_ohci_platform_data = {
351 .port_mode = PMM_NPS_MODE,
352 .flags = ENABLE_PORT_ALL
355 void __init mxm_8x10_usb_host_init(void)
357 pxa_set_ohci_info(&mxm_8x10_ohci_platform_data);
360 void __init mxm_8x10_ac97_init(void)
362 pxa_set_ac97_info(NULL);
365 /* NAND flash Support */
366 #if IS_ENABLED(CONFIG_MTD_NAND_MARVELL)
367 #define NAND_BLOCK_SIZE SZ_128K
368 #define NB(x) (NAND_BLOCK_SIZE * (x))
369 static struct mtd_partition mxm_8x10_nand_partitions[] = {
374 .mask_flags = MTD_WRITEABLE
380 .mask_flags = MTD_WRITEABLE
391 .mask_flags = MTD_WRITEABLE
395 static struct pxa3xx_nand_platform_data mxm_8x10_nand_info = {
397 .parts = mxm_8x10_nand_partitions,
398 .nr_parts = ARRAY_SIZE(mxm_8x10_nand_partitions)
401 static void __init mxm_8x10_nand_init(void)
403 pxa3xx_set_nand_info(&mxm_8x10_nand_info);
406 static inline void mxm_8x10_nand_init(void) {}
407 #endif /* IS_ENABLED(CONFIG_MTD_NAND_MARVELL) */
409 /* Ethernet support: Davicom DM9000 */
410 static struct resource dm9k_resources[] = {
412 .start = MXM_8X10_ETH_PHYS + 0x300,
413 .end = MXM_8X10_ETH_PHYS + 0x300,
414 .flags = IORESOURCE_MEM
417 .start = MXM_8X10_ETH_PHYS + 0x308,
418 .end = MXM_8X10_ETH_PHYS + 0x308,
419 .flags = IORESOURCE_MEM
422 .start = PXA_GPIO_TO_IRQ(mfp_to_gpio(MFP_PIN_GPIO9)),
423 .end = PXA_GPIO_TO_IRQ(mfp_to_gpio(MFP_PIN_GPIO9)),
424 .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE
428 static struct dm9000_plat_data dm9k_plat_data = {
429 .flags = DM9000_PLATF_16BITONLY
432 static struct platform_device dm9k_device = {
435 .num_resources = ARRAY_SIZE(dm9k_resources),
436 .resource = dm9k_resources,
438 .platform_data = &dm9k_plat_data
442 static void __init mxm_8x10_ethernet_init(void)
444 platform_device_register(&dm9k_device);
448 static void __init mxm_8x10_uarts_init(void)
450 pxa_set_ffuart_info(NULL);
451 pxa_set_btuart_info(NULL);
452 pxa_set_stuart_info(NULL);
455 /* I2C and Real Time Clock */
456 static struct i2c_board_info __initdata mxm_8x10_i2c_devices[] = {
458 I2C_BOARD_INFO("ds1337", 0x68)
462 static void __init mxm_8x10_i2c_init(void)
464 i2c_register_board_info(0, mxm_8x10_i2c_devices,
465 ARRAY_SIZE(mxm_8x10_i2c_devices));
466 pxa_set_i2c_info(NULL);
469 void __init mxm_8x10_barebones_init(void)
471 pxa3xx_mfp_config(ARRAY_AND_SIZE(mfp_cfg));
473 mxm_8x10_uarts_init();
474 mxm_8x10_nand_init();
476 mxm_8x10_ethernet_init();