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>
2012-09-13 17:01:00 +04:00
# include "common.h"
2010-06-16 17:26:07 +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"
2008-11-14 13:01:38 +03:00
2010-09-28 23:53:31 +04:00
static const int mx1ads_pins [ ] __initconst = {
2009-04-29 15:17:21 +04:00
/* 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
*/
2011-07-31 02:19:55 +04:00
static const struct physmap_flash_data mx1ads_flash_data __initconst = {
2008-11-14 13:01:38 +03:00
. width = 4 , /* bankwidth in bytes */
} ;
2011-07-31 02:19:55 +04:00
static const struct resource flash_resource __initconst = {
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 ,
} ;
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 )
{
2011-06-05 20:07:55 +04:00
imx1_soc_init ( ) ;
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 */
2011-07-31 02:19:55 +04:00
platform_device_register_resndata ( NULL , " physmap-flash " , 0 ,
& flash_resource , 1 ,
& mx1ads_flash_data , sizeof ( 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-08-25 14:19:50 +04:00
imx1_add_imx_i2c ( & 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
}
MACHINE_START ( MX1ADS , " Freescale MX1ADS " )
/* Maintainer: Sascha Hauer, Pengutronix */
2011-07-06 06:38:12 +04:00
. atag_offset = 0x100 ,
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 ,
2012-11-08 23:40:59 +04:00
. init_time = mx1ads_timer_init ,
2011-02-07 18:35:19 +03:00
. init_machine = mx1ads_init ,
2011-11-06 21:12:08 +04:00
. restart = mxc_restart ,
2008-11-14 13:01:38 +03:00
MACHINE_END
MACHINE_START ( MXLADS , " Freescale MXLADS " )
2011-07-06 06:38:12 +04:00
. atag_offset = 0x100 ,
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 ,
2012-11-08 23:40:59 +04:00
. init_time = mx1ads_timer_init ,
2011-02-07 18:35:19 +03:00
. init_machine = mx1ads_init ,
2011-11-06 21:12:08 +04:00
. restart = mxc_restart ,
2008-11-14 13:01:38 +03:00
MACHINE_END