123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474 |
- /*
- * linux/arch/arm/mach-pxa/mxm8x10.c
- *
- * Support for the Embedian MXM-8x10 Computer on Module
- *
- * Copyright (C) 2006 Marvell International Ltd.
- * Copyright (C) 2009 Embedian Inc.
- * Copyright (C) 2009 TMT Services & Supplies (Pty) Ltd.
- *
- * 2007-09-04: eric miao <eric.y.miao@gmail.com>
- * rewrite to align with latest kernel
- *
- * 2010-01-09: Edwin Peer <epeer@tmtservices.co.za>
- * Hennie van der Merwe <hvdmerwe@tmtservices.co.za>
- * rework for upstream merge
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
- #include <linux/serial_8250.h>
- #include <linux/dm9000.h>
- #include <linux/gpio.h>
- #include <linux/platform_data/i2c-pxa.h>
- #include <linux/platform_data/mtd-nand-pxa3xx.h>
- #include <linux/platform_data/video-pxafb.h>
- #include <linux/platform_data/mmc-pxamci.h>
- #include <linux/platform_data/usb-ohci-pxa27x.h>
- #include "pxa320.h"
- #include "mxm8x10.h"
- #include "devices.h"
- #include "generic.h"
- /* GPIO pin definition
- External device stuff - Leave unconfigured for now...
- ---------------------
- GPIO0 - DREQ (External DMA Request)
- GPIO3 - nGCS2 (External Chip Select) Where is nGCS0; nGCS1; nGCS4; nGCS5 ?
- GPIO4 - nGCS3
- GPIO15 - EXT_GPIO1
- GPIO16 - EXT_GPIO2
- GPIO17 - EXT_GPIO3
- GPIO24 - EXT_GPIO4
- GPIO25 - EXT_GPIO5
- GPIO26 - EXT_GPIO6
- GPIO27 - EXT_GPIO7
- GPIO28 - EXT_GPIO8
- GPIO29 - EXT_GPIO9
- GPIO30 - EXT_GPIO10
- GPIO31 - EXT_GPIO11
- GPIO57 - EXT_GPIO12
- GPIO74 - EXT_IRQ1
- GPIO75 - EXT_IRQ2
- GPIO76 - EXT_IRQ3
- GPIO77 - EXT_IRQ4
- GPIO78 - EXT_IRQ5
- GPIO79 - EXT_IRQ6
- GPIO80 - EXT_IRQ7
- GPIO81 - EXT_IRQ8
- GPIO87 - VCCIO_PWREN (External Device PWREN)
- Dallas 1-Wire - Leave unconfigured for now...
- -------------
- GPIO0_2 - DS - 1Wire
- Ethernet
- --------
- GPIO1 - DM9000 PWR
- GPIO9 - DM9K_nIRQ
- GPIO36 - DM9K_RESET
- Keypad - Leave unconfigured by for now...
- ------
- GPIO1_2 - KP_DKIN0
- GPIO5_2 - KP_MKOUT7
- GPIO82 - KP_DKIN1
- GPIO85 - KP_DKIN2
- GPIO86 - KP_DKIN3
- GPIO113 - KP_MKIN0
- GPIO114 - KP_MKIN1
- GPIO115 - KP_MKIN2
- GPIO116 - KP_MKIN3
- GPIO117 - KP_MKIN4
- GPIO118 - KP_MKIN5
- GPIO119 - KP_MKIN6
- GPIO120 - KP_MKIN7
- GPIO121 - KP_MKOUT0
- GPIO122 - KP_MKOUT1
- GPIO122 - KP_MKOUT2
- GPIO123 - KP_MKOUT3
- GPIO124 - KP_MKOUT4
- GPIO125 - KP_MKOUT5
- GPIO127 - KP_MKOUT6
- Data Bus - Leave unconfigured for now...
- --------
- GPIO2 - nWait (Data Bus)
- USB Device
- ----------
- GPIO4_2 - USBD_PULLUP
- GPIO10 - UTM_CLK (USB Device UTM Clk)
- GPIO49 - USB 2.0 Device UTM_DATA0
- GPIO50 - USB 2.0 Device UTM_DATA1
- GPIO51 - USB 2.0 Device UTM_DATA2
- GPIO52 - USB 2.0 Device UTM_DATA3
- GPIO53 - USB 2.0 Device UTM_DATA4
- GPIO54 - USB 2.0 Device UTM_DATA5
- GPIO55 - USB 2.0 Device UTM_DATA6
- GPIO56 - USB 2.0 Device UTM_DATA7
- GPIO58 - UTM_RXVALID (USB 2.0 Device)
- GPIO59 - UTM_RXACTIVE (USB 2.0 Device)
- GPIO60 - UTM_RXERROR
- GPIO61 - UTM_OPMODE0
- GPIO62 - UTM_OPMODE1
- GPIO71 - USBD_INT (USB Device?)
- GPIO73 - UTM_TXREADY (USB 2.0 Device)
- GPIO83 - UTM_TXVALID (USB 2.0 Device)
- GPIO98 - UTM_RESET (USB 2.0 device)
- GPIO99 - UTM_XCVR_SELECT
- GPIO100 - UTM_TERM_SELECT
- GPIO101 - UTM_SUSPENDM_X
- GPIO102 - UTM_LINESTATE0
- GPIO103 - UTM_LINESTATE1
- Card-Bus Interface - Leave unconfigured for now...
- ------------------
- GPIO5 - nPIOR (I/O space output enable)
- GPIO6 - nPIOW (I/O space write enable)
- GPIO7 - nIOS16 (Input from I/O space telling size of data bus)
- GPIO8 - nPWAIT (Input for inserting wait states)
- LCD
- ---
- GPIO6_2 - LDD0
- GPIO7_2 - LDD1
- GPIO8_2 - LDD2
- GPIO9_2 - LDD3
- GPIO11_2 - LDD5
- GPIO12_2 - LDD6
- GPIO13_2 - LDD7
- GPIO14_2 - VSYNC
- GPIO15_2 - HSYNC
- GPIO16_2 - VCLK
- GPIO17_2 - HCLK
- GPIO18_2 - VDEN
- GPIO63 - LDD8 (CPU LCD)
- GPIO64 - LDD9 (CPU LCD)
- GPIO65 - LDD10 (CPU LCD)
- GPIO66 - LDD11 (CPU LCD)
- GPIO67 - LDD12 (CPU LCD)
- GPIO68 - LDD13 (CPU LCD)
- GPIO69 - LDD14 (CPU LCD)
- GPIO70 - LDD15 (CPU LCD)
- GPIO88 - VCCLCD_PWREN (LCD Panel PWREN)
- GPIO97 - BACKLIGHT_EN
- GPIO104 - LCD_PWREN
- PWM - Leave unconfigured for now...
- ---
- GPIO11 - PWM0
- GPIO12 - PWM1
- GPIO13 - PWM2
- GPIO14 - PWM3
- SD-CARD
- -------
- GPIO18 - SDDATA0
- GPIO19 - SDDATA1
- GPIO20 - SDDATA2
- GPIO21 - SDDATA3
- GPIO22 - SDCLK
- GPIO23 - SDCMD
- GPIO72 - SD_WP
- GPIO84 - SD_nIRQ_CD (SD-Card)
- I2C
- ---
- GPIO32 - I2CSCL
- GPIO33 - I2CSDA
- AC97
- ----
- GPIO35 - AC97_SDATA_IN
- GPIO37 - AC97_SDATA_OUT
- GPIO38 - AC97_SYNC
- GPIO39 - AC97_BITCLK
- GPIO40 - AC97_nRESET
- UART1
- -----
- GPIO41 - UART_RXD1
- GPIO42 - UART_TXD1
- GPIO43 - UART_CTS1
- GPIO44 - UART_DCD1
- GPIO45 - UART_DSR1
- GPIO46 - UART_nRI1
- GPIO47 - UART_DTR1
- GPIO48 - UART_RTS1
- UART2
- -----
- GPIO109 - RTS2
- GPIO110 - RXD2
- GPIO111 - TXD2
- GPIO112 - nCTS2
- UART3
- -----
- GPIO105 - nCTS3
- GPIO106 - nRTS3
- GPIO107 - TXD3
- GPIO108 - RXD3
- SSP3 - Leave unconfigured for now...
- ----
- GPIO89 - SSP3_CLK
- GPIO90 - SSP3_SFRM
- GPIO91 - SSP3_TXD
- GPIO92 - SSP3_RXD
- SSP4
- GPIO93 - SSP4_CLK
- GPIO94 - SSP4_SFRM
- GPIO95 - SSP4_TXD
- GPIO96 - SSP4_RXD
- */
- static mfp_cfg_t mfp_cfg[] __initdata = {
- /* USB */
- GPIO10_UTM_CLK,
- GPIO49_U2D_PHYDATA_0,
- GPIO50_U2D_PHYDATA_1,
- GPIO51_U2D_PHYDATA_2,
- GPIO52_U2D_PHYDATA_3,
- GPIO53_U2D_PHYDATA_4,
- GPIO54_U2D_PHYDATA_5,
- GPIO55_U2D_PHYDATA_6,
- GPIO56_U2D_PHYDATA_7,
- GPIO58_UTM_RXVALID,
- GPIO59_UTM_RXACTIVE,
- GPIO60_U2D_RXERROR,
- GPIO61_U2D_OPMODE0,
- GPIO62_U2D_OPMODE1,
- GPIO71_GPIO, /* USBD_INT */
- GPIO73_UTM_TXREADY,
- GPIO83_U2D_TXVALID,
- GPIO98_U2D_RESET,
- GPIO99_U2D_XCVR_SEL,
- GPIO100_U2D_TERM_SEL,
- GPIO101_U2D_SUSPEND,
- GPIO102_UTM_LINESTATE_0,
- GPIO103_UTM_LINESTATE_1,
- GPIO4_2_GPIO | MFP_PULL_HIGH, /* UTM_PULLUP */
- /* DM9000 */
- GPIO1_GPIO,
- GPIO9_GPIO,
- GPIO36_GPIO,
- /* AC97 */
- GPIO35_AC97_SDATA_IN_0,
- GPIO37_AC97_SDATA_OUT,
- GPIO38_AC97_SYNC,
- GPIO39_AC97_BITCLK,
- GPIO40_AC97_nACRESET,
- /* UARTS */
- GPIO41_UART1_RXD,
- GPIO42_UART1_TXD,
- GPIO43_UART1_CTS,
- GPIO44_UART1_DCD,
- GPIO45_UART1_DSR,
- GPIO46_UART1_RI,
- GPIO47_UART1_DTR,
- GPIO48_UART1_RTS,
- GPIO109_UART2_RTS,
- GPIO110_UART2_RXD,
- GPIO111_UART2_TXD,
- GPIO112_UART2_CTS,
- GPIO105_UART3_CTS,
- GPIO106_UART3_RTS,
- GPIO107_UART3_TXD,
- GPIO108_UART3_RXD,
- GPIO78_GPIO,
- GPIO79_GPIO,
- GPIO80_GPIO,
- GPIO81_GPIO,
- /* I2C */
- GPIO32_I2C_SCL,
- GPIO33_I2C_SDA,
- /* MMC */
- GPIO18_MMC1_DAT0,
- GPIO19_MMC1_DAT1,
- GPIO20_MMC1_DAT2,
- GPIO21_MMC1_DAT3,
- GPIO22_MMC1_CLK,
- GPIO23_MMC1_CMD,
- GPIO72_GPIO | MFP_PULL_HIGH, /* Card Detect */
- GPIO84_GPIO | MFP_PULL_LOW, /* Write Protect */
- /* IRQ */
- GPIO74_GPIO | MFP_LPM_EDGE_RISE, /* EXT_IRQ1 */
- GPIO75_GPIO | MFP_LPM_EDGE_RISE, /* EXT_IRQ2 */
- GPIO76_GPIO | MFP_LPM_EDGE_RISE, /* EXT_IRQ3 */
- GPIO77_GPIO | MFP_LPM_EDGE_RISE, /* EXT_IRQ4 */
- GPIO78_GPIO | MFP_LPM_EDGE_RISE, /* EXT_IRQ5 */
- GPIO79_GPIO | MFP_LPM_EDGE_RISE, /* EXT_IRQ6 */
- GPIO80_GPIO | MFP_LPM_EDGE_RISE, /* EXT_IRQ7 */
- GPIO81_GPIO | MFP_LPM_EDGE_RISE /* EXT_IRQ8 */
- };
- /* MMC/MCI Support */
- #if defined(CONFIG_MMC)
- static struct pxamci_platform_data mxm_8x10_mci_platform_data = {
- .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
- .detect_delay_ms = 10,
- .gpio_card_detect = MXM_8X10_SD_nCD,
- .gpio_card_ro = MXM_8X10_SD_WP,
- .gpio_power = -1
- };
- void __init mxm_8x10_mmc_init(void)
- {
- pxa_set_mci_info(&mxm_8x10_mci_platform_data);
- }
- #endif
- /* USB Open Host Controller Interface */
- static struct pxaohci_platform_data mxm_8x10_ohci_platform_data = {
- .port_mode = PMM_NPS_MODE,
- .flags = ENABLE_PORT_ALL
- };
- void __init mxm_8x10_usb_host_init(void)
- {
- pxa_set_ohci_info(&mxm_8x10_ohci_platform_data);
- }
- /* AC97 Sound Support */
- static struct platform_device mxm_8x10_ac97_device = {
- .name = "pxa2xx-ac97"
- };
- void __init mxm_8x10_ac97_init(void)
- {
- platform_device_register(&mxm_8x10_ac97_device);
- }
- /* NAND flash Support */
- #if IS_ENABLED(CONFIG_MTD_NAND_MARVELL)
- #define NAND_BLOCK_SIZE SZ_128K
- #define NB(x) (NAND_BLOCK_SIZE * (x))
- static struct mtd_partition mxm_8x10_nand_partitions[] = {
- [0] = {
- .name = "boot",
- .size = NB(0x002),
- .offset = NB(0x000),
- .mask_flags = MTD_WRITEABLE
- },
- [1] = {
- .name = "kernel",
- .size = NB(0x010),
- .offset = NB(0x002),
- .mask_flags = MTD_WRITEABLE
- },
- [2] = {
- .name = "root",
- .size = NB(0x36c),
- .offset = NB(0x012)
- },
- [3] = {
- .name = "bbt",
- .size = NB(0x082),
- .offset = NB(0x37e),
- .mask_flags = MTD_WRITEABLE
- }
- };
- static struct pxa3xx_nand_platform_data mxm_8x10_nand_info = {
- .keep_config = 1,
- .parts = mxm_8x10_nand_partitions,
- .nr_parts = ARRAY_SIZE(mxm_8x10_nand_partitions)
- };
- static void __init mxm_8x10_nand_init(void)
- {
- pxa3xx_set_nand_info(&mxm_8x10_nand_info);
- }
- #else
- static inline void mxm_8x10_nand_init(void) {}
- #endif /* IS_ENABLED(CONFIG_MTD_NAND_MARVELL) */
- /* Ethernet support: Davicom DM9000 */
- static struct resource dm9k_resources[] = {
- [0] = {
- .start = MXM_8X10_ETH_PHYS + 0x300,
- .end = MXM_8X10_ETH_PHYS + 0x300,
- .flags = IORESOURCE_MEM
- },
- [1] = {
- .start = MXM_8X10_ETH_PHYS + 0x308,
- .end = MXM_8X10_ETH_PHYS + 0x308,
- .flags = IORESOURCE_MEM
- },
- [2] = {
- .start = PXA_GPIO_TO_IRQ(mfp_to_gpio(MFP_PIN_GPIO9)),
- .end = PXA_GPIO_TO_IRQ(mfp_to_gpio(MFP_PIN_GPIO9)),
- .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE
- }
- };
- static struct dm9000_plat_data dm9k_plat_data = {
- .flags = DM9000_PLATF_16BITONLY
- };
- static struct platform_device dm9k_device = {
- .name = "dm9000",
- .id = 0,
- .num_resources = ARRAY_SIZE(dm9k_resources),
- .resource = dm9k_resources,
- .dev = {
- .platform_data = &dm9k_plat_data
- }
- };
- static void __init mxm_8x10_ethernet_init(void)
- {
- platform_device_register(&dm9k_device);
- }
- /* PXA UARTs */
- static void __init mxm_8x10_uarts_init(void)
- {
- pxa_set_ffuart_info(NULL);
- pxa_set_btuart_info(NULL);
- pxa_set_stuart_info(NULL);
- }
- /* I2C and Real Time Clock */
- static struct i2c_board_info __initdata mxm_8x10_i2c_devices[] = {
- {
- I2C_BOARD_INFO("ds1337", 0x68)
- }
- };
- static void __init mxm_8x10_i2c_init(void)
- {
- i2c_register_board_info(0, mxm_8x10_i2c_devices,
- ARRAY_SIZE(mxm_8x10_i2c_devices));
- pxa_set_i2c_info(NULL);
- }
- void __init mxm_8x10_barebones_init(void)
- {
- pxa3xx_mfp_config(ARRAY_AND_SIZE(mfp_cfg));
- mxm_8x10_uarts_init();
- mxm_8x10_nand_init();
- mxm_8x10_i2c_init();
- mxm_8x10_ethernet_init();
- }
|