Path: blob/master/arch/arm/mach-mx5/board-mx53_smd.c
10817 views
/*1* Copyright (C) 2011 Freescale Semiconductor, Inc. All Rights Reserved.2*/34/*5* This program is free software; you can redistribute it and/or modify6* it under the terms of the GNU General Public License as published by7* the Free Software Foundation; either version 2 of the License, or8* (at your option) any later version.910* This program is distributed in the hope that it will be useful,11* but WITHOUT ANY WARRANTY; without even the implied warranty of12* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the13* GNU General Public License for more details.1415* You should have received a copy of the GNU General Public License along16* with this program; if not, write to the Free Software Foundation, Inc.,17* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.18*/1920#include <linux/init.h>21#include <linux/clk.h>22#include <linux/delay.h>23#include <linux/gpio.h>2425#include <mach/common.h>26#include <mach/hardware.h>27#include <mach/iomux-mx53.h>2829#include <asm/mach-types.h>30#include <asm/mach/arch.h>31#include <asm/mach/time.h>3233#include "crm_regs.h"34#include "devices-imx53.h"3536#define SMD_FEC_PHY_RST IMX_GPIO_NR(7, 6)3738static iomux_v3_cfg_t mx53_smd_pads[] = {39MX53_PAD_CSI0_DAT10__UART1_TXD_MUX,40MX53_PAD_CSI0_DAT11__UART1_RXD_MUX,4142MX53_PAD_PATA_BUFFER_EN__UART2_RXD_MUX,43MX53_PAD_PATA_DMARQ__UART2_TXD_MUX,4445MX53_PAD_PATA_CS_0__UART3_TXD_MUX,46MX53_PAD_PATA_CS_1__UART3_RXD_MUX,47MX53_PAD_PATA_DA_1__UART3_CTS,48MX53_PAD_PATA_DA_2__UART3_RTS,49/* I2C1 */50MX53_PAD_CSI0_DAT8__I2C1_SDA,51MX53_PAD_CSI0_DAT9__I2C1_SCL,52/* SD1 */53MX53_PAD_SD1_CMD__ESDHC1_CMD,54MX53_PAD_SD1_CLK__ESDHC1_CLK,55MX53_PAD_SD1_DATA0__ESDHC1_DAT0,56MX53_PAD_SD1_DATA1__ESDHC1_DAT1,57MX53_PAD_SD1_DATA2__ESDHC1_DAT2,58MX53_PAD_SD1_DATA3__ESDHC1_DAT3,59/* SD2 */60MX53_PAD_SD2_CMD__ESDHC2_CMD,61MX53_PAD_SD2_CLK__ESDHC2_CLK,62MX53_PAD_SD2_DATA0__ESDHC2_DAT0,63MX53_PAD_SD2_DATA1__ESDHC2_DAT1,64MX53_PAD_SD2_DATA2__ESDHC2_DAT2,65MX53_PAD_SD2_DATA3__ESDHC2_DAT3,66/* SD3 */67MX53_PAD_PATA_DATA8__ESDHC3_DAT0,68MX53_PAD_PATA_DATA9__ESDHC3_DAT1,69MX53_PAD_PATA_DATA10__ESDHC3_DAT2,70MX53_PAD_PATA_DATA11__ESDHC3_DAT3,71MX53_PAD_PATA_DATA0__ESDHC3_DAT4,72MX53_PAD_PATA_DATA1__ESDHC3_DAT5,73MX53_PAD_PATA_DATA2__ESDHC3_DAT6,74MX53_PAD_PATA_DATA3__ESDHC3_DAT7,75MX53_PAD_PATA_IORDY__ESDHC3_CLK,76MX53_PAD_PATA_RESET_B__ESDHC3_CMD,77};7879static const struct imxuart_platform_data mx53_smd_uart_data __initconst = {80.flags = IMXUART_HAVE_RTSCTS,81};8283static inline void mx53_smd_init_uart(void)84{85imx53_add_imx_uart(0, NULL);86imx53_add_imx_uart(1, NULL);87imx53_add_imx_uart(2, &mx53_smd_uart_data);88}8990static inline void mx53_smd_fec_reset(void)91{92int ret;9394/* reset FEC PHY */95ret = gpio_request(SMD_FEC_PHY_RST, "fec-phy-reset");96if (ret) {97printk(KERN_ERR"failed to get GPIO_FEC_PHY_RESET: %d\n", ret);98return;99}100gpio_direction_output(SMD_FEC_PHY_RST, 0);101msleep(1);102gpio_set_value(SMD_FEC_PHY_RST, 1);103}104105static struct fec_platform_data mx53_smd_fec_data = {106.phy = PHY_INTERFACE_MODE_RMII,107};108109static const struct imxi2c_platform_data mx53_smd_i2c_data __initconst = {110.bitrate = 100000,111};112113static void __init mx53_smd_board_init(void)114{115mxc_iomux_v3_setup_multiple_pads(mx53_smd_pads,116ARRAY_SIZE(mx53_smd_pads));117mx53_smd_init_uart();118mx53_smd_fec_reset();119imx53_add_fec(&mx53_smd_fec_data);120imx53_add_imx2_wdt(0, NULL);121imx53_add_imx_i2c(0, &mx53_smd_i2c_data);122imx53_add_sdhci_esdhc_imx(0, NULL);123imx53_add_sdhci_esdhc_imx(1, NULL);124imx53_add_sdhci_esdhc_imx(2, NULL);125}126127static void __init mx53_smd_timer_init(void)128{129mx53_clocks_init(32768, 24000000, 22579200, 0);130}131132static struct sys_timer mx53_smd_timer = {133.init = mx53_smd_timer_init,134};135136MACHINE_START(MX53_SMD, "Freescale MX53 SMD Board")137.map_io = mx53_map_io,138.init_early = imx53_init_early,139.init_irq = mx53_init_irq,140.timer = &mx53_smd_timer,141.init_machine = mx53_smd_board_init,142MACHINE_END143144145