2009-01-28 17:36:37 +01:00
/*
2009-12-09 20:12:07 +01:00
* linux / arch / arm / mach - mx1 / mach - scb9328 . c
2009-01-28 17:36:37 +01:00
*
* Copyright ( c ) 2004 Sascha Hauer < saschahauer @ web . de >
* Copyright ( c ) 2006 - 2008 Juergen Beisert < jbeisert @ netscape . net >
*
* 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/platform_device.h>
# include <linux/mtd/physmap.h>
# include <linux/interrupt.h>
# include <linux/dm9000.h>
2011-12-05 10:12:28 +08:00
# include <linux/gpio.h>
2009-01-28 17:36:37 +01:00
# include <asm/mach-types.h>
# include <asm/mach/arch.h>
# include <asm/mach/time.h>
2012-09-13 21:01:00 +08:00
# include "common.h"
2010-06-22 14:50:59 +02:00
# include "devices-imx1.h"
2012-09-14 14:14:45 +08:00
# include "hardware.h"
2012-09-13 13:26:00 +08:00
# include "iomux-mx1.h"
2009-01-28 17:36:37 +01:00
/*
* This scb9328 has a 32 MiB flash
*/
static struct resource flash_resource = {
2010-03-04 21:02:41 +01:00
. start = MX1_CS0_PHYS ,
. end = MX1_CS0_PHYS + ( 32 * 1024 * 1024 ) - 1 ,
2009-01-28 17:36:37 +01:00
. flags = IORESOURCE_MEM ,
} ;
static struct physmap_flash_data scb_flash_data = {
. width = 2 ,
} ;
static struct platform_device scb_flash_device = {
. name = " physmap-flash " ,
. id = 0 ,
. dev = {
. platform_data = & scb_flash_data ,
} ,
. resource = & flash_resource ,
. num_resources = 1 ,
} ;
/*
* scb9328 has a DM9000 network controller
* connected to CS5 , with 16 bit data path
* and interrupt connected to GPIO 3
*/
/*
* internal datapath is fixed 16 bit
*/
static struct dm9000_plat_data dm9000_platdata = {
. flags = DM9000_PLATF_16BITONLY ,
} ;
/*
* the DM9000 drivers wants two defined address spaces
* to gain access to address latch registers and the data path .
*/
static struct resource dm9000x_resources [ ] = {
2009-06-23 12:14:39 +02:00
{
2009-01-28 17:36:37 +01:00
. name = " address area " ,
2010-03-04 21:02:41 +01:00
. start = MX1_CS5_PHYS ,
. end = MX1_CS5_PHYS + 1 ,
2009-06-23 12:14:39 +02:00
. flags = IORESOURCE_MEM , /* address access */
} , {
2009-01-28 17:36:37 +01:00
. name = " data area " ,
2010-03-04 21:02:41 +01:00
. start = MX1_CS5_PHYS + 4 ,
. end = MX1_CS5_PHYS + 5 ,
2009-06-23 12:14:39 +02:00
. flags = IORESOURCE_MEM , /* data access */
} , {
2011-12-05 10:12:28 +08:00
/* irq number is run-time assigned */
2009-06-23 12:14:39 +02:00
. flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL ,
2009-01-28 17:36:37 +01:00
} ,
} ;
static struct platform_device dm9000x_device = {
. name = " dm9000 " ,
. id = 0 ,
. num_resources = ARRAY_SIZE ( dm9000x_resources ) ,
. resource = dm9000x_resources ,
. dev = {
. platform_data = & dm9000_platdata ,
}
} ;
2010-09-28 21:53:31 +02:00
static const int mxc_uart1_pins [ ] = {
2009-01-28 17:36:37 +01:00
PC9_PF_UART1_CTS ,
PC10_PF_UART1_RTS ,
PC11_PF_UART1_TXD ,
PC12_PF_UART1_RXD ,
} ;
2010-06-22 14:50:59 +02:00
static const struct imxuart_platform_data uart_pdata __initconst = {
2009-01-28 17:36:37 +01:00
. flags = IMXUART_HAVE_RTSCTS ,
} ;
static struct platform_device * devices [ ] __initdata = {
& scb_flash_device ,
& dm9000x_device ,
} ;
/*
* scb9328_init - Init the CPU card itself
*/
static void __init scb9328_init ( void )
{
2011-06-06 00:07:55 +08:00
imx1_soc_init ( ) ;
2011-06-21 14:49:36 -03:00
mxc_gpio_setup_multiple_pins ( mxc_uart1_pins ,
ARRAY_SIZE ( mxc_uart1_pins ) , " UART1 " ) ;
2010-06-22 14:50:59 +02:00
imx1_add_imx_uart0 ( & uart_pdata ) ;
2009-01-28 17:36:37 +01:00
printk ( KERN_INFO " Scb9328: Adding devices \n " ) ;
2011-12-05 10:12:28 +08:00
dm9000x_resources [ 2 ] . start = gpio_to_irq ( IMX_GPIO_NR ( 3 , 3 ) ) ;
dm9000x_resources [ 2 ] . end = gpio_to_irq ( IMX_GPIO_NR ( 3 , 3 ) ) ;
2009-01-28 17:36:37 +01:00
platform_add_devices ( devices , ARRAY_SIZE ( devices ) ) ;
}
static void __init scb9328_timer_init ( void )
{
mx1_clocks_init ( 32000 ) ;
}
MACHINE_START ( SCB9328 , " Synertronixx scb9328 " )
2011-02-07 16:35:19 +01:00
/* Sascha Hauer */
2011-07-05 22:38:12 -04:00
. atag_offset = 100 ,
2011-02-07 16:35:19 +01:00
. map_io = mx1_map_io ,
. init_early = imx1_init_early ,
. init_irq = mx1_init_irq ,
2011-09-20 14:31:24 +02:00
. handle_irq = imx1_handle_irq ,
2012-11-08 12:40:59 -07:00
. init_time = scb9328_timer_init ,
2011-02-07 16:35:19 +01:00
. init_machine = scb9328_init ,
2011-11-06 17:12:08 +00:00
. restart = mxc_restart ,
2009-01-28 17:36:37 +01:00
MACHINE_END