2010-02-05 19:31:48 +03:00
/*
* linux / arch / arm / mach - pxa / mxm8x10 . c
*
* Support for the Embedian MXM - 8 x10 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>
2011-02-23 14:38:16 +03:00
# include <linux/i2c/pxa-i2c.h>
2010-02-05 19:31:48 +03:00
# 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 - 1 Wire
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 ,
2010-04-14 03:00:42 +04:00
. detect_delay_ms = 10 ,
2010-02-05 19:31:48 +03:00
. 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
tree-wide: fix comment/printk typos
"gadget", "through", "command", "maintain", "maintain", "controller", "address",
"between", "initiali[zs]e", "instead", "function", "select", "already",
"equal", "access", "management", "hierarchy", "registration", "interest",
"relative", "memory", "offset", "already",
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2010-11-01 22:38:34 +03:00
/* USB Open Host Controller Interface */
2010-02-05 19:31:48 +03:00
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 ( ) ;
}