aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Mack <daniel@caiaq.de>2009-11-19 06:02:06 -0500
committerSascha Hauer <s.hauer@pengutronix.de>2009-11-19 11:11:01 -0500
commitb7d91a62cb402a3d24a15dca9d2b0c309c4227b4 (patch)
tree835bde38de5f8af81d94a0c8c6afdfdc8baf896c
parent3f92a8bd5fb13e7e2505c65d1548910eaa843024 (diff)
ARM: MX3: modularize 'mx31lite' code
This commit splits the support code for LogicPD's mx31lite hardware into module and board specific parts. This introduces a new mandatory coreparam called 'mx31lite_baseboard' which specifies the base board support to use. For now, only the LiteKit development board is supported, and developers of own boards are encouraged to use that as reference. The UART support moved to the board code. Some comments were amended along the way. Signed-off-by: Daniel Mack <daniel@caiaq.de> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r--arch/arm/mach-mx3/Makefile2
-rw-r--r--arch/arm/mach-mx3/mx31lite-db.c71
-rw-r--r--arch/arm/mach-mx3/mx31lite.c36
-rw-r--r--arch/arm/plat-mxc/include/mach/board-mx31lite.h39
4 files changed, 121 insertions, 27 deletions
diff --git a/arch/arm/mach-mx3/Makefile b/arch/arm/mach-mx3/Makefile
index 6b9775471be6..ed492d32b664 100644
--- a/arch/arm/mach-mx3/Makefile
+++ b/arch/arm/mach-mx3/Makefile
@@ -9,7 +9,7 @@ obj-$(CONFIG_ARCH_MX31) += clock.o iomux.o
9obj-$(CONFIG_ARCH_MX35) += clock-imx35.o 9obj-$(CONFIG_ARCH_MX35) += clock-imx35.o
10obj-$(CONFIG_MACH_MX31ADS) += mx31ads.o 10obj-$(CONFIG_MACH_MX31ADS) += mx31ads.o
11obj-$(CONFIG_MACH_MX31LILLY) += mx31lilly.o mx31lilly-db.o 11obj-$(CONFIG_MACH_MX31LILLY) += mx31lilly.o mx31lilly-db.o
12obj-$(CONFIG_MACH_MX31LITE) += mx31lite.o 12obj-$(CONFIG_MACH_MX31LITE) += mx31lite.o mx31lite-db.o
13obj-$(CONFIG_MACH_PCM037) += pcm037.o 13obj-$(CONFIG_MACH_PCM037) += pcm037.o
14obj-$(CONFIG_MACH_PCM037_EET) += pcm037_eet.o 14obj-$(CONFIG_MACH_PCM037_EET) += pcm037_eet.o
15obj-$(CONFIG_MACH_MX31_3DS) += mx31pdk.o 15obj-$(CONFIG_MACH_MX31_3DS) += mx31pdk.o
diff --git a/arch/arm/mach-mx3/mx31lite-db.c b/arch/arm/mach-mx3/mx31lite-db.c
new file mode 100644
index 000000000000..751d15ec0b03
--- /dev/null
+++ b/arch/arm/mach-mx3/mx31lite-db.c
@@ -0,0 +1,71 @@
1/*
2 * LogicPD i.MX31 SOM-LV development board support
3 *
4 * Copyright (c) 2009 Daniel Mack <daniel@caiaq.de>
5 *
6 * based on code for other MX31 boards,
7 *
8 * Copyright 2005-2007 Freescale Semiconductor
9 * Copyright (c) 2009 Alberto Panizzo <maramaopercheseimorto@gmail.com>
10 * Copyright (C) 2009 Valentin Longchamp, EPFL Mobots group
11 *
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License as published by
14 * the Free Software Foundation; either version 2 of the License, or
15 * (at your option) any later version.
16 *
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, write to the Free Software
24 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25 */
26
27#include <linux/kernel.h>
28#include <linux/types.h>
29#include <linux/init.h>
30#include <linux/gpio.h>
31
32#include <asm/mach-types.h>
33#include <asm/mach/arch.h>
34#include <asm/mach/map.h>
35
36#include <mach/hardware.h>
37#include <mach/common.h>
38#include <mach/imx-uart.h>
39#include <mach/iomux-mx3.h>
40#include <mach/board-mx31lite.h>
41
42#include "devices.h"
43
44/*
45 * This file contains board-specific initialization routines for the
46 * LogicPD i.MX31 SOM-LV development board, aka 'LiteKit'.
47 * If you design an own baseboard for the module, use this file as base
48 * for support code.
49 */
50
51static unsigned int litekit_db_board_pins[] __initdata = {
52 /* UART1 */
53 MX31_PIN_CTS1__CTS1,
54 MX31_PIN_RTS1__RTS1,
55 MX31_PIN_TXD1__TXD1,
56 MX31_PIN_RXD1__RXD1,
57};
58
59/* UART */
60static struct imxuart_platform_data uart_pdata __initdata = {
61 .flags = IMXUART_HAVE_RTSCTS,
62};
63
64void __init mx31lite_db_init(void)
65{
66 mxc_iomux_setup_multiple_pins(litekit_db_board_pins,
67 ARRAY_SIZE(litekit_db_board_pins),
68 "development board pins");
69 mxc_register_device(&mxc_uart_device0, &uart_pdata);
70}
71
diff --git a/arch/arm/mach-mx3/mx31lite.c b/arch/arm/mach-mx3/mx31lite.c
index a8d57decdfdb..dc993a878161 100644
--- a/arch/arm/mach-mx3/mx31lite.c
+++ b/arch/arm/mach-mx3/mx31lite.c
@@ -42,23 +42,14 @@
42#include "devices.h" 42#include "devices.h"
43 43
44/* 44/*
45 * This file contains the board-specific initialization routines. 45 * This file contains the module-specific initialization routines.
46 */ 46 */
47 47
48static unsigned int mx31lite_pins[] = { 48static unsigned int mx31lite_pins[] = {
49 /* UART1 */
50 MX31_PIN_CTS1__CTS1,
51 MX31_PIN_RTS1__RTS1,
52 MX31_PIN_TXD1__TXD1,
53 MX31_PIN_RXD1__RXD1,
54 /* LAN9117 IRQ pin */ 49 /* LAN9117 IRQ pin */
55 IOMUX_MODE(MX31_PIN_SFS6, IOMUX_CONFIG_GPIO), 50 IOMUX_MODE(MX31_PIN_SFS6, IOMUX_CONFIG_GPIO),
56}; 51};
57 52
58static struct imxuart_platform_data uart_pdata = {
59 .flags = IMXUART_HAVE_RTSCTS,
60};
61
62static struct mxc_nand_platform_data mx31lite_nand_board_info = { 53static struct mxc_nand_platform_data mx31lite_nand_board_info = {
63 .width = 1, 54 .width = 1,
64 .hw_ecc = 1, 55 .hw_ecc = 1,
@@ -118,17 +109,27 @@ void __init mx31lite_map_io(void)
118 iotable_init(mx31lite_io_desc, ARRAY_SIZE(mx31lite_io_desc)); 109 iotable_init(mx31lite_io_desc, ARRAY_SIZE(mx31lite_io_desc));
119} 110}
120 111
121/* 112static int mx31lite_baseboard;
122 * Board specific initialization. 113core_param(mx31lite_baseboard, mx31lite_baseboard, int, 0444);
123 */ 114
124static void __init mxc_board_init(void) 115static void __init mxc_board_init(void)
125{ 116{
126 int ret; 117 int ret;
127 118
119 switch (mx31lite_baseboard) {
120 case MX31LITE_NOBOARD:
121 break;
122 case MX31LITE_DB:
123 mx31lite_db_init();
124 break;
125 default:
126 printk(KERN_ERR "Illegal mx31lite_baseboard type %d\n",
127 mx31lite_baseboard);
128 }
129
128 mxc_iomux_setup_multiple_pins(mx31lite_pins, ARRAY_SIZE(mx31lite_pins), 130 mxc_iomux_setup_multiple_pins(mx31lite_pins, ARRAY_SIZE(mx31lite_pins),
129 "mx31lite"); 131 "mx31lite");
130 132
131 mxc_register_device(&mxc_uart_device0, &uart_pdata);
132 mxc_register_device(&mxc_nand_device, &mx31lite_nand_board_info); 133 mxc_register_device(&mxc_nand_device, &mx31lite_nand_board_info);
133 134
134 /* SMSC9117 IRQ pin */ 135 /* SMSC9117 IRQ pin */
@@ -150,12 +151,7 @@ struct sys_timer mx31lite_timer = {
150 .init = mx31lite_timer_init, 151 .init = mx31lite_timer_init,
151}; 152};
152 153
153/* 154MACHINE_START(MX31LITE, "LogicPD i.MX31 SOM")
154 * The following uses standard kernel macros defined in arch.h in order to
155 * initialize __mach_desc_MX31LITE data structure.
156 */
157
158MACHINE_START(MX31LITE, "LogicPD MX31 LITEKIT")
159 /* Maintainer: Freescale Semiconductor, Inc. */ 155 /* Maintainer: Freescale Semiconductor, Inc. */
160 .phys_io = AIPS1_BASE_ADDR, 156 .phys_io = AIPS1_BASE_ADDR,
161 .io_pg_offst = ((AIPS1_BASE_ADDR_VIRT) >> 18) & 0xfffc, 157 .io_pg_offst = ((AIPS1_BASE_ADDR_VIRT) >> 18) & 0xfffc,
diff --git a/arch/arm/plat-mxc/include/mach/board-mx31lite.h b/arch/arm/plat-mxc/include/mach/board-mx31lite.h
index 8e64325d6905..0184b638c268 100644
--- a/arch/arm/plat-mxc/include/mach/board-mx31lite.h
+++ b/arch/arm/plat-mxc/include/mach/board-mx31lite.h
@@ -1,15 +1,42 @@
1/* 1/*
2 * Copyright 2007 Freescale Semiconductor, Inc. All Rights Reserved. 2 * Copyright 2007 Freescale Semiconductor, Inc. All Rights Reserved.
3 * Copyright (C) 2009 Daniel Mack <daniel@caiaq.de>
4 *
5 * Based on code for mobots boards,
6 * Copyright (C) 2009 Valentin Longchamp, EPFL Mobots group
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * as published by the Free Software Foundation; either version 2
11 * of the License, or (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
20 * MA 02110-1301, USA.
3 */ 21 */
4 22
23#ifndef __ASM_ARCH_MXC_BOARD_MX31LITE_H__
24#define __ASM_ARCH_MXC_BOARD_MX31LITE_H__
25
26#ifndef __ASSEMBLY__
27
28enum mx31lilly_boards {
29 MX31LITE_NOBOARD = 0,
30 MX31LITE_DB = 1,
31};
32
5/* 33/*
6 * This program is free software; you can redistribute it and/or modify 34 * This CPU module needs a baseboard to work. After basic initializing
7 * it under the terms of the GNU General Public License version 2 as 35 * its own devices, it calls baseboard's init function.
8 * published by the Free Software Foundation.
9 */ 36 */
10 37
11#ifndef __ASM_ARCH_MXC_BOARD_MX31LITE_H__ 38extern void mx31lite_db_init(void);
12#define __ASM_ARCH_MXC_BOARD_MX31LITE_H__
13 39
14#endif /* __ASM_ARCH_MXC_BOARD_MX31LITE_H__ */ 40#endif
15 41
42#endif /* __ASM_ARCH_MXC_BOARD_MX31LITE_H__ */