2008-01-23 14:54:50 +01:00
/*
2009-03-13 16:37:08 +01:00
* linux / arch / arm / mach - pxa / colibri - pxa270 . c
2008-01-23 14:54:50 +01:00
*
2009-03-13 16:37:08 +01:00
* Support for Toradex PXA270 based Colibri module
2008-01-23 14:54:50 +01:00
* Daniel Mack < daniel @ caiaq . de >
*
* 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/init.h>
# include <linux/kernel.h>
# include <linux/platform_device.h>
# include <linux/sysdev.h>
# include <linux/interrupt.h>
# include <linux/bitops.h>
# include <linux/ioport.h>
# include <linux/delay.h>
# include <linux/mtd/mtd.h>
# include <linux/mtd/partitions.h>
# include <linux/mtd/physmap.h>
2009-03-13 16:37:08 +01:00
# include <linux/gpio.h>
2008-01-23 14:54:50 +01:00
# include <asm/mach-types.h>
2008-08-05 16:14:15 +01:00
# include <mach/hardware.h>
2008-01-23 14:54:50 +01:00
# include <asm/irq.h>
# include <asm/sizes.h>
# include <asm/mach/arch.h>
# include <asm/mach/map.h>
# include <asm/mach/irq.h>
# include <asm/mach/flash.h>
2009-01-02 23:17:22 +08:00
# include <mach/pxa27x.h>
2008-08-05 16:14:15 +01:00
# include <mach/colibri.h>
2008-01-23 14:54:50 +01:00
# include "generic.h"
# include "devices.h"
2009-03-13 16:37:08 +01:00
/*
* GPIO configuration
*/
static mfp_cfg_t colibri_pxa270_pin_config [ ] __initdata = {
2008-08-08 14:59:03 +08:00
GPIO78_nCS_2 , /* Ethernet CS */
GPIO114_GPIO , /* Ethernet IRQ */
} ;
2008-01-23 14:54:50 +01:00
/*
2009-03-13 16:37:08 +01:00
* NOR flash
2008-01-23 14:54:50 +01:00
*/
static struct mtd_partition colibri_partitions [ ] = {
{
. name = " Bootloader " ,
. offset = 0x00000000 ,
. size = 0x00040000 ,
. mask_flags = MTD_WRITEABLE /* force read-only */
} , {
. name = " Kernel " ,
. offset = 0x00040000 ,
. size = 0x00400000 ,
. mask_flags = 0
} , {
. name = " Rootfs " ,
. offset = 0x00440000 ,
. size = MTDPART_SIZ_FULL ,
. mask_flags = 0
}
} ;
static struct physmap_flash_data colibri_flash_data [ ] = {
{
. width = 4 , /* bankwidth in bytes */
. parts = colibri_partitions ,
. nr_parts = ARRAY_SIZE ( colibri_partitions )
}
} ;
2009-03-13 16:37:08 +01:00
static struct resource colibri_pxa270_flash_resource = {
2008-01-23 14:54:50 +01:00
. start = PXA_CS0_PHYS ,
. end = PXA_CS0_PHYS + SZ_32M - 1 ,
. flags = IORESOURCE_MEM ,
} ;
2009-03-13 16:37:08 +01:00
static struct platform_device colibri_pxa270_flash_device = {
2008-01-23 14:54:50 +01:00
. name = " physmap-flash " ,
. id = 0 ,
. dev = {
. platform_data = colibri_flash_data ,
} ,
2009-03-13 16:37:08 +01:00
. resource = & colibri_pxa270_flash_resource ,
2008-01-23 14:54:50 +01:00
. num_resources = 1 ,
} ;
/*
* DM9000 Ethernet
*/
2009-03-13 16:37:08 +01:00
# if defined(CONFIG_DM9000)
2008-01-23 14:54:50 +01:00
static struct resource dm9000_resources [ ] = {
[ 0 ] = {
2009-03-13 16:37:08 +01:00
. start = COLIBRI_PXA270_ETH_PHYS ,
. end = COLIBRI_PXA270_ETH_PHYS + 3 ,
2008-01-23 14:54:50 +01:00
. flags = IORESOURCE_MEM ,
} ,
[ 1 ] = {
2009-03-13 16:37:08 +01:00
. start = COLIBRI_PXA270_ETH_PHYS + 4 ,
. end = COLIBRI_PXA270_ETH_PHYS + 4 + 500 ,
2008-01-23 14:54:50 +01:00
. flags = IORESOURCE_MEM ,
} ,
[ 2 ] = {
2009-03-13 16:37:08 +01:00
. start = COLIBRI_PXA270_ETH_IRQ ,
. end = COLIBRI_PXA270_ETH_IRQ ,
2008-05-14 16:29:24 -07:00
. flags = IORESOURCE_IRQ | IRQF_TRIGGER_RISING ,
2008-01-23 14:54:50 +01:00
} ,
} ;
static struct platform_device dm9000_device = {
. name = " dm9000 " ,
. id = - 1 ,
. num_resources = ARRAY_SIZE ( dm9000_resources ) ,
. resource = dm9000_resources ,
} ;
2009-03-13 16:37:08 +01:00
# endif /* CONFIG_DM9000 */
2008-01-23 14:54:50 +01:00
2009-03-13 16:37:08 +01:00
static struct platform_device * colibri_pxa270_devices [ ] __initdata = {
& colibri_pxa270_flash_device ,
# if defined(CONFIG_DM9000)
2008-01-23 14:54:50 +01:00
& dm9000_device ,
2009-03-13 16:37:08 +01:00
# endif
2008-01-23 14:54:50 +01:00
} ;
2009-03-13 16:37:08 +01:00
static void __init colibri_pxa270_init ( void )
2008-01-23 14:54:50 +01:00
{
2009-03-13 16:37:08 +01:00
pxa2xx_mfp_config ( ARRAY_AND_SIZE ( colibri_pxa270_pin_config ) ) ;
platform_add_devices ( ARRAY_AND_SIZE ( colibri_pxa270_devices ) ) ;
2008-01-23 14:54:50 +01:00
}
2009-03-13 16:37:08 +01:00
MACHINE_START ( COLIBRI , " Toradex Colibri PXA270 " )
2008-01-23 14:54:50 +01:00
. phys_io = 0x40000000 ,
. io_pg_offst = ( io_p2v ( 0x40000000 ) > > 18 ) & 0xfffc ,
. boot_params = COLIBRI_SDRAM_BASE + 0x100 ,
2009-03-13 16:37:08 +01:00
. init_machine = colibri_pxa270_init ,
2008-01-23 14:54:50 +01:00
. map_io = pxa_map_io ,
. init_irq = pxa27x_init_irq ,
. timer = & pxa_timer ,
MACHINE_END
2009-03-13 16:37:08 +01:00