2008-11-14 13:01:38 +03:00
/*
2009-12-09 22:12:07 +03:00
* arch / arm / mach - imx / mach - mx1ads . c
2008-11-14 13:01:38 +03:00
*
* Initially based on :
* linux - 2.6 .7 - imx / arch / arm / mach - imx / scb9328 . c
* Copyright ( c ) 2004 Sascha Hauer < sascha @ saschahauer . de >
*
* 2004 ( c ) MontaVista Software , Inc .
*
* This file is licensed under the terms of the GNU General Public
* License version 2. This program is licensed " as is " without any
* warranty of any kind , whether express or implied .
*/
2009-04-29 15:14:19 +04:00
# include <linux/i2c.h>
# include <linux/i2c/pcf857x.h>
2008-11-14 13:01:38 +03:00
# include <linux/init.h>
2009-04-29 15:14:19 +04:00
# include <linux/kernel.h>
2008-11-14 13:01:38 +03:00
# include <linux/platform_device.h>
# include <linux/mtd/physmap.h>
# include <asm/mach-types.h>
# include <asm/mach/arch.h>
# include <asm/mach/time.h>
# include <mach/common.h>
2009-04-29 15:14:19 +04:00
# include <mach/hardware.h>
2009-01-28 16:06:20 +03:00
# include <mach/i2c.h>
2010-02-16 13:07:49 +03:00
# include <mach/iomux-mx1.h>
2009-04-29 15:14:19 +04:00
# include <mach/irqs.h>
2010-06-16 17:26:07 +04:00
# include "devices-imx1.h"
2008-11-14 13:01:38 +03:00
# include "devices.h"
2009-04-29 15:17:21 +04:00
static int mx1ads_pins [ ] = {
/* UART1 */
2008-11-14 13:01:38 +03:00
PC9_PF_UART1_CTS ,
PC10_PF_UART1_RTS ,
PC11_PF_UART1_TXD ,
PC12_PF_UART1_RXD ,
2009-04-29 15:17:21 +04:00
/* UART2 */
2008-11-14 13:01:38 +03:00
PB28_PF_UART2_CTS ,
PB29_PF_UART2_RTS ,
PB30_PF_UART2_TXD ,
PB31_PF_UART2_RXD ,
2009-04-29 15:17:21 +04:00
/* I2C */
PA15_PF_I2C_SDA ,
PA16_PF_I2C_SCL ,
/* SPI */
PC13_PF_SPI1_SPI_RDY ,
PC14_PF_SPI1_SCLK ,
PC15_PF_SPI1_SS ,
PC16_PF_SPI1_MISO ,
PC17_PF_SPI1_MOSI ,
2008-11-14 13:01:38 +03:00
} ;
2009-04-29 15:17:21 +04:00
/*
* UARTs platform data
*/
2008-11-14 13:01:38 +03:00
2010-06-22 16:50:59 +04:00
static const struct imxuart_platform_data uart0_pdata __initconst = {
. flags = IMXUART_HAVE_RTSCTS ,
} ;
static const struct imxuart_platform_data uart1_pdata __initconst = {
. flags = IMXUART_HAVE_RTSCTS ,
2008-11-14 13:01:38 +03:00
} ;
/*
* Physmap flash
*/
static struct physmap_flash_data mx1ads_flash_data = {
. width = 4 , /* bankwidth in bytes */
} ;
static struct resource flash_resource = {
2010-03-04 23:02:41 +03:00
. start = MX1_CS0_PHYS ,
. end = MX1_CS0_PHYS + SZ_32M - 1 ,
2008-11-14 13:01:38 +03:00
. flags = IORESOURCE_MEM ,
} ;
static struct platform_device flash_device = {
. name = " physmap-flash " ,
. id = 0 ,
. resource = & flash_resource ,
. num_resources = 1 ,
} ;
2009-01-28 16:06:20 +03:00
/*
* I2C
*/
static struct pcf857x_platform_data pcf857x_data [ ] = {
{
. gpio_base = 4 * 32 ,
} , {
. gpio_base = 4 * 32 + 16 ,
}
} ;
2010-06-16 17:26:07 +04:00
static const struct imxi2c_platform_data mx1ads_i2c_data __initconst = {
2009-01-28 16:06:20 +03:00
. bitrate = 100000 ,
} ;
static struct i2c_board_info mx1ads_i2c_devices [ ] = {
{
2009-07-20 10:18:47 +04:00
I2C_BOARD_INFO ( " pcf8575 " , 0x22 ) ,
2009-01-28 16:06:20 +03:00
. platform_data = & pcf857x_data [ 0 ] ,
} , {
2009-07-20 10:18:47 +04:00
I2C_BOARD_INFO ( " pcf8575 " , 0x24 ) ,
2009-01-28 16:06:20 +03:00
. platform_data = & pcf857x_data [ 1 ] ,
} ,
} ;
2008-11-14 13:01:38 +03:00
/*
* Board init
*/
static void __init mx1ads_init ( void )
{
2009-04-29 15:17:21 +04:00
mxc_gpio_setup_multiple_pins ( mx1ads_pins ,
ARRAY_SIZE ( mx1ads_pins ) , " mx1ads " ) ;
2008-11-14 13:01:38 +03:00
/* UART */
2010-06-22 16:50:59 +04:00
imx1_add_imx_uart0 ( & uart0_pdata ) ;
imx1_add_imx_uart1 ( & uart1_pdata ) ;
2008-11-14 13:01:38 +03:00
/* Physmap flash */
mxc_register_device ( & flash_device , & mx1ads_flash_data ) ;
2009-01-28 16:06:20 +03:00
/* I2C */
i2c_register_board_info ( 0 , mx1ads_i2c_devices ,
ARRAY_SIZE ( mx1ads_i2c_devices ) ) ;
2010-06-16 17:26:07 +04:00
imx1_add_i2c_imx ( & mx1ads_i2c_data ) ;
2008-11-14 13:01:38 +03:00
}
static void __init mx1ads_timer_init ( void )
{
2009-02-16 16:36:49 +03:00
mx1_clocks_init ( 32000 ) ;
2008-11-14 13:01:38 +03:00
}
struct sys_timer mx1ads_timer = {
. init = mx1ads_timer_init ,
} ;
MACHINE_START ( MX1ADS , " Freescale MX1ADS " )
/* Maintainer: Sascha Hauer, Pengutronix */
2010-03-04 23:02:41 +03:00
. phys_io = MX1_IO_BASE_ADDR ,
. io_pg_offst = ( MX1_IO_BASE_ADDR_VIRT > > 18 ) & 0xfffc ,
2010-01-29 19:36:05 +03:00
. boot_params = MX1_PHYS_OFFSET + 0x100 ,
2009-04-29 15:41:40 +04:00
. map_io = mx1_map_io ,
2009-05-25 19:36:19 +04:00
. init_irq = mx1_init_irq ,
2008-11-14 13:01:38 +03:00
. timer = & mx1ads_timer ,
. init_machine = mx1ads_init ,
MACHINE_END
MACHINE_START ( MXLADS , " Freescale MXLADS " )
2010-03-04 23:02:41 +03:00
. phys_io = MX1_IO_BASE_ADDR ,
. io_pg_offst = ( MX1_IO_BASE_ADDR_VIRT > > 18 ) & 0xfffc ,
2010-01-29 19:36:05 +03:00
. boot_params = MX1_PHYS_OFFSET + 0x100 ,
2009-04-03 00:32:10 +04:00
. map_io = mx1_map_io ,
2009-05-25 19:36:19 +04:00
. init_irq = mx1_init_irq ,
2008-11-14 13:01:38 +03:00
. timer = & mx1ads_timer ,
. init_machine = mx1ads_init ,
MACHINE_END