2009-01-28 19:36:37 +03:00
/*
2009-12-09 22:12:07 +03:00
* linux / arch / arm / mach - mx1 / mach - scb9328 . c
2009-01-28 19:36:37 +03: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 06:12:28 +04:00
# include <linux/gpio.h>
2009-01-28 19:36:37 +03:00
# include <asm/mach-types.h>
# include <asm/mach/arch.h>
# include <asm/mach/time.h>
2012-09-13 17:01:00 +04:00
# include "common.h"
2010-06-22 16:50:59 +04:00
# include "devices-imx1.h"
2012-09-14 10:14:45 +04:00
# include "hardware.h"
2012-09-13 09:26:00 +04:00
# include "iomux-mx1.h"
2009-01-28 19:36:37 +03:00
/*
* This scb9328 has a 32 MiB flash
*/
static struct resource flash_resource = {
2010-03-04 23:02:41 +03:00
. start = MX1_CS0_PHYS ,
. end = MX1_CS0_PHYS + ( 32 * 1024 * 1024 ) - 1 ,
2009-01-28 19:36:37 +03: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 14:14:39 +04:00
{
2009-01-28 19:36:37 +03:00
. name = " address area " ,
2010-03-04 23:02:41 +03:00
. start = MX1_CS5_PHYS ,
. end = MX1_CS5_PHYS + 1 ,
2009-06-23 14:14:39 +04:00
. flags = IORESOURCE_MEM , /* address access */
} , {
2009-01-28 19:36:37 +03:00
. name = " data area " ,
2010-03-04 23:02:41 +03:00
. start = MX1_CS5_PHYS + 4 ,
. end = MX1_CS5_PHYS + 5 ,
2009-06-23 14:14:39 +04:00
. flags = IORESOURCE_MEM , /* data access */
} , {
2011-12-05 06:12:28 +04:00
/* irq number is run-time assigned */
2009-06-23 14:14:39 +04:00
. flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL ,
2009-01-28 19:36:37 +03: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 23:53:31 +04:00
static const int mxc_uart1_pins [ ] = {
2009-01-28 19:36:37 +03:00
PC9_PF_UART1_CTS ,
PC10_PF_UART1_RTS ,
PC11_PF_UART1_TXD ,
PC12_PF_UART1_RXD ,
} ;
2010-06-22 16:50:59 +04:00
static const struct imxuart_platform_data uart_pdata __initconst = {
2009-01-28 19:36:37 +03: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-05 20:07:55 +04:00
imx1_soc_init ( ) ;
2011-06-21 21:49:36 +04:00
mxc_gpio_setup_multiple_pins ( mxc_uart1_pins ,
ARRAY_SIZE ( mxc_uart1_pins ) , " UART1 " ) ;
2010-06-22 16:50:59 +04:00
imx1_add_imx_uart0 ( & uart_pdata ) ;
2009-01-28 19:36:37 +03:00
printk ( KERN_INFO " Scb9328: Adding devices \n " ) ;
2011-12-05 06:12:28 +04: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 19:36:37 +03:00
platform_add_devices ( devices , ARRAY_SIZE ( devices ) ) ;
}
static void __init scb9328_timer_init ( void )
{
mx1_clocks_init ( 32000 ) ;
}
static struct sys_timer scb9328_timer = {
. init = scb9328_timer_init ,
} ;
MACHINE_START ( SCB9328 , " Synertronixx scb9328 " )
2011-02-07 18:35:19 +03:00
/* Sascha Hauer */
2011-07-06 06:38:12 +04:00
. atag_offset = 100 ,
2011-02-07 18:35:19 +03:00
. map_io = mx1_map_io ,
. init_early = imx1_init_early ,
. init_irq = mx1_init_irq ,
2011-09-20 16:31:24 +04:00
. handle_irq = imx1_handle_irq ,
2011-02-07 18:35:19 +03:00
. timer = & scb9328_timer ,
. init_machine = scb9328_init ,
2011-11-06 21:12:08 +04:00
. restart = mxc_restart ,
2009-01-28 19:36:37 +03:00
MACHINE_END