2011-04-29 09:21:39 +04:00
/*
* linux / arch / arm / mach - imx / mach - apf9328 . c
*
* Copyright ( c ) 2005 - 2011 ARMadeus systems < support @ armadeus . com >
*
* This work is based on mach - scb9328 . c which is :
* 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/init.h>
# include <linux/kernel.h>
# include <linux/platform_device.h>
# include <linux/mtd/physmap.h>
# include <linux/dm9000.h>
2011-12-05 06:12:28 +04:00
# include <linux/gpio.h>
2011-10-08 19:19:49 +04:00
# include <linux/i2c.h>
2011-04-29 09:21:39 +04: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"
2011-04-29 09:21:39 +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"
2011-04-29 09:21:39 +04:00
static const int apf9328_pins [ ] __initconst = {
/* UART1 */
PC9_PF_UART1_CTS ,
PC10_PF_UART1_RTS ,
PC11_PF_UART1_TXD ,
PC12_PF_UART1_RXD ,
/* UART2 */
PB28_PF_UART2_CTS ,
PB29_PF_UART2_RTS ,
PB30_PF_UART2_TXD ,
PB31_PF_UART2_RXD ,
2011-10-08 19:19:49 +04:00
/* I2C */
PA15_PF_I2C_SDA ,
PA16_PF_I2C_SCL ,
2011-04-29 09:21:39 +04:00
} ;
/*
* The APF9328 can have up to 32 MB NOR Flash
*/
static struct resource flash_resource = {
. start = MX1_CS0_PHYS ,
. end = MX1_CS0_PHYS + SZ_32M - 1 ,
. flags = IORESOURCE_MEM ,
} ;
static struct physmap_flash_data apf9328_flash_data = {
. width = 2 ,
} ;
static struct platform_device apf9328_flash_device = {
. name = " physmap-flash " ,
. id = 0 ,
. dev = {
. platform_data = & apf9328_flash_data ,
} ,
. resource = & flash_resource ,
. num_resources = 1 ,
} ;
/*
* APF9328 has a DM9000 Ethernet controller
*/
static struct dm9000_plat_data dm9000_setup = {
. flags = DM9000_PLATF_16BITONLY
} ;
static struct resource dm9000_resources [ ] = {
{
. start = MX1_CS4_PHYS + 0x00C00000 ,
. end = MX1_CS4_PHYS + 0x00C00001 ,
. flags = IORESOURCE_MEM ,
} , {
. start = MX1_CS4_PHYS + 0x00C00002 ,
. end = MX1_CS4_PHYS + 0x00C00003 ,
. flags = IORESOURCE_MEM ,
} , {
2011-12-05 06:12:28 +04:00
/* irq number is run-time assigned */
2011-04-29 09:21:39 +04:00
. flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL ,
} ,
} ;
static struct platform_device dm9000x_device = {
. name = " dm9000 " ,
. id = 0 ,
. num_resources = ARRAY_SIZE ( dm9000_resources ) ,
. resource = dm9000_resources ,
. dev = {
. platform_data = & dm9000_setup ,
}
} ;
static const struct imxuart_platform_data uart1_pdata __initconst = {
. flags = IMXUART_HAVE_RTSCTS ,
} ;
2011-10-08 19:19:49 +04:00
static const struct imxi2c_platform_data apf9328_i2c_data __initconst = {
. bitrate = 100000 ,
} ;
2011-04-29 09:21:39 +04:00
static struct platform_device * devices [ ] __initdata = {
& apf9328_flash_device ,
& dm9000x_device ,
} ;
static void __init apf9328_init ( void )
{
2011-06-05 20:07:55 +04:00
imx1_soc_init ( ) ;
2011-04-29 09:21:39 +04:00
mxc_gpio_setup_multiple_pins ( apf9328_pins ,
ARRAY_SIZE ( apf9328_pins ) ,
" APF9328 " ) ;
2011-05-10 18:21:00 +04:00
imx1_add_imx_uart0 ( NULL ) ;
2011-04-29 09:21:39 +04:00
imx1_add_imx_uart1 ( & uart1_pdata ) ;
2011-10-08 19:19:49 +04:00
imx1_add_imx_i2c ( & apf9328_i2c_data ) ;
2011-12-05 06:12:28 +04:00
dm9000_resources [ 2 ] . start = gpio_to_irq ( IMX_GPIO_NR ( 2 , 14 ) ) ;
dm9000_resources [ 2 ] . end = gpio_to_irq ( IMX_GPIO_NR ( 2 , 14 ) ) ;
2011-04-29 09:21:39 +04:00
platform_add_devices ( devices , ARRAY_SIZE ( devices ) ) ;
}
static void __init apf9328_timer_init ( void )
{
mx1_clocks_init ( 32768 ) ;
}
MACHINE_START ( APF9328 , " Armadeus APF9328 " )
/* Maintainer: Gwenhael Goavec-Merou, ARMadeus Systems */
. map_io = mx1_map_io ,
. init_early = imx1_init_early ,
. init_irq = mx1_init_irq ,
2012-11-08 23:40:59 +04:00
. init_time = apf9328_timer_init ,
2011-04-29 09:21:39 +04:00
. init_machine = apf9328_init ,
2011-11-06 21:12:08 +04:00
. restart = mxc_restart ,
2011-04-29 09:21:39 +04:00
MACHINE_END