2010-02-02 11:57:53 -08:00
/*
2010-10-21 21:18:59 +08:00
* Copyright 2009 - 2010 Freescale Semiconductor , Inc . All Rights Reserved .
2010-02-02 11:57:53 -08:00
* Copyright ( C ) 2009 - 2010 Amit Kucheria < amit . kucheria @ canonical . com >
*
* The code contained herein is licensed under the GNU General Public
* License . You may obtain a copy of the GNU General Public License
* Version 2 or later at the following locations :
*
* http : //www.opensource.org/licenses/gpl-license.html
* http : //www.gnu.org/copyleft/gpl.html
*/
# include <linux/init.h>
# include <linux/platform_device.h>
2010-05-27 10:45:05 -05:00
# include <linux/i2c.h>
2010-04-30 15:48:25 -05:00
# include <linux/gpio.h>
# include <linux/delay.h>
# include <linux/io.h>
2010-10-23 09:12:47 -05:00
# include <linux/input.h>
2010-11-10 07:00:02 -08:00
# include <linux/spi/flash.h>
# include <linux/spi/spi.h>
2010-02-02 11:57:53 -08:00
# include <asm/setup.h>
# include <asm/mach-types.h>
# include <asm/mach/arch.h>
# include <asm/mach/time.h>
2012-09-13 21:01:00 +08:00
# include "common.h"
2010-08-11 22:23:06 +02:00
# include "devices-imx51.h"
2010-10-21 21:18:59 +08:00
# include "cpu_op-mx51.h"
2012-09-14 14:14:45 +08:00
# include "hardware.h"
2012-09-13 13:26:00 +08:00
# include "iomux-mx51.h"
2010-02-02 11:57:53 -08:00
2010-11-26 15:20:52 +01:00
# define BABBAGE_USB_HUB_RESET IMX_GPIO_NR(1, 7)
# define BABBAGE_USBH1_STP IMX_GPIO_NR(1, 27)
2011-05-28 10:54:35 -03:00
# define BABBAGE_USB_PHY_RESET IMX_GPIO_NR(2, 5)
2010-11-26 15:20:52 +01:00
# define BABBAGE_FEC_PHY_RESET IMX_GPIO_NR(2, 14)
# define BABBAGE_POWER_KEY IMX_GPIO_NR(2, 21)
# define BABBAGE_ECSPI1_CS0 IMX_GPIO_NR(4, 24)
# define BABBAGE_ECSPI1_CS1 IMX_GPIO_NR(4, 25)
2011-06-10 13:15:20 -03:00
# define BABBAGE_SD2_CD IMX_GPIO_NR(1, 6)
# define BABBAGE_SD2_WP IMX_GPIO_NR(1, 5)
2010-04-30 15:48:25 -05:00
/* USB_CTRL_1 */
# define MX51_USB_CTRL_1_OFFSET 0x10
# define MX51_USB_CTRL_UH1_EXT_CLK_EN (1 << 25)
# define MX51_USB_PLLDIV_12_MHZ 0x00
# define MX51_USB_PLL_DIV_19_2_MHZ 0x01
# define MX51_USB_PLL_DIV_24_MHZ 0x02
2010-10-23 09:12:47 -05:00
static struct gpio_keys_button babbage_buttons [ ] = {
{
. gpio = BABBAGE_POWER_KEY ,
. code = BTN_0 ,
. desc = " PWR " ,
. active_low = 1 ,
. wakeup = 1 ,
} ,
} ;
static const struct gpio_keys_platform_data imx_button_data __initconst = {
. buttons = babbage_buttons ,
. nbuttons = ARRAY_SIZE ( babbage_buttons ) ,
} ;
2010-10-26 14:28:31 +02:00
static iomux_v3_cfg_t mx51babbage_pads [ ] = {
2010-02-02 11:57:53 -08:00
/* UART1 */
MX51_PAD_UART1_RXD__UART1_RXD ,
MX51_PAD_UART1_TXD__UART1_TXD ,
MX51_PAD_UART1_RTS__UART1_RTS ,
MX51_PAD_UART1_CTS__UART1_CTS ,
/* UART2 */
MX51_PAD_UART2_RXD__UART2_RXD ,
MX51_PAD_UART2_TXD__UART2_TXD ,
/* UART3 */
MX51_PAD_EIM_D25__UART3_RXD ,
MX51_PAD_EIM_D26__UART3_TXD ,
MX51_PAD_EIM_D27__UART3_RTS ,
MX51_PAD_EIM_D24__UART3_CTS ,
2010-04-30 15:48:25 -05:00
2010-05-27 10:45:05 -05:00
/* I2C1 */
MX51_PAD_EIM_D16__I2C1_SDA ,
MX51_PAD_EIM_D19__I2C1_SCL ,
/* I2C2 */
MX51_PAD_KEY_COL4__I2C2_SCL ,
MX51_PAD_KEY_COL5__I2C2_SDA ,
/* HSI2C */
2010-12-15 09:56:35 +01:00
MX51_PAD_I2C1_CLK__I2C1_CLK ,
MX51_PAD_I2C1_DAT__I2C1_DAT ,
2010-05-27 10:45:05 -05:00
2010-04-30 15:48:25 -05:00
/* USB HOST1 */
MX51_PAD_USBH1_CLK__USBH1_CLK ,
MX51_PAD_USBH1_DIR__USBH1_DIR ,
MX51_PAD_USBH1_NXT__USBH1_NXT ,
MX51_PAD_USBH1_DATA0__USBH1_DATA0 ,
MX51_PAD_USBH1_DATA1__USBH1_DATA1 ,
MX51_PAD_USBH1_DATA2__USBH1_DATA2 ,
MX51_PAD_USBH1_DATA3__USBH1_DATA3 ,
MX51_PAD_USBH1_DATA4__USBH1_DATA4 ,
MX51_PAD_USBH1_DATA5__USBH1_DATA5 ,
MX51_PAD_USBH1_DATA6__USBH1_DATA6 ,
MX51_PAD_USBH1_DATA7__USBH1_DATA7 ,
/* USB HUB reset line*/
2010-12-15 09:56:35 +01:00
MX51_PAD_GPIO1_7__GPIO1_7 ,
2010-08-23 07:32:09 -07:00
2011-05-28 10:54:35 -03:00
/* USB PHY reset line */
MX51_PAD_EIM_D21__GPIO2_5 ,
2010-08-23 07:32:09 -07:00
/* FEC */
MX51_PAD_EIM_EB2__FEC_MDIO ,
2010-12-15 09:56:35 +01:00
MX51_PAD_EIM_EB3__FEC_RDATA1 ,
MX51_PAD_EIM_CS2__FEC_RDATA2 ,
MX51_PAD_EIM_CS3__FEC_RDATA3 ,
2010-08-23 07:32:09 -07:00
MX51_PAD_EIM_CS4__FEC_RX_ER ,
MX51_PAD_EIM_CS5__FEC_CRS ,
MX51_PAD_NANDF_RB2__FEC_COL ,
2010-12-15 09:56:35 +01:00
MX51_PAD_NANDF_RB3__FEC_RX_CLK ,
MX51_PAD_NANDF_D9__FEC_RDATA0 ,
MX51_PAD_NANDF_D8__FEC_TDATA0 ,
2010-08-23 07:32:09 -07:00
MX51_PAD_NANDF_CS2__FEC_TX_ER ,
MX51_PAD_NANDF_CS3__FEC_MDC ,
2010-12-15 09:56:35 +01:00
MX51_PAD_NANDF_CS4__FEC_TDATA1 ,
MX51_PAD_NANDF_CS5__FEC_TDATA2 ,
MX51_PAD_NANDF_CS6__FEC_TDATA3 ,
2010-08-23 07:32:09 -07:00
MX51_PAD_NANDF_CS7__FEC_TX_EN ,
MX51_PAD_NANDF_RDY_INT__FEC_TX_CLK ,
/* FEC PHY reset line */
2010-12-15 09:56:35 +01:00
MX51_PAD_EIM_A20__GPIO2_14 ,
2010-10-22 00:55:20 +08:00
/* SD 1 */
MX51_PAD_SD1_CMD__SD1_CMD ,
MX51_PAD_SD1_CLK__SD1_CLK ,
MX51_PAD_SD1_DATA0__SD1_DATA0 ,
MX51_PAD_SD1_DATA1__SD1_DATA1 ,
MX51_PAD_SD1_DATA2__SD1_DATA2 ,
MX51_PAD_SD1_DATA3__SD1_DATA3 ,
2011-06-21 22:41:51 +08:00
/* CD/WP from controller */
MX51_PAD_GPIO1_0__SD1_CD ,
MX51_PAD_GPIO1_1__SD1_WP ,
2010-10-22 00:55:20 +08:00
/* SD 2 */
MX51_PAD_SD2_CMD__SD2_CMD ,
MX51_PAD_SD2_CLK__SD2_CLK ,
MX51_PAD_SD2_DATA0__SD2_DATA0 ,
MX51_PAD_SD2_DATA1__SD2_DATA1 ,
MX51_PAD_SD2_DATA2__SD2_DATA2 ,
MX51_PAD_SD2_DATA3__SD2_DATA3 ,
2011-06-21 22:41:51 +08:00
/* CD/WP gpio */
2011-06-10 13:15:20 -03:00
MX51_PAD_GPIO1_6__GPIO1_6 ,
MX51_PAD_GPIO1_5__GPIO1_5 ,
2010-11-10 07:00:02 -08:00
/* eCSPI1 */
MX51_PAD_CSPI1_MISO__ECSPI1_MISO ,
MX51_PAD_CSPI1_MOSI__ECSPI1_MOSI ,
MX51_PAD_CSPI1_SCLK__ECSPI1_SCLK ,
2010-12-15 09:56:35 +01:00
MX51_PAD_CSPI1_SS0__GPIO4_24 ,
MX51_PAD_CSPI1_SS1__GPIO4_25 ,
2012-05-11 13:05:43 +08:00
/* Audio */
MX51_PAD_AUD3_BB_TXD__AUD3_TXD ,
MX51_PAD_AUD3_BB_RXD__AUD3_RXD ,
MX51_PAD_AUD3_BB_CK__AUD3_TXC ,
MX51_PAD_AUD3_BB_FS__AUD3_TXFS ,
2010-02-02 11:57:53 -08:00
} ;
/* Serial ports */
2010-08-11 22:23:06 +02:00
static const struct imxuart_platform_data uart_pdata __initconst = {
2010-02-02 11:57:53 -08:00
. flags = IMXUART_HAVE_RTSCTS ,
} ;
2010-09-30 16:44:53 +02:00
static const struct imxi2c_platform_data babbage_i2c_data __initconst = {
2010-05-27 10:45:05 -05:00
. bitrate = 100000 ,
} ;
2011-08-01 09:07:54 +02:00
static const struct imxi2c_platform_data babbage_hsi2c_data __initconst = {
2010-05-27 10:45:05 -05:00
. bitrate = 400000 ,
} ;
2011-05-28 10:54:36 -03:00
static struct gpio mx51_babbage_usbh1_gpios [ ] = {
{ BABBAGE_USBH1_STP , GPIOF_OUT_INIT_LOW , " usbh1_stp " } ,
{ BABBAGE_USB_PHY_RESET , GPIOF_OUT_INIT_LOW , " usbh1_phy_reset " } ,
} ;
2010-04-30 15:48:25 -05:00
static int gpio_usbh1_active ( void )
{
2010-12-15 09:56:35 +01:00
iomux_v3_cfg_t usbh1stp_gpio = MX51_PAD_USBH1_STP__GPIO1_27 ;
2010-04-30 15:48:25 -05:00
int ret ;
/* Set USBH1_STP to GPIO and toggle it */
2010-11-22 09:39:51 +01:00
mxc_iomux_v3_setup_pad ( usbh1stp_gpio ) ;
2011-05-28 10:54:36 -03:00
ret = gpio_request_array ( mx51_babbage_usbh1_gpios ,
ARRAY_SIZE ( mx51_babbage_usbh1_gpios ) ) ;
2010-04-30 15:48:25 -05:00
if ( ret ) {
2011-05-28 10:54:36 -03:00
pr_debug ( " failed to get USBH1 pins: %d \n " , ret ) ;
2010-04-30 15:48:25 -05:00
return ret ;
}
2010-05-17 10:46:01 -05:00
2011-05-28 10:54:36 -03:00
msleep ( 100 ) ;
gpio_set_value ( BABBAGE_USBH1_STP , 1 ) ;
gpio_set_value ( BABBAGE_USB_PHY_RESET , 1 ) ;
gpio_free_array ( mx51_babbage_usbh1_gpios ,
ARRAY_SIZE ( mx51_babbage_usbh1_gpios ) ) ;
2010-04-30 15:48:25 -05:00
return 0 ;
}
static inline void babbage_usbhub_reset ( void )
{
int ret ;
2011-03-17 12:55:57 -03:00
/* Reset USB hub */
ret = gpio_request_one ( BABBAGE_USB_HUB_RESET ,
GPIOF_OUT_INIT_LOW , " GPIO1_7 " ) ;
2010-04-30 15:48:25 -05:00
if ( ret ) {
printk ( KERN_ERR " failed to get GPIO_USB_HUB_RESET: %d \n " , ret ) ;
return ;
}
2011-03-17 12:55:57 -03:00
msleep ( 2 ) ;
/* Deassert reset */
2010-04-30 15:48:25 -05:00
gpio_set_value ( BABBAGE_USB_HUB_RESET , 1 ) ;
}
2010-08-23 07:32:09 -07:00
static inline void babbage_fec_reset ( void )
{
int ret ;
/* reset FEC PHY */
2011-03-16 22:52:31 -03:00
ret = gpio_request_one ( BABBAGE_FEC_PHY_RESET ,
GPIOF_OUT_INIT_LOW , " fec-phy-reset " ) ;
2010-08-23 07:32:09 -07:00
if ( ret ) {
printk ( KERN_ERR " failed to get GPIO_FEC_PHY_RESET: %d \n " , ret ) ;
return ;
}
msleep ( 1 ) ;
gpio_set_value ( BABBAGE_FEC_PHY_RESET , 1 ) ;
}
2010-04-30 15:48:25 -05:00
/* This function is board specific as the bit mask for the plldiv will also
be different for other Freescale SoCs , thus a common bitmask is not
possible and cannot get place in / plat - mxc / ehci . c . */
static int initialize_otg_port ( struct platform_device * pdev )
{
u32 v ;
void __iomem * usb_base ;
2010-08-19 11:37:31 +02:00
void __iomem * usbother_base ;
2010-04-30 15:48:25 -05:00
2011-07-30 23:41:49 +02:00
usb_base = ioremap ( MX51_USB_OTG_BASE_ADDR , SZ_4K ) ;
2010-12-13 10:47:05 -02:00
if ( ! usb_base )
return - ENOMEM ;
2010-04-30 15:48:25 -05:00
usbother_base = usb_base + MX5_USBOTHER_REGS_OFFSET ;
/* Set the PHY clock to 19.2MHz */
v = __raw_readl ( usbother_base + MXC_USB_PHY_CTR_FUNC2_OFFSET ) ;
v & = ~ MX5_USB_UTMI_PHYCTRL1_PLLDIV_MASK ;
v | = MX51_USB_PLL_DIV_19_2_MHZ ;
__raw_writel ( v , usbother_base + MXC_USB_PHY_CTR_FUNC2_OFFSET ) ;
iounmap ( usb_base ) ;
2011-01-03 11:30:28 +01:00
mdelay ( 10 ) ;
return mx51_initialize_usb_hw ( 0 , MXC_EHCI_INTERNAL_PHY ) ;
2010-04-30 15:48:25 -05:00
}
static int initialize_usbh1_port ( struct platform_device * pdev )
{
u32 v ;
void __iomem * usb_base ;
2010-08-19 11:37:31 +02:00
void __iomem * usbother_base ;
2010-04-30 15:48:25 -05:00
2011-07-30 23:41:49 +02:00
usb_base = ioremap ( MX51_USB_OTG_BASE_ADDR , SZ_4K ) ;
2010-12-13 10:47:05 -02:00
if ( ! usb_base )
return - ENOMEM ;
2010-04-30 15:48:25 -05:00
usbother_base = usb_base + MX5_USBOTHER_REGS_OFFSET ;
/* The clock for the USBH1 ULPI port will come externally from the PHY. */
v = __raw_readl ( usbother_base + MX51_USB_CTRL_1_OFFSET ) ;
__raw_writel ( v | MX51_USB_CTRL_UH1_EXT_CLK_EN , usbother_base + MX51_USB_CTRL_1_OFFSET ) ;
iounmap ( usb_base ) ;
2011-01-03 11:30:28 +01:00
mdelay ( 10 ) ;
return mx51_initialize_usb_hw ( 1 , MXC_EHCI_POWER_PINS_ENABLED |
MXC_EHCI_ITC_NO_THRESHOLD ) ;
2010-04-30 15:48:25 -05:00
}
2011-07-30 23:41:49 +02:00
static const struct mxc_usbh_platform_data dr_utmi_config __initconst = {
2010-04-30 15:48:25 -05:00
. init = initialize_otg_port ,
. portsc = MXC_EHCI_UTMI_16BIT ,
} ;
2011-07-30 23:57:25 +02:00
static const struct fsl_usb2_platform_data usb_pdata __initconst = {
2010-05-10 13:45:59 -05:00
. operating_mode = FSL_USB2_DR_DEVICE ,
. phy_mode = FSL_USB2_PHY_UTMI_WIDE ,
} ;
2011-07-30 23:41:49 +02:00
static const struct mxc_usbh_platform_data usbh1_config __initconst = {
2010-04-30 15:48:25 -05:00
. init = initialize_usbh1_port ,
. portsc = MXC_EHCI_MODE_ULPI ,
} ;
2012-06-12 19:46:43 +02:00
static bool otg_mode_host __initdata ;
2010-05-10 13:45:59 -05:00
static int __init babbage_otg_mode ( char * options )
{
if ( ! strcmp ( options , " host " ) )
2012-06-12 19:46:43 +02:00
otg_mode_host = true ;
2010-05-10 13:45:59 -05:00
else if ( ! strcmp ( options , " device " ) )
2012-06-12 19:46:43 +02:00
otg_mode_host = false ;
2010-05-10 13:45:59 -05:00
else
pr_info ( " otg_mode neither \" host \" nor \" device \" . "
" Defaulting to device \n " ) ;
2012-06-12 19:46:43 +02:00
return 1 ;
2010-05-10 13:45:59 -05:00
}
__setup ( " otg_mode= " , babbage_otg_mode ) ;
2010-11-10 07:00:02 -08:00
static struct spi_board_info mx51_babbage_spi_board_info [ ] __initdata = {
{
. modalias = " mtd_dataflash " ,
. max_speed_hz = 25000000 ,
. bus_num = 0 ,
. chip_select = 1 ,
. mode = SPI_MODE_0 ,
. platform_data = NULL ,
} ,
} ;
static int mx51_babbage_spi_cs [ ] = {
BABBAGE_ECSPI1_CS0 ,
BABBAGE_ECSPI1_CS1 ,
} ;
static const struct spi_imx_master mx51_babbage_spi_pdata __initconst = {
. chipselect = mx51_babbage_spi_cs ,
. num_chipselect = ARRAY_SIZE ( mx51_babbage_spi_cs ) ,
} ;
2011-06-10 13:15:20 -03:00
static const struct esdhc_platform_data mx51_babbage_sd1_data __initconst = {
2011-06-21 22:41:51 +08:00
. cd_type = ESDHC_CD_CONTROLLER ,
. wp_type = ESDHC_WP_CONTROLLER ,
2011-06-10 13:15:20 -03:00
} ;
static const struct esdhc_platform_data mx51_babbage_sd2_data __initconst = {
. cd_gpio = BABBAGE_SD2_CD ,
. wp_gpio = BABBAGE_SD2_WP ,
2011-06-21 22:41:51 +08:00
. cd_type = ESDHC_CD_GPIO ,
. wp_type = ESDHC_WP_GPIO ,
2011-06-10 13:15:20 -03:00
} ;
2011-10-17 08:42:17 +08:00
void __init imx51_babbage_common_init ( void )
{
mxc_iomux_v3_setup_multiple_pads ( mx51babbage_pads ,
ARRAY_SIZE ( mx51babbage_pads ) ) ;
}
2010-02-02 11:57:53 -08:00
/*
* Board specific initialization .
*/
2011-02-11 10:23:19 +01:00
static void __init mx51_babbage_init ( void )
2010-02-02 11:57:53 -08:00
{
2010-10-26 14:28:31 +02:00
iomux_v3_cfg_t usbh1stp = MX51_PAD_USBH1_STP__USBH1_STP ;
2011-08-13 12:51:41 -07:00
iomux_v3_cfg_t power_key = NEW_PAD_CTRL ( MX51_PAD_EIM_A27__GPIO2_21 ,
2011-12-05 10:28:11 +08:00
PAD_CTL_SRE_FAST | PAD_CTL_DSE_HIGH ) ;
2010-04-30 15:48:25 -05:00
2011-06-06 00:07:55 +08:00
imx51_soc_init ( ) ;
2010-10-21 21:18:59 +08:00
# if defined(CONFIG_CPU_FREQ_IMX)
get_cpu_op = mx51_get_cpu_op ;
# endif
2011-10-17 08:42:17 +08:00
imx51_babbage_common_init ( ) ;
2011-01-14 11:30:33 +01:00
imx51_add_imx_uart ( 0 , & uart_pdata ) ;
2011-07-25 17:46:31 -03:00
imx51_add_imx_uart ( 1 , NULL ) ;
2011-01-14 11:30:33 +01:00
imx51_add_imx_uart ( 2 , & uart_pdata ) ;
2010-08-23 07:32:09 -07:00
babbage_fec_reset ( ) ;
2010-10-06 12:00:18 +02:00
imx51_add_fec ( NULL ) ;
2010-04-30 15:48:25 -05:00
2010-10-23 09:12:47 -05:00
/* Set the PAD settings for the pwr key. */
2010-11-22 09:39:51 +01:00
mxc_iomux_v3_setup_pad ( power_key ) ;
2011-04-06 13:05:26 -03:00
imx_add_gpio_keys ( & imx_button_data ) ;
2010-10-23 09:12:47 -05:00
2010-09-30 16:44:53 +02:00
imx51_add_imx_i2c ( 0 , & babbage_i2c_data ) ;
imx51_add_imx_i2c ( 1 , & babbage_i2c_data ) ;
2011-08-01 09:07:54 +02:00
imx51_add_hsi2c ( & babbage_hsi2c_data ) ;
2010-05-27 10:45:05 -05:00
2010-05-10 13:45:59 -05:00
if ( otg_mode_host )
2011-07-30 23:41:49 +02:00
imx51_add_mxc_ehci_otg ( & dr_utmi_config ) ;
2010-05-10 13:45:59 -05:00
else {
initialize_otg_port ( NULL ) ;
2011-07-30 23:57:25 +02:00
imx51_add_fsl_usb2_udc ( & usb_pdata ) ;
2010-05-10 13:45:59 -05:00
}
2010-04-30 15:48:25 -05:00
gpio_usbh1_active ( ) ;
2011-07-30 23:41:49 +02:00
imx51_add_mxc_ehci_hs ( 1 , & usbh1_config ) ;
2010-04-30 15:48:25 -05:00
/* setback USBH1_STP to be function */
2010-11-22 09:39:51 +01:00
mxc_iomux_v3_setup_pad ( usbh1stp ) ;
2010-04-30 15:48:25 -05:00
babbage_usbhub_reset ( ) ;
2010-10-22 00:55:20 +08:00
2011-06-10 13:15:20 -03:00
imx51_add_sdhci_esdhc_imx ( 0 , & mx51_babbage_sd1_data ) ;
imx51_add_sdhci_esdhc_imx ( 1 , & mx51_babbage_sd2_data ) ;
2010-11-10 07:00:02 -08:00
spi_register_board_info ( mx51_babbage_spi_board_info ,
ARRAY_SIZE ( mx51_babbage_spi_board_info ) ) ;
imx51_add_ecspi ( 0 , & mx51_babbage_spi_pdata ) ;
2012-07-04 16:35:54 +02:00
imx51_add_imx2_wdt ( 0 ) ;
2010-02-02 11:57:53 -08:00
}
static void __init mx51_babbage_timer_init ( void )
{
2010-02-17 12:02:56 -08:00
mx51_clocks_init ( 32768 , 24000000 , 22579200 , 0 ) ;
2010-02-02 11:57:53 -08:00
}
MACHINE_START ( MX51_BABBAGE , " Freescale MX51 Babbage Board " )
/* Maintainer: Amit Kucheria <amit.kucheria@canonical.com> */
2011-07-05 22:38:14 -04:00
. atag_offset = 0x100 ,
2010-02-02 11:57:53 -08:00
. map_io = mx51_map_io ,
2011-02-07 16:35:21 +01:00
. init_early = imx51_init_early ,
2010-02-02 11:57:53 -08:00
. init_irq = mx51_init_irq ,
2011-09-20 14:31:24 +02:00
. handle_irq = imx51_handle_irq ,
2012-11-08 12:40:59 -07:00
. init_time = mx51_babbage_timer_init ,
2011-02-11 10:23:19 +01:00
. init_machine = mx51_babbage_init ,
2012-04-26 11:42:34 +08:00
. init_late = imx51_init_late ,
2011-11-06 17:12:08 +00:00
. restart = mxc_restart ,
2010-02-02 11:57:53 -08:00
MACHINE_END