forked from Minki/linux
Merge branch 'mxc-master' of git://git.pengutronix.de/git/imx/linux-2.6 into devel
This commit is contained in:
commit
2d8d24935d
@ -59,4 +59,12 @@ config MACH_MX27_3DS
|
||||
help
|
||||
Include support for MX27PDK platform. This includes specific
|
||||
configurations for the board and its peripherals.
|
||||
|
||||
config MACH_MX27LITE
|
||||
bool "LogicPD MX27 LITEKIT platform"
|
||||
depends on MACH_MX27
|
||||
help
|
||||
Include support for MX27 LITEKIT platform. This includes specific
|
||||
configurations for the board and its peripherals.
|
||||
|
||||
endif
|
||||
|
@ -16,3 +16,5 @@ obj-$(CONFIG_MACH_MX27ADS) += mx27ads.o
|
||||
obj-$(CONFIG_MACH_PCM038) += pcm038.o
|
||||
obj-$(CONFIG_MACH_PCM970_BASEBOARD) += pcm970-baseboard.o
|
||||
obj-$(CONFIG_MACH_MX27_3DS) += mx27pdk.o
|
||||
obj-$(CONFIG_MACH_MX27LITE) += mx27lite.o
|
||||
|
||||
|
@ -48,6 +48,25 @@ static void _clk_disable(struct clk *clk)
|
||||
__raw_writel(reg, clk->enable_reg);
|
||||
}
|
||||
|
||||
static unsigned long _clk_generic_round_rate(struct clk *clk,
|
||||
unsigned long rate,
|
||||
u32 max_divisor)
|
||||
{
|
||||
u32 div;
|
||||
unsigned long parent_rate;
|
||||
|
||||
parent_rate = clk_get_rate(clk->parent);
|
||||
|
||||
div = parent_rate / rate;
|
||||
if (parent_rate % rate)
|
||||
div++;
|
||||
|
||||
if (div > max_divisor)
|
||||
div = max_divisor;
|
||||
|
||||
return parent_rate / div;
|
||||
}
|
||||
|
||||
static int _clk_spll_enable(struct clk *clk)
|
||||
{
|
||||
u32 reg;
|
||||
@ -78,19 +97,7 @@ static void _clk_spll_disable(struct clk *clk)
|
||||
static unsigned long _clk_perclkx_round_rate(struct clk *clk,
|
||||
unsigned long rate)
|
||||
{
|
||||
u32 div;
|
||||
unsigned long parent_rate;
|
||||
|
||||
parent_rate = clk_get_rate(clk->parent);
|
||||
|
||||
div = parent_rate / rate;
|
||||
if (parent_rate % rate)
|
||||
div++;
|
||||
|
||||
if (div > 64)
|
||||
div = 64;
|
||||
|
||||
return parent_rate / div;
|
||||
return _clk_generic_round_rate(clk, rate, 64);
|
||||
}
|
||||
|
||||
static int _clk_perclkx_set_rate(struct clk *clk, unsigned long rate)
|
||||
@ -130,6 +137,32 @@ static unsigned long _clk_usb_recalc(struct clk *clk)
|
||||
return parent_rate / (usb_pdf + 1U);
|
||||
}
|
||||
|
||||
static unsigned long _clk_usb_round_rate(struct clk *clk,
|
||||
unsigned long rate)
|
||||
{
|
||||
return _clk_generic_round_rate(clk, rate, 8);
|
||||
}
|
||||
|
||||
static int _clk_usb_set_rate(struct clk *clk, unsigned long rate)
|
||||
{
|
||||
u32 reg;
|
||||
u32 div;
|
||||
unsigned long parent_rate;
|
||||
|
||||
parent_rate = clk_get_rate(clk->parent);
|
||||
|
||||
div = parent_rate / rate;
|
||||
if (div > 8 || div < 1 || ((parent_rate / div) != rate))
|
||||
return -EINVAL;
|
||||
div--;
|
||||
|
||||
reg = CSCR() & ~CCM_CSCR_USB_MASK;
|
||||
reg |= div << CCM_CSCR_USB_OFFSET;
|
||||
__raw_writel(reg, CCM_CSCR);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static unsigned long _clk_ssix_recalc(struct clk *clk, unsigned long pdf)
|
||||
{
|
||||
unsigned long parent_rate;
|
||||
@ -595,11 +628,14 @@ static struct clk csi_clk[] = {
|
||||
static struct clk usb_clk[] = {
|
||||
{
|
||||
.parent = &spll_clk,
|
||||
.secondary = &usb_clk[1],
|
||||
.get_rate = _clk_usb_recalc,
|
||||
.enable = _clk_enable,
|
||||
.enable_reg = CCM_PCCR_USBOTG_REG,
|
||||
.enable_shift = CCM_PCCR_USBOTG_OFFSET,
|
||||
.disable = _clk_disable,
|
||||
.round_rate = _clk_usb_round_rate,
|
||||
.set_rate = _clk_usb_set_rate,
|
||||
}, {
|
||||
.parent = &hclk_clk,
|
||||
.enable = _clk_enable,
|
||||
@ -768,18 +804,7 @@ static struct clk rtc_clk = {
|
||||
|
||||
static unsigned long _clk_clko_round_rate(struct clk *clk, unsigned long rate)
|
||||
{
|
||||
u32 div;
|
||||
unsigned long parent_rate;
|
||||
|
||||
parent_rate = clk_get_rate(clk->parent);
|
||||
div = parent_rate / rate;
|
||||
if (parent_rate % rate)
|
||||
div++;
|
||||
|
||||
if (div > 8)
|
||||
div = 8;
|
||||
|
||||
return parent_rate / div;
|
||||
return _clk_generic_round_rate(clk, rate, 8);
|
||||
}
|
||||
|
||||
static int _clk_clko_set_rate(struct clk *clk, unsigned long rate)
|
||||
@ -921,7 +946,7 @@ static struct clk_lookup lookups[] __initdata = {
|
||||
_REGISTER_CLOCK(NULL, "cspi3", cspi_clk[2])
|
||||
_REGISTER_CLOCK("imx-fb.0", NULL, lcdc_clk[0])
|
||||
_REGISTER_CLOCK(NULL, "csi", csi_clk[0])
|
||||
_REGISTER_CLOCK(NULL, "usb", usb_clk[0])
|
||||
_REGISTER_CLOCK("imx21-hcd.0", NULL, usb_clk[0])
|
||||
_REGISTER_CLOCK(NULL, "ssi1", ssi_clk[0])
|
||||
_REGISTER_CLOCK(NULL, "ssi2", ssi_clk[1])
|
||||
_REGISTER_CLOCK("mxc_nand.0", NULL, nfc_clk)
|
||||
|
95
arch/arm/mach-mx2/mx27lite.c
Normal file
95
arch/arm/mach-mx2/mx27lite.c
Normal file
@ -0,0 +1,95 @@
|
||||
/*
|
||||
* Copyright 2007 Robert Schwebel <r.schwebel@pengutronix.de>, Pengutronix
|
||||
* Copyright (C) 2008 Juergen Beisert (kernel@pengutronix.de)
|
||||
* Copyright 2009 Daniel Schaeffer (daniel.schaeffer@timesys.com)
|
||||
*
|
||||
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/time.h>
|
||||
#include <asm/mach/map.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/common.h>
|
||||
#include <mach/imx-uart.h>
|
||||
#include <mach/iomux.h>
|
||||
#include <mach/board-mx27lite.h>
|
||||
|
||||
#include "devices.h"
|
||||
|
||||
static unsigned int mx27lite_pins[] = {
|
||||
/* UART1 */
|
||||
PE12_PF_UART1_TXD,
|
||||
PE13_PF_UART1_RXD,
|
||||
PE14_PF_UART1_CTS,
|
||||
PE15_PF_UART1_RTS,
|
||||
/* FEC */
|
||||
PD0_AIN_FEC_TXD0,
|
||||
PD1_AIN_FEC_TXD1,
|
||||
PD2_AIN_FEC_TXD2,
|
||||
PD3_AIN_FEC_TXD3,
|
||||
PD4_AOUT_FEC_RX_ER,
|
||||
PD5_AOUT_FEC_RXD1,
|
||||
PD6_AOUT_FEC_RXD2,
|
||||
PD7_AOUT_FEC_RXD3,
|
||||
PD8_AF_FEC_MDIO,
|
||||
PD9_AIN_FEC_MDC,
|
||||
PD10_AOUT_FEC_CRS,
|
||||
PD11_AOUT_FEC_TX_CLK,
|
||||
PD12_AOUT_FEC_RXD0,
|
||||
PD13_AOUT_FEC_RX_DV,
|
||||
PD14_AOUT_FEC_RX_CLK,
|
||||
PD15_AOUT_FEC_COL,
|
||||
PD16_AIN_FEC_TX_ER,
|
||||
PF23_AIN_FEC_TX_EN,
|
||||
};
|
||||
|
||||
static struct imxuart_platform_data uart_pdata = {
|
||||
.flags = IMXUART_HAVE_RTSCTS,
|
||||
};
|
||||
|
||||
static struct platform_device *platform_devices[] __initdata = {
|
||||
&mxc_fec_device,
|
||||
};
|
||||
|
||||
static void __init mx27lite_init(void)
|
||||
{
|
||||
mxc_gpio_setup_multiple_pins(mx27lite_pins, ARRAY_SIZE(mx27lite_pins),
|
||||
"imx27lite");
|
||||
mxc_register_device(&mxc_uart_device0, &uart_pdata);
|
||||
platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices));
|
||||
}
|
||||
|
||||
static void __init mx27lite_timer_init(void)
|
||||
{
|
||||
mx27_clocks_init(26000000);
|
||||
}
|
||||
|
||||
static struct sys_timer mx27lite_timer = {
|
||||
.init = mx27lite_timer_init,
|
||||
};
|
||||
|
||||
MACHINE_START(IMX27LITE, "LogicPD i.MX27LITE")
|
||||
.phys_io = AIPI_BASE_ADDR,
|
||||
.io_pg_offst = ((AIPI_BASE_ADDR_VIRT) >> 18) & 0xfffc,
|
||||
.boot_params = PHYS_OFFSET + 0x100,
|
||||
.map_io = mx27_map_io,
|
||||
.init_irq = mxc_init_irq,
|
||||
.init_machine = mx27lite_init,
|
||||
.timer = &mx27lite_timer,
|
||||
MACHINE_END
|
@ -88,7 +88,7 @@ MACHINE_START(MX27_3DS, "Freescale MX27PDK")
|
||||
.phys_io = AIPI_BASE_ADDR,
|
||||
.io_pg_offst = ((AIPI_BASE_ADDR_VIRT) >> 18) & 0xfffc,
|
||||
.boot_params = PHYS_OFFSET + 0x100,
|
||||
.map_io = mxc_map_io,
|
||||
.map_io = mx27_map_io,
|
||||
.init_irq = mxc_init_irq,
|
||||
.init_machine = mx27pdk_init,
|
||||
.timer = &mx27pdk_timer,
|
||||
|
@ -57,6 +57,13 @@ config MACH_MX31MOBOARD
|
||||
Include support for mx31moboard platform. This includes specific
|
||||
configurations for the board and its peripherals.
|
||||
|
||||
config MACH_MX31LILLY
|
||||
bool "Support MX31 LILLY-1131 platforms (INCO startec)"
|
||||
select ARCH_MX31
|
||||
help
|
||||
Include support for mx31 based LILLY1131 modules. This includes
|
||||
specific configurations for the board and its peripherals.
|
||||
|
||||
config MACH_QONG
|
||||
bool "Support Dave/DENX QongEVB-LITE platform"
|
||||
select ARCH_MX31
|
||||
@ -71,4 +78,18 @@ config MACH_PCM043
|
||||
Include support for Phytec pcm043 platform. This includes
|
||||
specific configurations for the board and its peripherals.
|
||||
|
||||
config MACH_ARMADILLO5X0
|
||||
bool "Support Atmark Armadillo-500 Development Base Board"
|
||||
select ARCH_MX31
|
||||
help
|
||||
Include support for Atmark Armadillo-500 platform. This includes
|
||||
specific configurations for the board and its peripherals.
|
||||
|
||||
config MACH_MX35_3DS
|
||||
bool "Support MX35PDK platform"
|
||||
select ARCH_MX35
|
||||
default n
|
||||
help
|
||||
Include support for MX35PDK platform. This includes specific
|
||||
configurations for the board and its peripherals.
|
||||
endif
|
||||
|
@ -8,6 +8,7 @@ obj-y := mm.o devices.o
|
||||
obj-$(CONFIG_ARCH_MX31) += clock.o iomux.o
|
||||
obj-$(CONFIG_ARCH_MX35) += clock-imx35.o
|
||||
obj-$(CONFIG_MACH_MX31ADS) += mx31ads.o
|
||||
obj-$(CONFIG_MACH_MX31LILLY) += mx31lilly.o mx31lilly-db.o
|
||||
obj-$(CONFIG_MACH_MX31LITE) += mx31lite.o
|
||||
obj-$(CONFIG_MACH_PCM037) += pcm037.o
|
||||
obj-$(CONFIG_MACH_MX31_3DS) += mx31pdk.o
|
||||
@ -15,3 +16,5 @@ obj-$(CONFIG_MACH_MX31MOBOARD) += mx31moboard.o mx31moboard-devboard.o \
|
||||
mx31moboard-marxbot.o
|
||||
obj-$(CONFIG_MACH_QONG) += qong.o
|
||||
obj-$(CONFIG_MACH_PCM043) += pcm043.o
|
||||
obj-$(CONFIG_MACH_ARMADILLO5X0) += armadillo5x0.o
|
||||
obj-$(CONFIG_MACH_MX35_3DS) += mx35pdk.o
|
||||
|
295
arch/arm/mach-mx3/armadillo5x0.c
Normal file
295
arch/arm/mach-mx3/armadillo5x0.c
Normal file
@ -0,0 +1,295 @@
|
||||
/*
|
||||
* armadillo5x0.c
|
||||
*
|
||||
* Copyright 2009 Alberto Panizzo <maramaopercheseimorto@gmail.com>
|
||||
* updates in http://alberdroid.blogspot.com/
|
||||
*
|
||||
* Based on Atmark Techno, Inc. armadillo 500 BSP 2008
|
||||
* Based on mx31ads.c and pcm037.c Great Work!
|
||||
*
|
||||
* 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/types.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/smsc911x.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/irq.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/time.h>
|
||||
#include <asm/memory.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
||||
#include <mach/common.h>
|
||||
#include <mach/imx-uart.h>
|
||||
#include <mach/iomux-mx3.h>
|
||||
#include <mach/board-armadillo5x0.h>
|
||||
#include <mach/mmc.h>
|
||||
#include <mach/ipu.h>
|
||||
#include <mach/mx3fb.h>
|
||||
|
||||
#include "devices.h"
|
||||
|
||||
static int armadillo5x0_pins[] = {
|
||||
/* UART1 */
|
||||
MX31_PIN_CTS1__CTS1,
|
||||
MX31_PIN_RTS1__RTS1,
|
||||
MX31_PIN_TXD1__TXD1,
|
||||
MX31_PIN_RXD1__RXD1,
|
||||
/* UART2 */
|
||||
MX31_PIN_CTS2__CTS2,
|
||||
MX31_PIN_RTS2__RTS2,
|
||||
MX31_PIN_TXD2__TXD2,
|
||||
MX31_PIN_RXD2__RXD2,
|
||||
/* LAN9118_IRQ */
|
||||
IOMUX_MODE(MX31_PIN_GPIO1_0, IOMUX_CONFIG_GPIO),
|
||||
/* SDHC1 */
|
||||
MX31_PIN_SD1_DATA3__SD1_DATA3,
|
||||
MX31_PIN_SD1_DATA2__SD1_DATA2,
|
||||
MX31_PIN_SD1_DATA1__SD1_DATA1,
|
||||
MX31_PIN_SD1_DATA0__SD1_DATA0,
|
||||
MX31_PIN_SD1_CLK__SD1_CLK,
|
||||
MX31_PIN_SD1_CMD__SD1_CMD,
|
||||
/* Framebuffer */
|
||||
MX31_PIN_LD0__LD0,
|
||||
MX31_PIN_LD1__LD1,
|
||||
MX31_PIN_LD2__LD2,
|
||||
MX31_PIN_LD3__LD3,
|
||||
MX31_PIN_LD4__LD4,
|
||||
MX31_PIN_LD5__LD5,
|
||||
MX31_PIN_LD6__LD6,
|
||||
MX31_PIN_LD7__LD7,
|
||||
MX31_PIN_LD8__LD8,
|
||||
MX31_PIN_LD9__LD9,
|
||||
MX31_PIN_LD10__LD10,
|
||||
MX31_PIN_LD11__LD11,
|
||||
MX31_PIN_LD12__LD12,
|
||||
MX31_PIN_LD13__LD13,
|
||||
MX31_PIN_LD14__LD14,
|
||||
MX31_PIN_LD15__LD15,
|
||||
MX31_PIN_LD16__LD16,
|
||||
MX31_PIN_LD17__LD17,
|
||||
MX31_PIN_VSYNC3__VSYNC3,
|
||||
MX31_PIN_HSYNC__HSYNC,
|
||||
MX31_PIN_FPSHIFT__FPSHIFT,
|
||||
MX31_PIN_DRDY0__DRDY0,
|
||||
IOMUX_MODE(MX31_PIN_LCS1, IOMUX_CONFIG_GPIO), /*ADV7125_PSAVE*/
|
||||
|
||||
};
|
||||
|
||||
/*
|
||||
* FB support
|
||||
*/
|
||||
static const struct fb_videomode fb_modedb[] = {
|
||||
{ /* 640x480 @ 60 Hz */
|
||||
.name = "CRT-VGA",
|
||||
.refresh = 60,
|
||||
.xres = 640,
|
||||
.yres = 480,
|
||||
.pixclock = 39721,
|
||||
.left_margin = 35,
|
||||
.right_margin = 115,
|
||||
.upper_margin = 43,
|
||||
.lower_margin = 1,
|
||||
.hsync_len = 10,
|
||||
.vsync_len = 1,
|
||||
.sync = FB_SYNC_OE_ACT_HIGH,
|
||||
.vmode = FB_VMODE_NONINTERLACED,
|
||||
.flag = 0,
|
||||
}, {/* 800x600 @ 56 Hz */
|
||||
.name = "CRT-SVGA",
|
||||
.refresh = 56,
|
||||
.xres = 800,
|
||||
.yres = 600,
|
||||
.pixclock = 30000,
|
||||
.left_margin = 30,
|
||||
.right_margin = 108,
|
||||
.upper_margin = 13,
|
||||
.lower_margin = 10,
|
||||
.hsync_len = 10,
|
||||
.vsync_len = 1,
|
||||
.sync = FB_SYNC_OE_ACT_HIGH | FB_SYNC_HOR_HIGH_ACT |
|
||||
FB_SYNC_VERT_HIGH_ACT,
|
||||
.vmode = FB_VMODE_NONINTERLACED,
|
||||
.flag = 0,
|
||||
},
|
||||
};
|
||||
|
||||
static struct ipu_platform_data mx3_ipu_data = {
|
||||
.irq_base = MXC_IPU_IRQ_START,
|
||||
};
|
||||
|
||||
static struct mx3fb_platform_data mx3fb_pdata = {
|
||||
.dma_dev = &mx3_ipu.dev,
|
||||
.name = "CRT-VGA",
|
||||
.mode = fb_modedb,
|
||||
.num_modes = ARRAY_SIZE(fb_modedb),
|
||||
};
|
||||
|
||||
/*
|
||||
* SDHC 1
|
||||
* MMC support
|
||||
*/
|
||||
static int armadillo5x0_sdhc1_get_ro(struct device *dev)
|
||||
{
|
||||
return gpio_get_value(IOMUX_TO_GPIO(MX31_PIN_ATA_RESET_B));
|
||||
}
|
||||
|
||||
static int armadillo5x0_sdhc1_init(struct device *dev,
|
||||
irq_handler_t detect_irq, void *data)
|
||||
{
|
||||
int ret;
|
||||
int gpio_det, gpio_wp;
|
||||
|
||||
gpio_det = IOMUX_TO_GPIO(MX31_PIN_ATA_DMACK);
|
||||
gpio_wp = IOMUX_TO_GPIO(MX31_PIN_ATA_RESET_B);
|
||||
|
||||
ret = gpio_request(gpio_det, "sdhc-card-detect");
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
gpio_direction_input(gpio_det);
|
||||
|
||||
ret = gpio_request(gpio_wp, "sdhc-write-protect");
|
||||
if (ret)
|
||||
goto err_gpio_free;
|
||||
|
||||
gpio_direction_input(gpio_wp);
|
||||
|
||||
/* When supported the trigger type have to be BOTH */
|
||||
ret = request_irq(IOMUX_TO_IRQ(MX31_PIN_ATA_DMACK), detect_irq,
|
||||
IRQF_DISABLED | IRQF_TRIGGER_FALLING,
|
||||
"sdhc-detect", data);
|
||||
|
||||
if (ret)
|
||||
goto err_gpio_free_2;
|
||||
|
||||
return 0;
|
||||
|
||||
err_gpio_free_2:
|
||||
gpio_free(gpio_wp);
|
||||
|
||||
err_gpio_free:
|
||||
gpio_free(gpio_det);
|
||||
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
static void armadillo5x0_sdhc1_exit(struct device *dev, void *data)
|
||||
{
|
||||
free_irq(IOMUX_TO_IRQ(MX31_PIN_ATA_DMACK), data);
|
||||
gpio_free(IOMUX_TO_GPIO(MX31_PIN_ATA_DMACK));
|
||||
gpio_free(IOMUX_TO_GPIO(MX31_PIN_ATA_RESET_B));
|
||||
}
|
||||
|
||||
static struct imxmmc_platform_data sdhc_pdata = {
|
||||
.get_ro = armadillo5x0_sdhc1_get_ro,
|
||||
.init = armadillo5x0_sdhc1_init,
|
||||
.exit = armadillo5x0_sdhc1_exit,
|
||||
};
|
||||
|
||||
/*
|
||||
* SMSC 9118
|
||||
* Network support
|
||||
*/
|
||||
static struct resource armadillo5x0_smc911x_resources[] = {
|
||||
{
|
||||
.start = CS3_BASE_ADDR,
|
||||
.end = CS3_BASE_ADDR + SZ_32M - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.start = IOMUX_TO_IRQ(MX31_PIN_GPIO1_0),
|
||||
.end = IOMUX_TO_IRQ(MX31_PIN_GPIO1_0),
|
||||
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL,
|
||||
},
|
||||
};
|
||||
|
||||
static struct smsc911x_platform_config smsc911x_info = {
|
||||
.flags = SMSC911X_USE_32BIT,
|
||||
.irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
|
||||
.irq_type = SMSC911X_IRQ_TYPE_PUSH_PULL,
|
||||
};
|
||||
|
||||
static struct platform_device armadillo5x0_smc911x_device = {
|
||||
.name = "smsc911x",
|
||||
.id = -1,
|
||||
.num_resources = ARRAY_SIZE(armadillo5x0_smc911x_resources),
|
||||
.resource = armadillo5x0_smc911x_resources,
|
||||
.dev = {
|
||||
.platform_data = &smsc911x_info,
|
||||
},
|
||||
};
|
||||
|
||||
/* UART device data */
|
||||
static struct imxuart_platform_data uart_pdata = {
|
||||
.flags = IMXUART_HAVE_RTSCTS,
|
||||
};
|
||||
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
&armadillo5x0_smc911x_device,
|
||||
};
|
||||
|
||||
/*
|
||||
* Perform board specific initializations
|
||||
*/
|
||||
static void __init armadillo5x0_init(void)
|
||||
{
|
||||
mxc_iomux_setup_multiple_pins(armadillo5x0_pins,
|
||||
ARRAY_SIZE(armadillo5x0_pins), "armadillo5x0");
|
||||
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
|
||||
/* Register UART */
|
||||
mxc_register_device(&mxc_uart_device0, &uart_pdata);
|
||||
mxc_register_device(&mxc_uart_device1, &uart_pdata);
|
||||
|
||||
/* SMSC9118 IRQ pin */
|
||||
gpio_direction_input(MX31_PIN_GPIO1_0);
|
||||
|
||||
/* Register SDHC */
|
||||
mxc_register_device(&mxcsdhc_device0, &sdhc_pdata);
|
||||
|
||||
/* Register FB */
|
||||
mxc_register_device(&mx3_ipu, &mx3_ipu_data);
|
||||
mxc_register_device(&mx3_fb, &mx3fb_pdata);
|
||||
}
|
||||
|
||||
static void __init armadillo5x0_timer_init(void)
|
||||
{
|
||||
mx31_clocks_init(26000000);
|
||||
}
|
||||
|
||||
static struct sys_timer armadillo5x0_timer = {
|
||||
.init = armadillo5x0_timer_init,
|
||||
};
|
||||
|
||||
MACHINE_START(ARMADILLO5X0, "Armadillo-500")
|
||||
/* Maintainer: Alberto Panizzo */
|
||||
.phys_io = AIPS1_BASE_ADDR,
|
||||
.io_pg_offst = ((AIPS1_BASE_ADDR_VIRT) >> 18) & 0xfffc,
|
||||
.boot_params = PHYS_OFFSET + 0x00000100,
|
||||
.map_io = mx31_map_io,
|
||||
.init_irq = mxc_init_irq,
|
||||
.timer = &armadillo5x0_timer,
|
||||
.init_machine = armadillo5x0_init,
|
||||
MACHINE_END
|
@ -483,7 +483,7 @@ DEFINE_CLOCK(i2c3_clk, 2, MXC_CCM_CGR0, 30, NULL, NULL, &perclk_clk);
|
||||
DEFINE_CLOCK(mpeg4_clk, 0, MXC_CCM_CGR1, 0, NULL, NULL, &ahb_clk);
|
||||
DEFINE_CLOCK(mstick1_clk, 0, MXC_CCM_CGR1, 2, mstick1_get_rate, NULL, &usb_pll_clk);
|
||||
DEFINE_CLOCK(mstick2_clk, 1, MXC_CCM_CGR1, 4, mstick2_get_rate, NULL, &usb_pll_clk);
|
||||
DEFINE_CLOCK1(csi_clk, 0, MXC_CCM_CGR1, 6, csi, NULL, &ahb_clk);
|
||||
DEFINE_CLOCK1(csi_clk, 0, MXC_CCM_CGR1, 6, csi, NULL, &serial_pll_clk);
|
||||
DEFINE_CLOCK(rtc_clk, 0, MXC_CCM_CGR1, 8, NULL, NULL, &ipg_clk);
|
||||
DEFINE_CLOCK(wdog_clk, 0, MXC_CCM_CGR1, 10, NULL, NULL, &ipg_clk);
|
||||
DEFINE_CLOCK(pwm_clk, 0, MXC_CCM_CGR1, 12, NULL, NULL, &perclk_clk);
|
||||
@ -571,6 +571,13 @@ int __init mx31_clocks_init(unsigned long fref)
|
||||
for (i = 0; i < ARRAY_SIZE(lookups); i++)
|
||||
clkdev_add(&lookups[i]);
|
||||
|
||||
/* change the csi_clk parent if necessary */
|
||||
reg = __raw_readl(MXC_CCM_CCMR);
|
||||
if (!(reg & MXC_CCM_CCMR_CSCS))
|
||||
if (clk_set_parent(&csi_clk, &usb_pll_clk))
|
||||
pr_err("%s: error changing csi_clk parent\n", __func__);
|
||||
|
||||
|
||||
/* Turn off all possible clocks */
|
||||
__raw_writel((3 << 4), MXC_CCM_CGR0);
|
||||
__raw_writel(0, MXC_CCM_CGR1);
|
||||
|
@ -16,3 +16,5 @@ extern struct platform_device mxc_fec_device;
|
||||
extern struct platform_device mxcsdhc_device0;
|
||||
extern struct platform_device mxcsdhc_device1;
|
||||
extern struct platform_device mxc_otg_udc_device;
|
||||
extern struct platform_device mxc_rnga_device;
|
||||
|
||||
|
216
arch/arm/mach-mx3/mx31lilly-db.c
Normal file
216
arch/arm/mach-mx3/mx31lilly-db.c
Normal file
@ -0,0 +1,216 @@
|
||||
/*
|
||||
* LILLY-1131 development board support
|
||||
*
|
||||
* Copyright (c) 2009 Daniel Mack <daniel@caiaq.de>
|
||||
*
|
||||
* based on code for other MX31 boards,
|
||||
*
|
||||
* Copyright 2005-2007 Freescale Semiconductor
|
||||
* Copyright (c) 2009 Alberto Panizzo <maramaopercheseimorto@gmail.com>
|
||||
* Copyright (C) 2009 Valentin Longchamp, EPFL Mobots group
|
||||
*
|
||||
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/common.h>
|
||||
#include <mach/imx-uart.h>
|
||||
#include <mach/iomux-mx3.h>
|
||||
#include <mach/board-mx31lilly.h>
|
||||
#include <mach/mmc.h>
|
||||
#include <mach/mx3fb.h>
|
||||
#include <mach/ipu.h>
|
||||
|
||||
#include "devices.h"
|
||||
|
||||
/*
|
||||
* This file contains board-specific initialization routines for the
|
||||
* LILLY-1131 development board. If you design an own baseboard for the
|
||||
* module, use this file as base for support code.
|
||||
*/
|
||||
|
||||
static unsigned int lilly_db_board_pins[] __initdata = {
|
||||
MX31_PIN_CTS1__CTS1,
|
||||
MX31_PIN_RTS1__RTS1,
|
||||
MX31_PIN_TXD1__TXD1,
|
||||
MX31_PIN_RXD1__RXD1,
|
||||
MX31_PIN_CTS2__CTS2,
|
||||
MX31_PIN_RTS2__RTS2,
|
||||
MX31_PIN_TXD2__TXD2,
|
||||
MX31_PIN_RXD2__RXD2,
|
||||
MX31_PIN_CSPI3_MOSI__RXD3,
|
||||
MX31_PIN_CSPI3_MISO__TXD3,
|
||||
MX31_PIN_CSPI3_SCLK__RTS3,
|
||||
MX31_PIN_CSPI3_SPI_RDY__CTS3,
|
||||
MX31_PIN_SD1_DATA3__SD1_DATA3,
|
||||
MX31_PIN_SD1_DATA2__SD1_DATA2,
|
||||
MX31_PIN_SD1_DATA1__SD1_DATA1,
|
||||
MX31_PIN_SD1_DATA0__SD1_DATA0,
|
||||
MX31_PIN_SD1_CLK__SD1_CLK,
|
||||
MX31_PIN_SD1_CMD__SD1_CMD,
|
||||
MX31_PIN_LD0__LD0,
|
||||
MX31_PIN_LD1__LD1,
|
||||
MX31_PIN_LD2__LD2,
|
||||
MX31_PIN_LD3__LD3,
|
||||
MX31_PIN_LD4__LD4,
|
||||
MX31_PIN_LD5__LD5,
|
||||
MX31_PIN_LD6__LD6,
|
||||
MX31_PIN_LD7__LD7,
|
||||
MX31_PIN_LD8__LD8,
|
||||
MX31_PIN_LD9__LD9,
|
||||
MX31_PIN_LD10__LD10,
|
||||
MX31_PIN_LD11__LD11,
|
||||
MX31_PIN_LD12__LD12,
|
||||
MX31_PIN_LD13__LD13,
|
||||
MX31_PIN_LD14__LD14,
|
||||
MX31_PIN_LD15__LD15,
|
||||
MX31_PIN_LD16__LD16,
|
||||
MX31_PIN_LD17__LD17,
|
||||
MX31_PIN_VSYNC3__VSYNC3,
|
||||
MX31_PIN_HSYNC__HSYNC,
|
||||
MX31_PIN_FPSHIFT__FPSHIFT,
|
||||
MX31_PIN_DRDY0__DRDY0,
|
||||
MX31_PIN_CONTRAST__CONTRAST,
|
||||
};
|
||||
|
||||
/* UART */
|
||||
static struct imxuart_platform_data uart_pdata __initdata = {
|
||||
.flags = IMXUART_HAVE_RTSCTS,
|
||||
};
|
||||
|
||||
/* MMC support */
|
||||
|
||||
static int mxc_mmc1_get_ro(struct device *dev)
|
||||
{
|
||||
return gpio_get_value(IOMUX_TO_GPIO(MX31_PIN_LCS0));
|
||||
}
|
||||
|
||||
static int gpio_det, gpio_wp;
|
||||
|
||||
static int mxc_mmc1_init(struct device *dev,
|
||||
irq_handler_t detect_irq, void *data)
|
||||
{
|
||||
int ret;
|
||||
|
||||
gpio_det = IOMUX_TO_GPIO(MX31_PIN_GPIO1_1);
|
||||
gpio_wp = IOMUX_TO_GPIO(MX31_PIN_LCS0);
|
||||
|
||||
ret = gpio_request(gpio_det, "MMC detect");
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = gpio_request(gpio_wp, "MMC w/p");
|
||||
if (ret)
|
||||
goto exit_free_det;
|
||||
|
||||
gpio_direction_input(gpio_det);
|
||||
gpio_direction_input(gpio_wp);
|
||||
|
||||
ret = request_irq(IOMUX_TO_IRQ(MX31_PIN_GPIO1_1), detect_irq,
|
||||
IRQF_DISABLED | IRQF_TRIGGER_FALLING,
|
||||
"MMC detect", data);
|
||||
if (ret)
|
||||
goto exit_free_wp;
|
||||
|
||||
return 0;
|
||||
|
||||
exit_free_wp:
|
||||
gpio_free(gpio_wp);
|
||||
|
||||
exit_free_det:
|
||||
gpio_free(gpio_det);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void mxc_mmc1_exit(struct device *dev, void *data)
|
||||
{
|
||||
gpio_free(gpio_det);
|
||||
gpio_free(gpio_wp);
|
||||
free_irq(IOMUX_TO_IRQ(MX31_PIN_GPIO1_1), data);
|
||||
}
|
||||
|
||||
static struct imxmmc_platform_data mmc_pdata = {
|
||||
.get_ro = mxc_mmc1_get_ro,
|
||||
.init = mxc_mmc1_init,
|
||||
.exit = mxc_mmc1_exit,
|
||||
};
|
||||
|
||||
/* Framebuffer support */
|
||||
static struct ipu_platform_data ipu_data __initdata = {
|
||||
.irq_base = MXC_IPU_IRQ_START,
|
||||
};
|
||||
|
||||
static const struct fb_videomode fb_modedb = {
|
||||
/* 640x480 TFT panel (IPS-056T) */
|
||||
.name = "CRT-VGA",
|
||||
.refresh = 64,
|
||||
.xres = 640,
|
||||
.yres = 480,
|
||||
.pixclock = 30000,
|
||||
.left_margin = 200,
|
||||
.right_margin = 2,
|
||||
.upper_margin = 2,
|
||||
.lower_margin = 2,
|
||||
.hsync_len = 3,
|
||||
.vsync_len = 1,
|
||||
.sync = FB_SYNC_VERT_HIGH_ACT | FB_SYNC_OE_ACT_HIGH,
|
||||
.vmode = FB_VMODE_NONINTERLACED,
|
||||
.flag = 0,
|
||||
};
|
||||
|
||||
static struct mx3fb_platform_data fb_pdata __initdata = {
|
||||
.dma_dev = &mx3_ipu.dev,
|
||||
.name = "CRT-VGA",
|
||||
.mode = &fb_modedb,
|
||||
.num_modes = 1,
|
||||
};
|
||||
|
||||
#define LCD_VCC_EN_GPIO (7)
|
||||
|
||||
static void __init mx31lilly_init_fb(void)
|
||||
{
|
||||
if (gpio_request(LCD_VCC_EN_GPIO, "LCD enable") != 0) {
|
||||
printk(KERN_WARNING "unable to request LCD_VCC_EN pin.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
mxc_register_device(&mx3_ipu, &ipu_data);
|
||||
mxc_register_device(&mx3_fb, &fb_pdata);
|
||||
gpio_direction_output(LCD_VCC_EN_GPIO, 1);
|
||||
}
|
||||
|
||||
void __init mx31lilly_db_init(void)
|
||||
{
|
||||
mxc_iomux_setup_multiple_pins(lilly_db_board_pins,
|
||||
ARRAY_SIZE(lilly_db_board_pins),
|
||||
"development board pins");
|
||||
mxc_register_device(&mxc_uart_device0, &uart_pdata);
|
||||
mxc_register_device(&mxc_uart_device1, &uart_pdata);
|
||||
mxc_register_device(&mxc_uart_device2, &uart_pdata);
|
||||
mxc_register_device(&mxcsdhc_device0, &mmc_pdata);
|
||||
mx31lilly_init_fb();
|
||||
}
|
||||
|
155
arch/arm/mach-mx3/mx31lilly.c
Normal file
155
arch/arm/mach-mx3/mx31lilly.c
Normal file
@ -0,0 +1,155 @@
|
||||
/*
|
||||
* LILLY-1131 module support
|
||||
*
|
||||
* Copyright (c) 2009 Daniel Mack <daniel@caiaq.de>
|
||||
*
|
||||
* based on code for other MX31 boards,
|
||||
*
|
||||
* Copyright 2005-2007 Freescale Semiconductor
|
||||
* Copyright (c) 2009 Alberto Panizzo <maramaopercheseimorto@gmail.com>
|
||||
* Copyright (C) 2009 Valentin Longchamp, EPFL Mobots group
|
||||
*
|
||||
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/smsc911x.h>
|
||||
#include <linux/mtd/physmap.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/time.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/common.h>
|
||||
#include <mach/iomux-mx3.h>
|
||||
#include <mach/board-mx31lilly.h>
|
||||
|
||||
#include "devices.h"
|
||||
|
||||
/*
|
||||
* This file contains module-specific initialization routines for LILLY-1131.
|
||||
* Initialization of peripherals found on the baseboard is implemented in the
|
||||
* appropriate baseboard support code.
|
||||
*/
|
||||
|
||||
/* SMSC ethernet support */
|
||||
|
||||
static struct resource smsc91x_resources[] = {
|
||||
{
|
||||
.start = CS4_BASE_ADDR,
|
||||
.end = CS4_BASE_ADDR + 0xffff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
{
|
||||
.start = IOMUX_TO_IRQ(MX31_PIN_GPIO1_0),
|
||||
.end = IOMUX_TO_IRQ(MX31_PIN_GPIO1_0),
|
||||
.flags = IORESOURCE_IRQ | IRQF_TRIGGER_FALLING,
|
||||
}
|
||||
};
|
||||
|
||||
static struct smsc911x_platform_config smsc911x_config = {
|
||||
.phy_interface = PHY_INTERFACE_MODE_MII,
|
||||
.irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
|
||||
.irq_type = SMSC911X_IRQ_TYPE_OPEN_DRAIN,
|
||||
.flags = SMSC911X_USE_32BIT |
|
||||
SMSC911X_SAVE_MAC_ADDRESS |
|
||||
SMSC911X_FORCE_INTERNAL_PHY,
|
||||
};
|
||||
|
||||
static struct platform_device smsc91x_device = {
|
||||
.name = "smsc911x",
|
||||
.id = -1,
|
||||
.num_resources = ARRAY_SIZE(smsc91x_resources),
|
||||
.resource = smsc91x_resources,
|
||||
.dev = {
|
||||
.platform_data = &smsc911x_config,
|
||||
}
|
||||
};
|
||||
|
||||
/* NOR flash */
|
||||
static struct physmap_flash_data nor_flash_data = {
|
||||
.width = 2,
|
||||
};
|
||||
|
||||
static struct resource nor_flash_resource = {
|
||||
.start = 0xa0000000,
|
||||
.end = 0xa1ffffff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
};
|
||||
|
||||
static struct platform_device physmap_flash_device = {
|
||||
.name = "physmap-flash",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &nor_flash_data,
|
||||
},
|
||||
.resource = &nor_flash_resource,
|
||||
.num_resources = 1,
|
||||
};
|
||||
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
&smsc91x_device,
|
||||
&physmap_flash_device,
|
||||
&mxc_i2c_device1,
|
||||
};
|
||||
|
||||
static int mx31lilly_baseboard;
|
||||
core_param(mx31lilly_baseboard, mx31lilly_baseboard, int, 0444);
|
||||
|
||||
static void __init mx31lilly_board_init(void)
|
||||
{
|
||||
switch (mx31lilly_baseboard) {
|
||||
case MX31LILLY_NOBOARD:
|
||||
break;
|
||||
case MX31LILLY_DB:
|
||||
mx31lilly_db_init();
|
||||
break;
|
||||
default:
|
||||
printk(KERN_ERR "Illegal mx31lilly_baseboard type %d\n",
|
||||
mx31lilly_baseboard);
|
||||
}
|
||||
|
||||
mxc_iomux_alloc_pin(MX31_PIN_CS4__CS4, "Ethernet CS");
|
||||
mxc_iomux_alloc_pin(MX31_PIN_CSPI2_MOSI__SCL, "I2C SCL");
|
||||
mxc_iomux_alloc_pin(MX31_PIN_CSPI2_MISO__SDA, "I2C SDA");
|
||||
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
}
|
||||
|
||||
static void __init mx31lilly_timer_init(void)
|
||||
{
|
||||
mx31_clocks_init(26000000);
|
||||
}
|
||||
|
||||
static struct sys_timer mx31lilly_timer = {
|
||||
.init = mx31lilly_timer_init,
|
||||
};
|
||||
|
||||
MACHINE_START(LILLY1131, "INCO startec LILLY-1131")
|
||||
.phys_io = AIPS1_BASE_ADDR,
|
||||
.io_pg_offst = ((AIPS1_BASE_ADDR_VIRT) >> 18) & 0xfffc,
|
||||
.boot_params = PHYS_OFFSET + 0x100,
|
||||
.map_io = mx31_map_io,
|
||||
.init_irq = mxc_init_irq,
|
||||
.init_machine = mx31lilly_board_init,
|
||||
.timer = &mx31lilly_timer,
|
||||
MACHINE_END
|
||||
|
@ -21,6 +21,8 @@
|
||||
#include <linux/clk.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/smsc911x.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <asm/mach-types.h>
|
||||
@ -55,6 +57,39 @@ static struct imxuart_platform_data uart_pdata = {
|
||||
.flags = IMXUART_HAVE_RTSCTS,
|
||||
};
|
||||
|
||||
/*
|
||||
* Support for the SMSC9217 on the Debug board.
|
||||
*/
|
||||
|
||||
static struct smsc911x_platform_config smsc911x_config = {
|
||||
.irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
|
||||
.irq_type = SMSC911X_IRQ_TYPE_PUSH_PULL,
|
||||
.flags = SMSC911X_USE_16BIT | SMSC911X_FORCE_INTERNAL_PHY,
|
||||
.phy_interface = PHY_INTERFACE_MODE_MII,
|
||||
};
|
||||
|
||||
static struct resource smsc911x_resources[] = {
|
||||
{
|
||||
.start = LAN9217_BASE_ADDR,
|
||||
.end = LAN9217_BASE_ADDR + 0xff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.start = EXPIO_INT_ENET,
|
||||
.end = EXPIO_INT_ENET,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device smsc911x_device = {
|
||||
.name = "smsc911x",
|
||||
.id = -1,
|
||||
.num_resources = ARRAY_SIZE(smsc911x_resources),
|
||||
.resource = smsc911x_resources,
|
||||
.dev = {
|
||||
.platform_data = &smsc911x_config,
|
||||
},
|
||||
};
|
||||
|
||||
/*
|
||||
* Routines for the CPLD on the debug board. It contains a CPLD handling
|
||||
* LEDs, switches, interrupts for Ethernet.
|
||||
@ -207,7 +242,8 @@ static void __init mxc_board_init(void)
|
||||
|
||||
mxc_register_device(&mxc_uart_device0, &uart_pdata);
|
||||
|
||||
mx31pdk_init_expio();
|
||||
if (!mx31pdk_init_expio())
|
||||
platform_device_register(&smsc911x_device);
|
||||
}
|
||||
|
||||
static void __init mx31pdk_timer_init(void)
|
||||
|
104
arch/arm/mach-mx3/mx35pdk.c
Normal file
104
arch/arm/mach-mx3/mx35pdk.c
Normal file
@ -0,0 +1,104 @@
|
||||
/*
|
||||
* Copyright 2009 Freescale Semiconductor, Inc. All Rights Reserved.
|
||||
*
|
||||
* Author: Fabio Estevam <fabio.estevam@freescale.com>
|
||||
*
|
||||
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/memory.h>
|
||||
#include <linux/gpio.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/time.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/common.h>
|
||||
#include <mach/imx-uart.h>
|
||||
#include <mach/iomux-mx35.h>
|
||||
|
||||
#include "devices.h"
|
||||
|
||||
static struct imxuart_platform_data uart_pdata = {
|
||||
.flags = IMXUART_HAVE_RTSCTS,
|
||||
};
|
||||
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
&mxc_fec_device,
|
||||
};
|
||||
|
||||
static struct pad_desc mx35pdk_pads[] = {
|
||||
/* UART1 */
|
||||
MX35_PAD_CTS1__UART1_CTS,
|
||||
MX35_PAD_RTS1__UART1_RTS,
|
||||
MX35_PAD_TXD1__UART1_TXD_MUX,
|
||||
MX35_PAD_RXD1__UART1_RXD_MUX,
|
||||
/* FEC */
|
||||
MX35_PAD_FEC_TX_CLK__FEC_TX_CLK,
|
||||
MX35_PAD_FEC_RX_CLK__FEC_RX_CLK,
|
||||
MX35_PAD_FEC_RX_DV__FEC_RX_DV,
|
||||
MX35_PAD_FEC_COL__FEC_COL,
|
||||
MX35_PAD_FEC_RDATA0__FEC_RDATA_0,
|
||||
MX35_PAD_FEC_TDATA0__FEC_TDATA_0,
|
||||
MX35_PAD_FEC_TX_EN__FEC_TX_EN,
|
||||
MX35_PAD_FEC_MDC__FEC_MDC,
|
||||
MX35_PAD_FEC_MDIO__FEC_MDIO,
|
||||
MX35_PAD_FEC_TX_ERR__FEC_TX_ERR,
|
||||
MX35_PAD_FEC_RX_ERR__FEC_RX_ERR,
|
||||
MX35_PAD_FEC_CRS__FEC_CRS,
|
||||
MX35_PAD_FEC_RDATA1__FEC_RDATA_1,
|
||||
MX35_PAD_FEC_TDATA1__FEC_TDATA_1,
|
||||
MX35_PAD_FEC_RDATA2__FEC_RDATA_2,
|
||||
MX35_PAD_FEC_TDATA2__FEC_TDATA_2,
|
||||
MX35_PAD_FEC_RDATA3__FEC_RDATA_3,
|
||||
MX35_PAD_FEC_TDATA3__FEC_TDATA_3,
|
||||
};
|
||||
|
||||
/*
|
||||
* Board specific initialization.
|
||||
*/
|
||||
static void __init mxc_board_init(void)
|
||||
{
|
||||
mxc_iomux_v3_setup_multiple_pads(mx35pdk_pads, ARRAY_SIZE(mx35pdk_pads));
|
||||
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
|
||||
mxc_register_device(&mxc_uart_device0, &uart_pdata);
|
||||
}
|
||||
|
||||
static void __init mx35pdk_timer_init(void)
|
||||
{
|
||||
mx35_clocks_init();
|
||||
}
|
||||
|
||||
struct sys_timer mx35pdk_timer = {
|
||||
.init = mx35pdk_timer_init,
|
||||
};
|
||||
|
||||
MACHINE_START(MX35_3DS, "Freescale MX35PDK")
|
||||
/* Maintainer: Freescale Semiconductor, Inc */
|
||||
.phys_io = AIPS1_BASE_ADDR,
|
||||
.io_pg_offst = ((AIPS1_BASE_ADDR_VIRT) >> 18) & 0xfffc,
|
||||
.boot_params = PHYS_OFFSET + 0x100,
|
||||
.map_io = mx35_map_io,
|
||||
.init_irq = mxc_init_irq,
|
||||
.init_machine = mxc_board_init,
|
||||
.timer = &mx35pdk_timer,
|
||||
MACHINE_END
|
22
arch/arm/plat-mxc/include/mach/board-armadillo5x0.h
Normal file
22
arch/arm/plat-mxc/include/mach/board-armadillo5x0.h
Normal file
@ -0,0 +1,22 @@
|
||||
/*
|
||||
* Copyright 2009 Alberto Panizzo <maramaopercheseimorto@gmail.com>.
|
||||
* All Rights Reserved.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifndef __ASM_ARCH_MXC_BOARD_ARMADILLO5X0_H__
|
||||
#define __ASM_ARCH_MXC_BOARD_ARMADILLO5X0_H__
|
||||
|
||||
#include <mach/hardware.h>
|
||||
|
||||
/* mandatory for CONFIG_DEBUG_LL */
|
||||
|
||||
#define MXC_LL_UART_PADDR UART1_BASE_ADDR
|
||||
#define MXC_LL_UART_VADDR AIPS1_IO_ADDRESS(UART1_BASE_ADDR)
|
||||
|
||||
#endif
|
19
arch/arm/plat-mxc/include/mach/board-mx27lite.h
Normal file
19
arch/arm/plat-mxc/include/mach/board-mx27lite.h
Normal file
@ -0,0 +1,19 @@
|
||||
/*
|
||||
* Copyright 2009 Freescale Semiconductor, Inc. All Rights Reserved.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifndef __ASM_ARCH_MXC_BOARD_MX27LITE_H__
|
||||
#define __ASM_ARCH_MXC_BOARD_MX27LITE_H__
|
||||
|
||||
/* mandatory for CONFIG_DEBUG_LL */
|
||||
|
||||
#define MXC_LL_UART_PADDR UART1_BASE_ADDR
|
||||
#define MXC_LL_UART_VADDR AIPS1_IO_ADDRESS(UART1_BASE_ADDR)
|
||||
|
||||
#endif /* __ASM_ARCH_MXC_BOARD_MX27LITE_H__ */
|
46
arch/arm/plat-mxc/include/mach/board-mx31lilly.h
Normal file
46
arch/arm/plat-mxc/include/mach/board-mx31lilly.h
Normal file
@ -0,0 +1,46 @@
|
||||
/*
|
||||
* Copyright (C) 2009 Daniel Mack <daniel@caiaq.de>
|
||||
*
|
||||
* Based on code for mobots boards,
|
||||
* Copyright (C) 2009 Valentin Longchamp, EPFL Mobots group
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef __ASM_ARCH_MXC_BOARD_MX31LILLY_H__
|
||||
#define __ASM_ARCH_MXC_BOARD_MX31LILLY_H__
|
||||
|
||||
/* mandatory for CONFIG_LL_DEBUG */
|
||||
|
||||
#define MXC_LL_UART_PADDR UART1_BASE_ADDR
|
||||
#define MXC_LL_UART_VADDR (AIPI_BASE_ADDR_VIRT + 0x0A000)
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
enum mx31lilly_boards {
|
||||
MX31LILLY_NOBOARD = 0,
|
||||
MX31LILLY_DB = 1,
|
||||
};
|
||||
|
||||
/*
|
||||
* This CPU module needs a baseboard to work. After basic initializing
|
||||
* its own devices, it calls baseboard's init function.
|
||||
*/
|
||||
|
||||
extern void mx31lilly_db_init(void);
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* __ASM_ARCH_MXC_BOARD_MX31LILLY_H__ */
|
27
arch/arm/plat-mxc/include/mach/board-mx35pdk.h
Normal file
27
arch/arm/plat-mxc/include/mach/board-mx35pdk.h
Normal file
@ -0,0 +1,27 @@
|
||||
/*
|
||||
* Copyright 2009 Freescale Semiconductor, Inc. All Rights Reserved
|
||||
*
|
||||
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef __ASM_ARCH_MXC_BOARD_MX35PDK_H__
|
||||
#define __ASM_ARCH_MXC_BOARD_MX35PDK_H__
|
||||
|
||||
/* mandatory for CONFIG_DEBUG_LL */
|
||||
|
||||
#define MXC_LL_UART_PADDR UART1_BASE_ADDR
|
||||
#define MXC_LL_UART_VADDR AIPS1_IO_ADDRESS(UART1_BASE_ADDR)
|
||||
|
||||
#endif /* __ASM_ARCH_MXC_BOARD_MX35PDK_H__ */
|
@ -42,6 +42,15 @@
|
||||
#endif
|
||||
#ifdef CONFIG_MACH_MX27_3DS
|
||||
#include <mach/board-mx27pdk.h>
|
||||
#endif
|
||||
#ifdef CONFIG_MACH_ARMADILLO5X0
|
||||
#include <mach/board-armadillo5x0.h>
|
||||
#endif
|
||||
#ifdef CONFIG_MACH_MX35_3DS
|
||||
#include <mach/board-mx35pdk.h>
|
||||
#endif
|
||||
#ifdef CONFIG_MACH_MX27LITE
|
||||
#include <mach/board-mx27lite.h>
|
||||
#endif
|
||||
.macro addruart,rx
|
||||
mrc p15, 0, \rx, c1, c0
|
||||
|
@ -1024,6 +1024,8 @@ imx_console_setup(struct console *co, char *options)
|
||||
if (co->index == -1 || co->index >= ARRAY_SIZE(imx_ports))
|
||||
co->index = 0;
|
||||
sport = imx_ports[co->index];
|
||||
if(sport == NULL)
|
||||
return -ENODEV;
|
||||
|
||||
if (options)
|
||||
uart_parse_options(options, &baud, &parity, &bits, &flow);
|
||||
|
Loading…
Reference in New Issue
Block a user