2010-02-02 22:57:53 +03:00
/*
2010-10-21 17:18:59 +04:00
* Copyright 2009 - 2010 Freescale Semiconductor , Inc . All Rights Reserved .
2010-02-02 22:57:53 +03: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 19:45:05 +04:00
# include <linux/i2c.h>
2010-05-01 00:48:25 +04:00
# include <linux/gpio.h>
# include <linux/delay.h>
# include <linux/io.h>
2010-10-23 18:12:47 +04:00
# include <linux/input.h>
2010-11-10 18:00:02 +03:00
# include <linux/spi/flash.h>
# include <linux/spi/spi.h>
2010-02-02 22:57:53 +03:00
# include <asm/setup.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-08-12 00:23:06 +04:00
# include "devices-imx51.h"
2012-09-14 10:14:45 +04:00
# include "hardware.h"
2012-09-13 09:26:00 +04:00
# include "iomux-mx51.h"
2010-02-02 22:57:53 +03:00
2010-11-26 17:20:52 +03:00
# define BABBAGE_USB_HUB_RESET IMX_GPIO_NR(1, 7)
# define BABBAGE_USBH1_STP IMX_GPIO_NR(1, 27)
2011-05-28 17:54:35 +04:00
# define BABBAGE_USB_PHY_RESET IMX_GPIO_NR(2, 5)
2010-11-26 17:20:52 +03: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 20:15:20 +04:00
# define BABBAGE_SD2_CD IMX_GPIO_NR(1, 6)
# define BABBAGE_SD2_WP IMX_GPIO_NR(1, 5)
2010-05-01 00:48:25 +04: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 18:12:47 +04: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 16:28:31 +04:00
static iomux_v3_cfg_t mx51babbage_pads [ ] = {
2010-02-02 22:57:53 +03: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-05-01 00:48:25 +04:00
2010-05-27 19:45:05 +04: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 11:56:35 +03:00
MX51_PAD_I2C1_CLK__I2C1_CLK ,
MX51_PAD_I2C1_DAT__I2C1_DAT ,
2010-05-27 19:45:05 +04:00
2010-05-01 00:48:25 +04: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 11:56:35 +03:00
MX51_PAD_GPIO1_7__GPIO1_7 ,
2010-08-23 18:32:09 +04:00
2011-05-28 17:54:35 +04:00
/* USB PHY reset line */
MX51_PAD_EIM_D21__GPIO2_5 ,
2010-08-23 18:32:09 +04:00
/* FEC */
MX51_PAD_EIM_EB2__FEC_MDIO ,
2010-12-15 11:56:35 +03:00
MX51_PAD_EIM_EB3__FEC_RDATA1 ,
MX51_PAD_EIM_CS2__FEC_RDATA2 ,
MX51_PAD_EIM_CS3__FEC_RDATA3 ,
2010-08-23 18:32:09 +04:00
MX51_PAD_EIM_CS4__FEC_RX_ER ,
MX51_PAD_EIM_CS5__FEC_CRS ,
MX51_PAD_NANDF_RB2__FEC_COL ,
2010-12-15 11:56:35 +03:00
MX51_PAD_NANDF_RB3__FEC_RX_CLK ,
MX51_PAD_NANDF_D9__FEC_RDATA0 ,
MX51_PAD_NANDF_D8__FEC_TDATA0 ,
2010-08-23 18:32:09 +04:00
MX51_PAD_NANDF_CS2__FEC_TX_ER ,
MX51_PAD_NANDF_CS3__FEC_MDC ,
2010-12-15 11:56:35 +03:00
MX51_PAD_NANDF_CS4__FEC_TDATA1 ,
MX51_PAD_NANDF_CS5__FEC_TDATA2 ,
MX51_PAD_NANDF_CS6__FEC_TDATA3 ,
2010-08-23 18:32:09 +04:00
MX51_PAD_NANDF_CS7__FEC_TX_EN ,
MX51_PAD_NANDF_RDY_INT__FEC_TX_CLK ,
/* FEC PHY reset line */
2010-12-15 11:56:35 +03:00
MX51_PAD_EIM_A20__GPIO2_14 ,
2010-10-21 20:55:20 +04: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 18:41:51 +04:00
/* CD/WP from controller */
MX51_PAD_GPIO1_0__SD1_CD ,
MX51_PAD_GPIO1_1__SD1_WP ,
2010-10-21 20:55:20 +04: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 18:41:51 +04:00
/* CD/WP gpio */
2011-06-10 20:15:20 +04:00
MX51_PAD_GPIO1_6__GPIO1_6 ,
MX51_PAD_GPIO1_5__GPIO1_5 ,
2010-11-10 18:00:02 +03:00
/* eCSPI1 */
MX51_PAD_CSPI1_MISO__ECSPI1_MISO ,
MX51_PAD_CSPI1_MOSI__ECSPI1_MOSI ,
MX51_PAD_CSPI1_SCLK__ECSPI1_SCLK ,
2010-12-15 11:56:35 +03:00
MX51_PAD_CSPI1_SS0__GPIO4_24 ,
MX51_PAD_CSPI1_SS1__GPIO4_25 ,
2012-05-11 09:05:43 +04: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 22:57:53 +03:00
} ;
/* Serial ports */
2010-08-12 00:23:06 +04:00
static const struct imxuart_platform_data uart_pdata __initconst = {
2010-02-02 22:57:53 +03:00
. flags = IMXUART_HAVE_RTSCTS ,
} ;
2010-09-30 18:44:53 +04:00
static const struct imxi2c_platform_data babbage_i2c_data __initconst = {
2010-05-27 19:45:05 +04:00
. bitrate = 100000 ,
} ;
2011-08-01 11:07:54 +04:00
static const struct imxi2c_platform_data babbage_hsi2c_data __initconst = {
2010-05-27 19:45:05 +04:00
. bitrate = 400000 ,
} ;
2011-05-28 17:54:36 +04: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-05-01 00:48:25 +04:00
static int gpio_usbh1_active ( void )
{
2010-12-15 11:56:35 +03:00
iomux_v3_cfg_t usbh1stp_gpio = MX51_PAD_USBH1_STP__GPIO1_27 ;
2010-05-01 00:48:25 +04:00
int ret ;
/* Set USBH1_STP to GPIO and toggle it */
2010-11-22 11:39:51 +03:00
mxc_iomux_v3_setup_pad ( usbh1stp_gpio ) ;
2011-05-28 17:54:36 +04:00
ret = gpio_request_array ( mx51_babbage_usbh1_gpios ,
ARRAY_SIZE ( mx51_babbage_usbh1_gpios ) ) ;
2010-05-01 00:48:25 +04:00
if ( ret ) {
2011-05-28 17:54:36 +04:00
pr_debug ( " failed to get USBH1 pins: %d \n " , ret ) ;
2010-05-01 00:48:25 +04:00
return ret ;
}
2010-05-17 19:46:01 +04:00
2011-05-28 17:54:36 +04: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-05-01 00:48:25 +04:00
return 0 ;
}
static inline void babbage_usbhub_reset ( void )
{
int ret ;
2011-03-17 18:55:57 +03:00
/* Reset USB hub */
ret = gpio_request_one ( BABBAGE_USB_HUB_RESET ,
GPIOF_OUT_INIT_LOW , " GPIO1_7 " ) ;
2010-05-01 00:48:25 +04:00
if ( ret ) {
printk ( KERN_ERR " failed to get GPIO_USB_HUB_RESET: %d \n " , ret ) ;
return ;
}
2011-03-17 18:55:57 +03:00
msleep ( 2 ) ;
/* Deassert reset */
2010-05-01 00:48:25 +04:00
gpio_set_value ( BABBAGE_USB_HUB_RESET , 1 ) ;
}
2010-08-23 18:32:09 +04:00
static inline void babbage_fec_reset ( void )
{
int ret ;
/* reset FEC PHY */
2011-03-17 04:52:31 +03:00
ret = gpio_request_one ( BABBAGE_FEC_PHY_RESET ,
GPIOF_OUT_INIT_LOW , " fec-phy-reset " ) ;
2010-08-23 18:32:09 +04: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-05-01 00:48:25 +04: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 13:37:31 +04:00
void __iomem * usbother_base ;
2010-05-01 00:48:25 +04:00
2011-07-31 01:41:49 +04:00
usb_base = ioremap ( MX51_USB_OTG_BASE_ADDR , SZ_4K ) ;
2010-12-13 15:47:05 +03:00
if ( ! usb_base )
return - ENOMEM ;
2010-05-01 00:48:25 +04: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 13:30:28 +03:00
mdelay ( 10 ) ;
return mx51_initialize_usb_hw ( 0 , MXC_EHCI_INTERNAL_PHY ) ;
2010-05-01 00:48:25 +04:00
}
static int initialize_usbh1_port ( struct platform_device * pdev )
{
u32 v ;
void __iomem * usb_base ;
2010-08-19 13:37:31 +04:00
void __iomem * usbother_base ;
2010-05-01 00:48:25 +04:00
2011-07-31 01:41:49 +04:00
usb_base = ioremap ( MX51_USB_OTG_BASE_ADDR , SZ_4K ) ;
2010-12-13 15:47:05 +03:00
if ( ! usb_base )
return - ENOMEM ;
2010-05-01 00:48:25 +04: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 13:30:28 +03:00
mdelay ( 10 ) ;
return mx51_initialize_usb_hw ( 1 , MXC_EHCI_POWER_PINS_ENABLED |
MXC_EHCI_ITC_NO_THRESHOLD ) ;
2010-05-01 00:48:25 +04:00
}
2011-07-31 01:41:49 +04:00
static const struct mxc_usbh_platform_data dr_utmi_config __initconst = {
2010-05-01 00:48:25 +04:00
. init = initialize_otg_port ,
. portsc = MXC_EHCI_UTMI_16BIT ,
} ;
2011-07-31 01:57:25 +04:00
static const struct fsl_usb2_platform_data usb_pdata __initconst = {
2010-05-10 22:45:59 +04:00
. operating_mode = FSL_USB2_DR_DEVICE ,
. phy_mode = FSL_USB2_PHY_UTMI_WIDE ,
} ;
2011-07-31 01:41:49 +04:00
static const struct mxc_usbh_platform_data usbh1_config __initconst = {
2010-05-01 00:48:25 +04:00
. init = initialize_usbh1_port ,
. portsc = MXC_EHCI_MODE_ULPI ,
} ;
2012-06-12 21:46:43 +04:00
static bool otg_mode_host __initdata ;
2010-05-10 22:45:59 +04:00
static int __init babbage_otg_mode ( char * options )
{
if ( ! strcmp ( options , " host " ) )
2012-06-12 21:46:43 +04:00
otg_mode_host = true ;
2010-05-10 22:45:59 +04:00
else if ( ! strcmp ( options , " device " ) )
2012-06-12 21:46:43 +04:00
otg_mode_host = false ;
2010-05-10 22:45:59 +04:00
else
pr_info ( " otg_mode neither \" host \" nor \" device \" . "
" Defaulting to device \n " ) ;
2012-06-12 21:46:43 +04:00
return 1 ;
2010-05-10 22:45:59 +04:00
}
__setup ( " otg_mode= " , babbage_otg_mode ) ;
2010-11-10 18:00:02 +03: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 20:15:20 +04:00
static const struct esdhc_platform_data mx51_babbage_sd1_data __initconst = {
2011-06-21 18:41:51 +04:00
. cd_type = ESDHC_CD_CONTROLLER ,
. wp_type = ESDHC_WP_CONTROLLER ,
2011-06-10 20:15:20 +04: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 18:41:51 +04:00
. cd_type = ESDHC_CD_GPIO ,
. wp_type = ESDHC_WP_GPIO ,
2011-06-10 20:15:20 +04:00
} ;
2011-10-17 04:42:17 +04:00
void __init imx51_babbage_common_init ( void )
{
mxc_iomux_v3_setup_multiple_pads ( mx51babbage_pads ,
ARRAY_SIZE ( mx51babbage_pads ) ) ;
}
2010-02-02 22:57:53 +03:00
/*
* Board specific initialization .
*/
2011-02-11 12:23:19 +03:00
static void __init mx51_babbage_init ( void )
2010-02-02 22:57:53 +03:00
{
2010-10-26 16:28:31 +04:00
iomux_v3_cfg_t usbh1stp = MX51_PAD_USBH1_STP__USBH1_STP ;
2011-08-13 23:51:41 +04:00
iomux_v3_cfg_t power_key = NEW_PAD_CTRL ( MX51_PAD_EIM_A27__GPIO2_21 ,
2011-12-05 06:28:11 +04:00
PAD_CTL_SRE_FAST | PAD_CTL_DSE_HIGH ) ;
2010-05-01 00:48:25 +04:00
2011-06-05 20:07:55 +04:00
imx51_soc_init ( ) ;
2011-10-17 04:42:17 +04:00
imx51_babbage_common_init ( ) ;
2011-01-14 13:30:33 +03:00
imx51_add_imx_uart ( 0 , & uart_pdata ) ;
2011-07-26 00:46:31 +04:00
imx51_add_imx_uart ( 1 , NULL ) ;
2011-01-14 13:30:33 +03:00
imx51_add_imx_uart ( 2 , & uart_pdata ) ;
2010-08-23 18:32:09 +04:00
babbage_fec_reset ( ) ;
2010-10-06 14:00:18 +04:00
imx51_add_fec ( NULL ) ;
2010-05-01 00:48:25 +04:00
2010-10-23 18:12:47 +04:00
/* Set the PAD settings for the pwr key. */
2010-11-22 11:39:51 +03:00
mxc_iomux_v3_setup_pad ( power_key ) ;
2011-04-06 20:05:26 +04:00
imx_add_gpio_keys ( & imx_button_data ) ;
2010-10-23 18:12:47 +04:00
2010-09-30 18:44:53 +04:00
imx51_add_imx_i2c ( 0 , & babbage_i2c_data ) ;
imx51_add_imx_i2c ( 1 , & babbage_i2c_data ) ;
2011-08-01 11:07:54 +04:00
imx51_add_hsi2c ( & babbage_hsi2c_data ) ;
2010-05-27 19:45:05 +04:00
2010-05-10 22:45:59 +04:00
if ( otg_mode_host )
2011-07-31 01:41:49 +04:00
imx51_add_mxc_ehci_otg ( & dr_utmi_config ) ;
2010-05-10 22:45:59 +04:00
else {
initialize_otg_port ( NULL ) ;
2011-07-31 01:57:25 +04:00
imx51_add_fsl_usb2_udc ( & usb_pdata ) ;
2010-05-10 22:45:59 +04:00
}
2010-05-01 00:48:25 +04:00
gpio_usbh1_active ( ) ;
2011-07-31 01:41:49 +04:00
imx51_add_mxc_ehci_hs ( 1 , & usbh1_config ) ;
2010-05-01 00:48:25 +04:00
/* setback USBH1_STP to be function */
2010-11-22 11:39:51 +03:00
mxc_iomux_v3_setup_pad ( usbh1stp ) ;
2010-05-01 00:48:25 +04:00
babbage_usbhub_reset ( ) ;
2010-10-21 20:55:20 +04:00
2011-06-10 20:15:20 +04:00
imx51_add_sdhci_esdhc_imx ( 0 , & mx51_babbage_sd1_data ) ;
imx51_add_sdhci_esdhc_imx ( 1 , & mx51_babbage_sd2_data ) ;
2010-11-10 18:00:02 +03: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 18:35:54 +04:00
imx51_add_imx2_wdt ( 0 ) ;
2010-02-02 22:57:53 +03:00
}
static void __init mx51_babbage_timer_init ( void )
{
2010-02-17 23:02:56 +03:00
mx51_clocks_init ( 32768 , 24000000 , 22579200 , 0 ) ;
2010-02-02 22:57:53 +03:00
}
MACHINE_START ( MX51_BABBAGE , " Freescale MX51 Babbage Board " )
/* Maintainer: Amit Kucheria <amit.kucheria@canonical.com> */
2011-07-06 06:38:14 +04:00
. atag_offset = 0x100 ,
2010-02-02 22:57:53 +03:00
. map_io = mx51_map_io ,
2011-02-07 18:35:21 +03:00
. init_early = imx51_init_early ,
2010-02-02 22:57:53 +03:00
. init_irq = mx51_init_irq ,
2011-09-20 16:31:24 +04:00
. handle_irq = imx51_handle_irq ,
2012-11-08 23:40:59 +04:00
. init_time = mx51_babbage_timer_init ,
2011-02-11 12:23:19 +03:00
. init_machine = mx51_babbage_init ,
2012-04-26 07:42:34 +04:00
. init_late = imx51_init_late ,
2011-11-06 21:12:08 +04:00
. restart = mxc_restart ,
2010-02-02 22:57:53 +03:00
MACHINE_END