2011-01-04 14:22:56 +08:00
/*
2011-01-15 13:40:12 -06:00
* Copyright ( C ) 2010 - 2011 Freescale Semiconductor , Inc . All Rights Reserved .
2011-01-04 14:22:56 +08:00
* Copyright ( C ) 2010 Yong Shen . < Yong . Shen @ linaro . org >
*/
/*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
* You should have received a copy of the GNU General Public License along
* with this program ; if not , write to the Free Software Foundation , Inc . ,
* 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 USA .
*/
# include <linux/init.h>
# include <linux/clk.h>
2011-01-07 12:25:32 +08:00
# include <linux/delay.h>
# include <linux/gpio.h>
2011-01-13 11:39:53 +08:00
# include <linux/spi/flash.h>
# include <linux/spi/spi.h>
2011-01-04 14:22:56 +08:00
# include <mach/common.h>
# include <mach/hardware.h>
# include <asm/mach-types.h>
# include <asm/mach/arch.h>
# include <asm/mach/time.h>
# include <mach/iomux-mx53.h>
2011-03-16 22:52:34 -03:00
# define MX53_EVK_FEC_PHY_RST IMX_GPIO_NR(7, 6)
2011-01-13 11:39:52 +08:00
# define EVK_ECSPI1_CS0 IMX_GPIO_NR(2, 30)
# define EVK_ECSPI1_CS1 IMX_GPIO_NR(3, 19)
2011-05-30 12:42:26 -03:00
# define MX53EVK_LED IMX_GPIO_NR(7, 7)
2011-01-07 12:25:32 +08:00
2011-01-04 14:22:56 +08:00
# include "crm_regs.h"
# include "devices-imx53.h"
static iomux_v3_cfg_t mx53_evk_pads [ ] = {
2011-01-15 13:40:12 -06:00
MX53_PAD_CSI0_DAT10__UART1_TXD_MUX ,
MX53_PAD_CSI0_DAT11__UART1_RXD_MUX ,
2011-01-04 14:22:56 +08:00
2011-01-15 13:40:12 -06:00
MX53_PAD_PATA_BUFFER_EN__UART2_RXD_MUX ,
MX53_PAD_PATA_DMARQ__UART2_TXD_MUX ,
MX53_PAD_PATA_DIOR__UART2_RTS ,
MX53_PAD_PATA_INTRQ__UART2_CTS ,
2011-01-04 14:22:56 +08:00
2011-01-15 13:40:12 -06:00
MX53_PAD_PATA_CS_0__UART3_TXD_MUX ,
MX53_PAD_PATA_CS_1__UART3_RXD_MUX ,
2011-01-13 11:39:52 +08:00
2011-01-15 13:40:12 -06:00
MX53_PAD_EIM_D16__ECSPI1_SCLK ,
MX53_PAD_EIM_D17__ECSPI1_MISO ,
MX53_PAD_EIM_D18__ECSPI1_MOSI ,
2011-01-13 11:39:52 +08:00
/* ecspi chip select lines */
2011-01-15 13:40:12 -06:00
MX53_PAD_EIM_EB2__GPIO2_30 ,
MX53_PAD_EIM_D19__GPIO3_19 ,
2011-05-30 12:42:26 -03:00
/* LED */
MX53_PAD_PATA_DA_1__GPIO7_7 ,
2011-01-04 14:22:56 +08:00
} ;
static const struct imxuart_platform_data mx53_evk_uart_pdata __initconst = {
. flags = IMXUART_HAVE_RTSCTS ,
} ;
2011-05-30 12:42:26 -03:00
static const struct gpio_led mx53evk_leds [ ] __initconst = {
{
. name = " green " ,
. default_trigger = " heartbeat " ,
. gpio = MX53EVK_LED ,
} ,
} ;
static const struct gpio_led_platform_data mx53evk_leds_data __initconst = {
. leds = mx53evk_leds ,
. num_leds = ARRAY_SIZE ( mx53evk_leds ) ,
} ;
2011-01-04 14:22:56 +08:00
static inline void mx53_evk_init_uart ( void )
{
2011-01-31 15:12:54 -02:00
imx53_add_imx_uart ( 0 , NULL ) ;
2011-01-04 14:22:56 +08:00
imx53_add_imx_uart ( 1 , & mx53_evk_uart_pdata ) ;
2011-03-02 13:30:53 -03:00
imx53_add_imx_uart ( 2 , NULL ) ;
2011-01-04 14:22:56 +08:00
}
2011-01-07 12:25:33 +08:00
static const struct imxi2c_platform_data mx53_evk_i2c_data __initconst = {
. bitrate = 100000 ,
} ;
2011-01-07 12:25:32 +08:00
static inline void mx53_evk_fec_reset ( void )
{
int ret ;
/* reset FEC PHY */
2011-03-16 22:52:34 -03:00
ret = gpio_request_one ( MX53_EVK_FEC_PHY_RST , GPIOF_OUT_INIT_LOW ,
2011-03-16 22:52:33 -03:00
" fec-phy-reset " ) ;
2011-01-07 12:25:32 +08:00
if ( ret ) {
printk ( KERN_ERR " failed to get GPIO_FEC_PHY_RESET: %d \n " , ret ) ;
return ;
}
msleep ( 1 ) ;
2011-03-16 22:52:34 -03:00
gpio_set_value ( MX53_EVK_FEC_PHY_RST , 1 ) ;
2011-01-07 12:25:32 +08:00
}
static struct fec_platform_data mx53_evk_fec_pdata = {
. phy = PHY_INTERFACE_MODE_RMII ,
} ;
2011-01-13 11:39:53 +08:00
static struct spi_board_info mx53_evk_spi_board_info [ ] __initdata = {
{
. modalias = " mtd_dataflash " ,
. max_speed_hz = 25000000 ,
. bus_num = 0 ,
. chip_select = 1 ,
. mode = SPI_MODE_0 ,
. platform_data = NULL ,
} ,
} ;
2011-01-10 20:08:53 +08:00
static int mx53_evk_spi_cs [ ] = {
EVK_ECSPI1_CS0 ,
EVK_ECSPI1_CS1 ,
} ;
static const struct spi_imx_master mx53_evk_spi_data __initconst = {
. chipselect = mx53_evk_spi_cs ,
. num_chipselect = ARRAY_SIZE ( mx53_evk_spi_cs ) ,
} ;
2011-01-04 14:22:56 +08:00
static void __init mx53_evk_board_init ( void )
{
2011-06-06 00:07:55 +08:00
imx53_soc_init ( ) ;
2011-01-04 14:22:56 +08:00
mxc_iomux_v3_setup_multiple_pads ( mx53_evk_pads ,
ARRAY_SIZE ( mx53_evk_pads ) ) ;
mx53_evk_init_uart ( ) ;
2011-01-07 12:25:32 +08:00
mx53_evk_fec_reset ( ) ;
imx53_add_fec ( & mx53_evk_fec_pdata ) ;
2011-01-07 12:25:33 +08:00
imx53_add_imx_i2c ( 0 , & mx53_evk_i2c_data ) ;
imx53_add_imx_i2c ( 1 , & mx53_evk_i2c_data ) ;
2011-01-07 12:25:34 +08:00
imx53_add_sdhci_esdhc_imx ( 0 , NULL ) ;
imx53_add_sdhci_esdhc_imx ( 1 , NULL ) ;
2011-01-10 20:08:53 +08:00
2011-01-13 11:39:53 +08:00
spi_register_board_info ( mx53_evk_spi_board_info ,
ARRAY_SIZE ( mx53_evk_spi_board_info ) ) ;
2011-01-10 20:08:53 +08:00
imx53_add_ecspi ( 0 , & mx53_evk_spi_data ) ;
2011-02-17 18:09:53 -02:00
imx53_add_imx2_wdt ( 0 , NULL ) ;
2011-05-30 12:42:26 -03:00
gpio_led_register_device ( - 1 , & mx53evk_leds_data ) ;
2011-01-04 14:22:56 +08:00
}
static void __init mx53_evk_timer_init ( void )
{
mx53_clocks_init ( 32768 , 24000000 , 22579200 , 0 ) ;
}
static struct sys_timer mx53_evk_timer = {
. init = mx53_evk_timer_init ,
} ;
MACHINE_START ( MX53_EVK , " Freescale MX53 EVK Board " )
. map_io = mx53_map_io ,
2011-02-07 16:35:21 +01:00
. init_early = imx53_init_early ,
2011-01-04 14:22:56 +08:00
. init_irq = mx53_init_irq ,
. timer = & mx53_evk_timer ,
2011-02-07 16:35:21 +01:00
. init_machine = mx53_evk_board_init ,
2011-01-04 14:22:56 +08:00
MACHINE_END