forked from Minki/linux
b459396ee9
This patch moves the platform data definition from arch/arm/plat-pxa/include/plat/i2c.h to include/linux/i2c/pxa-i2c.h so it can be accessed from x86 the same way as on ARM. This change should make no functional change to the PXA code. The move is verified by building the following defconfigs: cm_x2xx_defconfig corgi_defconfig em_x270_defconfig ezx_defconfig imote2_defconfig pxa3xx_defconfig spitz_defconfig zeus_defconfig raumfeld_defconfig magician_defconfig mmp2_defconfig pxa168_defconfig pxa910_defconfig Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: Dirk Brandewie <dirk.brandewie@gmail.com> Signed-off-by: Ben Dooks <ben-linux@fluff.org>
475 lines
10 KiB
C
475 lines
10 KiB
C
/*
|
|
* 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/i2c/pxa-i2c.h>
|
|
|
|
#include <plat/pxa3xx_nand.h>
|
|
|
|
#include <mach/pxafb.h>
|
|
#include <mach/mmc.h>
|
|
#include <mach/ohci.h>
|
|
#include <mach/pxa320.h>
|
|
|
|
#include <mach/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 defined(CONFIG_MTD_NAND_PXA3xx) || defined(CONFIG_MTD_NAND_PXA3xx_MODULE)
|
|
#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 = {
|
|
.enable_arbiter = 1,
|
|
.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 /* CONFIG_MTD_NAND_PXA3xx || CONFIG_MTD_NAND_PXA3xx_MODULE */
|
|
|
|
/* 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 = gpio_to_irq(mfp_to_gpio(MFP_PIN_GPIO9)),
|
|
.end = 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();
|
|
}
|