Path: blob/master/arch/arm/mach-imx/mach-eukrea_cpuimx25.c
10817 views
/*1* Copyright 2009 Sascha Hauer, <[email protected]>2* Copyright 2010 Eric Bénard - Eukréa Electromatique, <[email protected]>3*4* This program is free software; you can redistribute it and/or5* modify it under the terms of the GNU General Public License6* as published by the Free Software Foundation; either version 27* of the License, or (at your option) any later version.8* This program is distributed in the hope that it will be useful,9* but WITHOUT ANY WARRANTY; without even the implied warranty of10* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the11* GNU General Public License for more details.12*13* You should have received a copy of the GNU General Public License14* along with this program; if not, write to the Free Software15* Foundation, Inc., 51 Franklin Street, Fifth Floor,16* Boston, MA 02110-1301, USA.17*/1819#include <linux/types.h>20#include <linux/init.h>21#include <linux/delay.h>22#include <linux/clk.h>23#include <linux/irq.h>24#include <linux/gpio.h>25#include <linux/platform_device.h>26#include <linux/usb/otg.h>27#include <linux/usb/ulpi.h>2829#include <mach/eukrea-baseboards.h>30#include <mach/hardware.h>31#include <asm/mach-types.h>32#include <asm/mach/arch.h>33#include <asm/mach/time.h>34#include <asm/memory.h>35#include <asm/mach/map.h>36#include <mach/common.h>37#include <mach/mx25.h>38#include <mach/iomux-mx25.h>3940#include "devices-imx25.h"4142static const struct imxuart_platform_data uart_pdata __initconst = {43.flags = IMXUART_HAVE_RTSCTS,44};4546static iomux_v3_cfg_t eukrea_cpuimx25_pads[] = {47/* FEC - RMII */48MX25_PAD_FEC_MDC__FEC_MDC,49MX25_PAD_FEC_MDIO__FEC_MDIO,50MX25_PAD_FEC_TDATA0__FEC_TDATA0,51MX25_PAD_FEC_TDATA1__FEC_TDATA1,52MX25_PAD_FEC_TX_EN__FEC_TX_EN,53MX25_PAD_FEC_RDATA0__FEC_RDATA0,54MX25_PAD_FEC_RDATA1__FEC_RDATA1,55MX25_PAD_FEC_RX_DV__FEC_RX_DV,56MX25_PAD_FEC_TX_CLK__FEC_TX_CLK,57/* I2C1 */58MX25_PAD_I2C1_CLK__I2C1_CLK,59MX25_PAD_I2C1_DAT__I2C1_DAT,60};6162static const struct fec_platform_data mx25_fec_pdata __initconst = {63.phy = PHY_INTERFACE_MODE_RMII,64};6566static const struct mxc_nand_platform_data67eukrea_cpuimx25_nand_board_info __initconst = {68.width = 1,69.hw_ecc = 1,70.flash_bbt = 1,71};7273static const struct imxi2c_platform_data74eukrea_cpuimx25_i2c0_data __initconst = {75.bitrate = 100000,76};7778static struct i2c_board_info eukrea_cpuimx25_i2c_devices[] = {79{80I2C_BOARD_INFO("pcf8563", 0x51),81},82};8384static int eukrea_cpuimx25_otg_init(struct platform_device *pdev)85{86return mx25_initialize_usb_hw(pdev->id, MXC_EHCI_INTERFACE_DIFF_UNI);87}8889static const struct mxc_usbh_platform_data otg_pdata __initconst = {90.init = eukrea_cpuimx25_otg_init,91.portsc = MXC_EHCI_MODE_UTMI,92};9394static int eukrea_cpuimx25_usbh2_init(struct platform_device *pdev)95{96return mx25_initialize_usb_hw(pdev->id, MXC_EHCI_INTERFACE_SINGLE_UNI |97MXC_EHCI_INTERNAL_PHY | MXC_EHCI_IPPUE_DOWN);98}99100static const struct mxc_usbh_platform_data usbh2_pdata __initconst = {101.init = eukrea_cpuimx25_usbh2_init,102.portsc = MXC_EHCI_MODE_SERIAL,103};104105static const struct fsl_usb2_platform_data otg_device_pdata __initconst = {106.operating_mode = FSL_USB2_DR_DEVICE,107.phy_mode = FSL_USB2_PHY_UTMI,108};109110static int otg_mode_host;111112static int __init eukrea_cpuimx25_otg_mode(char *options)113{114if (!strcmp(options, "host"))115otg_mode_host = 1;116else if (!strcmp(options, "device"))117otg_mode_host = 0;118else119pr_info("otg_mode neither \"host\" nor \"device\". "120"Defaulting to device\n");121return 0;122}123__setup("otg_mode=", eukrea_cpuimx25_otg_mode);124125static void __init eukrea_cpuimx25_init(void)126{127if (mxc_iomux_v3_setup_multiple_pads(eukrea_cpuimx25_pads,128ARRAY_SIZE(eukrea_cpuimx25_pads)))129printk(KERN_ERR "error setting cpuimx25 pads !\n");130131imx25_add_imx_uart0(&uart_pdata);132imx25_add_mxc_nand(&eukrea_cpuimx25_nand_board_info);133imx25_add_imxdi_rtc(NULL);134imx25_add_fec(&mx25_fec_pdata);135136i2c_register_board_info(0, eukrea_cpuimx25_i2c_devices,137ARRAY_SIZE(eukrea_cpuimx25_i2c_devices));138imx25_add_imx_i2c0(&eukrea_cpuimx25_i2c0_data);139140if (otg_mode_host)141imx25_add_mxc_ehci_otg(&otg_pdata);142else143imx25_add_fsl_usb2_udc(&otg_device_pdata);144145imx25_add_mxc_ehci_hs(&usbh2_pdata);146147#ifdef CONFIG_MACH_EUKREA_MBIMXSD25_BASEBOARD148eukrea_mbimxsd25_baseboard_init();149#endif150}151152static void __init eukrea_cpuimx25_timer_init(void)153{154mx25_clocks_init();155}156157static struct sys_timer eukrea_cpuimx25_timer = {158.init = eukrea_cpuimx25_timer_init,159};160161MACHINE_START(EUKREA_CPUIMX25, "Eukrea CPUIMX25")162/* Maintainer: Eukrea Electromatique */163.boot_params = MX25_PHYS_OFFSET + 0x100,164.map_io = mx25_map_io,165.init_early = imx25_init_early,166.init_irq = mx25_init_irq,167.timer = &eukrea_cpuimx25_timer,168.init_machine = eukrea_cpuimx25_init,169MACHINE_END170171172