aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-omap1
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-omap1')
-rw-r--r--arch/arm/mach-omap1/board-generic.c100
-rw-r--r--arch/arm/mach-omap1/board-h2.c189
-rw-r--r--arch/arm/mach-omap1/board-h3.c207
-rw-r--r--arch/arm/mach-omap1/board-innovator.c282
-rw-r--r--arch/arm/mach-omap1/board-netstar.c153
-rw-r--r--arch/arm/mach-omap1/board-osk.c171
-rw-r--r--arch/arm/mach-omap1/board-perseus2.c191
-rw-r--r--arch/arm/mach-omap1/board-voiceblue.c258
8 files changed, 1551 insertions, 0 deletions
diff --git a/arch/arm/mach-omap1/board-generic.c b/arch/arm/mach-omap1/board-generic.c
new file mode 100644
index 000000000000..e2d338488d10
--- /dev/null
+++ b/arch/arm/mach-omap1/board-generic.c
@@ -0,0 +1,100 @@
1/*
2 * linux/arch/arm/mach-omap1/board-generic.c
3 *
4 * Modified from board-innovator1510.c
5 *
6 * Code for generic OMAP board. Should work on many OMAP systems where
7 * the device drivers take care of all the necessary hardware initialization.
8 * Do not put any board specific code to this file; create a new machine
9 * type if you need custom low-level initializations.
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License version 2 as
13 * published by the Free Software Foundation.
14 */
15
16#include <linux/kernel.h>
17#include <linux/init.h>
18#include <linux/device.h>
19
20#include <asm/hardware.h>
21#include <asm/mach-types.h>
22#include <asm/mach/arch.h>
23#include <asm/mach/map.h>
24
25#include <asm/arch/gpio.h>
26#include <asm/arch/mux.h>
27#include <asm/arch/usb.h>
28#include <asm/arch/board.h>
29
30#include "common.h"
31
32static int __initdata generic_serial_ports[OMAP_MAX_NR_PORTS] = {1, 1, 1};
33
34static void __init omap_generic_init_irq(void)
35{
36 omap_init_irq();
37}
38
39/* assume no Mini-AB port */
40
41#ifdef CONFIG_ARCH_OMAP1510
42static struct omap_usb_config generic1510_usb_config __initdata = {
43 .register_host = 1,
44 .register_dev = 1,
45 .hmc_mode = 16,
46 .pins[0] = 3,
47};
48#endif
49
50#if defined(CONFIG_ARCH_OMAP16XX)
51static struct omap_usb_config generic1610_usb_config __initdata = {
52 .register_host = 1,
53 .register_dev = 1,
54 .hmc_mode = 16,
55 .pins[0] = 6,
56};
57#endif
58
59static struct omap_board_config_kernel generic_config[] = {
60 { OMAP_TAG_USB, NULL },
61};
62
63static void __init omap_generic_init(void)
64{
65 /*
66 * Make sure the serial ports are muxed on at this point.
67 * You have to mux them off in device drivers later on
68 * if not needed.
69 */
70#ifdef CONFIG_ARCH_OMAP1510
71 if (cpu_is_omap1510()) {
72 generic_config[0].data = &generic1510_usb_config;
73 }
74#endif
75#if defined(CONFIG_ARCH_OMAP16XX)
76 if (!cpu_is_omap1510()) {
77 generic_config[0].data = &generic1610_usb_config;
78 }
79#endif
80 omap_board_config = generic_config;
81 omap_board_config_size = ARRAY_SIZE(generic_config);
82 omap_serial_init(generic_serial_ports);
83}
84
85static void __init omap_generic_map_io(void)
86{
87 omap_map_io();
88}
89
90MACHINE_START(OMAP_GENERIC, "Generic OMAP1510/1610/1710")
91 /* Maintainer: Tony Lindgren <tony@atomide.com> */
92 .phys_ram = 0x10000000,
93 .phys_io = 0xfff00000,
94 .io_pg_offst = ((0xfef00000) >> 18) & 0xfffc,
95 .boot_params = 0x10000100,
96 .map_io = omap_generic_map_io,
97 .init_irq = omap_generic_init_irq,
98 .init_machine = omap_generic_init,
99 .timer = &omap_timer,
100MACHINE_END
diff --git a/arch/arm/mach-omap1/board-h2.c b/arch/arm/mach-omap1/board-h2.c
new file mode 100644
index 000000000000..02c7e335d3ef
--- /dev/null
+++ b/arch/arm/mach-omap1/board-h2.c
@@ -0,0 +1,189 @@
1/*
2 * linux/arch/arm/mach-omap1/board-h2.c
3 *
4 * Board specific inits for OMAP-1610 H2
5 *
6 * Copyright (C) 2001 RidgeRun, Inc.
7 * Author: Greg Lonnon <glonnon@ridgerun.com>
8 *
9 * Copyright (C) 2002 MontaVista Software, Inc.
10 *
11 * Separated FPGA interrupts from innovator1510.c and cleaned up for 2.6
12 * Copyright (C) 2004 Nokia Corporation by Tony Lindrgen <tony@atomide.com>
13 *
14 * H2 specific changes and cleanup
15 * Copyright (C) 2004 Nokia Corporation by Imre Deak <imre.deak@nokia.com>
16 *
17 * This program is free software; you can redistribute it and/or modify
18 * it under the terms of the GNU General Public License version 2 as
19 * published by the Free Software Foundation.
20 */
21
22#include <linux/kernel.h>
23#include <linux/init.h>
24#include <linux/device.h>
25#include <linux/delay.h>
26#include <linux/mtd/mtd.h>
27#include <linux/mtd/partitions.h>
28
29#include <asm/hardware.h>
30#include <asm/mach-types.h>
31#include <asm/mach/arch.h>
32#include <asm/mach/flash.h>
33#include <asm/mach/map.h>
34
35#include <asm/arch/gpio.h>
36#include <asm/arch/tc.h>
37#include <asm/arch/usb.h>
38
39#include "common.h"
40
41extern int omap_gpio_init(void);
42
43static int __initdata h2_serial_ports[OMAP_MAX_NR_PORTS] = {1, 1, 1};
44
45static struct mtd_partition h2_partitions[] = {
46 /* bootloader (U-Boot, etc) in first sector */
47 {
48 .name = "bootloader",
49 .offset = 0,
50 .size = SZ_128K,
51 .mask_flags = MTD_WRITEABLE, /* force read-only */
52 },
53 /* bootloader params in the next sector */
54 {
55 .name = "params",
56 .offset = MTDPART_OFS_APPEND,
57 .size = SZ_128K,
58 .mask_flags = 0,
59 },
60 /* kernel */
61 {
62 .name = "kernel",
63 .offset = MTDPART_OFS_APPEND,
64 .size = SZ_2M,
65 .mask_flags = 0
66 },
67 /* file system */
68 {
69 .name = "filesystem",
70 .offset = MTDPART_OFS_APPEND,
71 .size = MTDPART_SIZ_FULL,
72 .mask_flags = 0
73 }
74};
75
76static struct flash_platform_data h2_flash_data = {
77 .map_name = "cfi_probe",
78 .width = 2,
79 .parts = h2_partitions,
80 .nr_parts = ARRAY_SIZE(h2_partitions),
81};
82
83static struct resource h2_flash_resource = {
84 .start = OMAP_CS2B_PHYS,
85 .end = OMAP_CS2B_PHYS + OMAP_CS2B_SIZE - 1,
86 .flags = IORESOURCE_MEM,
87};
88
89static struct platform_device h2_flash_device = {
90 .name = "omapflash",
91 .id = 0,
92 .dev = {
93 .platform_data = &h2_flash_data,
94 },
95 .num_resources = 1,
96 .resource = &h2_flash_resource,
97};
98
99static struct resource h2_smc91x_resources[] = {
100 [0] = {
101 .start = OMAP1610_ETHR_START, /* Physical */
102 .end = OMAP1610_ETHR_START + 0xf,
103 .flags = IORESOURCE_MEM,
104 },
105 [1] = {
106 .start = OMAP_GPIO_IRQ(0),
107 .end = OMAP_GPIO_IRQ(0),
108 .flags = IORESOURCE_IRQ,
109 },
110};
111
112static struct platform_device h2_smc91x_device = {
113 .name = "smc91x",
114 .id = 0,
115 .num_resources = ARRAY_SIZE(h2_smc91x_resources),
116 .resource = h2_smc91x_resources,
117};
118
119static struct platform_device *h2_devices[] __initdata = {
120 &h2_flash_device,
121 &h2_smc91x_device,
122};
123
124static void __init h2_init_smc91x(void)
125{
126 if ((omap_request_gpio(0)) < 0) {
127 printk("Error requesting gpio 0 for smc91x irq\n");
128 return;
129 }
130 omap_set_gpio_edge_ctrl(0, OMAP_GPIO_FALLING_EDGE);
131}
132
133void h2_init_irq(void)
134{
135 omap_init_irq();
136 omap_gpio_init();
137 h2_init_smc91x();
138}
139
140static struct omap_usb_config h2_usb_config __initdata = {
141 /* usb1 has a Mini-AB port and external isp1301 transceiver */
142 .otg = 2,
143
144#ifdef CONFIG_USB_GADGET_OMAP
145 .hmc_mode = 19, // 0:host(off) 1:dev|otg 2:disabled
146 // .hmc_mode = 21, // 0:host(off) 1:dev(loopback) 2:host(loopback)
147#elif defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
148 /* needs OTG cable, or NONSTANDARD (B-to-MiniB) */
149 .hmc_mode = 20, // 1:dev|otg(off) 1:host 2:disabled
150#endif
151
152 .pins[1] = 3,
153};
154
155static struct omap_mmc_config h2_mmc_config __initdata = {
156 .mmc_blocks = 1,
157 .mmc1_power_pin = -1, /* tps65010 gpio3 */
158 .mmc1_switch_pin = OMAP_MPUIO(1),
159};
160
161static struct omap_board_config_kernel h2_config[] = {
162 { OMAP_TAG_USB, &h2_usb_config },
163 { OMAP_TAG_MMC, &h2_mmc_config },
164};
165
166static void __init h2_init(void)
167{
168 platform_add_devices(h2_devices, ARRAY_SIZE(h2_devices));
169 omap_board_config = h2_config;
170 omap_board_config_size = ARRAY_SIZE(h2_config);
171}
172
173static void __init h2_map_io(void)
174{
175 omap_map_io();
176 omap_serial_init(h2_serial_ports);
177}
178
179MACHINE_START(OMAP_H2, "TI-H2")
180 /* Maintainer: Imre Deak <imre.deak@nokia.com> */
181 .phys_ram = 0x10000000,
182 .phys_io = 0xfff00000,
183 .io_pg_offst = ((0xfef00000) >> 18) & 0xfffc,
184 .boot_params = 0x10000100,
185 .map_io = h2_map_io,
186 .init_irq = h2_init_irq,
187 .init_machine = h2_init,
188 .timer = &omap_timer,
189MACHINE_END
diff --git a/arch/arm/mach-omap1/board-h3.c b/arch/arm/mach-omap1/board-h3.c
new file mode 100644
index 000000000000..3ff6eb8c8f2a
--- /dev/null
+++ b/arch/arm/mach-omap1/board-h3.c
@@ -0,0 +1,207 @@
1/*
2 * linux/arch/arm/mach-omap1/board-h3.c
3 *
4 * This file contains OMAP1710 H3 specific code.
5 *
6 * Copyright (C) 2004 Texas Instruments, Inc.
7 * Copyright (C) 2002 MontaVista Software, Inc.
8 * Copyright (C) 2001 RidgeRun, Inc.
9 * Author: RidgeRun, Inc.
10 * Greg Lonnon (glonnon@ridgerun.com) or info@ridgerun.com
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 version 2 as
14 * published by the Free Software Foundation.
15 */
16
17#include <linux/config.h>
18#include <linux/types.h>
19#include <linux/init.h>
20#include <linux/major.h>
21#include <linux/kernel.h>
22#include <linux/device.h>
23#include <linux/errno.h>
24#include <linux/mtd/mtd.h>
25#include <linux/mtd/partitions.h>
26
27#include <asm/setup.h>
28#include <asm/page.h>
29#include <asm/hardware.h>
30#include <asm/mach-types.h>
31#include <asm/mach/arch.h>
32#include <asm/mach/flash.h>
33#include <asm/mach/map.h>
34
35#include <asm/arch/gpio.h>
36#include <asm/arch/irqs.h>
37#include <asm/arch/mux.h>
38#include <asm/arch/tc.h>
39#include <asm/arch/usb.h>
40
41#include "common.h"
42
43extern int omap_gpio_init(void);
44
45static int __initdata h3_serial_ports[OMAP_MAX_NR_PORTS] = {1, 1, 1};
46
47static struct mtd_partition h3_partitions[] = {
48 /* bootloader (U-Boot, etc) in first sector */
49 {
50 .name = "bootloader",
51 .offset = 0,
52 .size = SZ_128K,
53 .mask_flags = MTD_WRITEABLE, /* force read-only */
54 },
55 /* bootloader params in the next sector */
56 {
57 .name = "params",
58 .offset = MTDPART_OFS_APPEND,
59 .size = SZ_128K,
60 .mask_flags = 0,
61 },
62 /* kernel */
63 {
64 .name = "kernel",
65 .offset = MTDPART_OFS_APPEND,
66 .size = SZ_2M,
67 .mask_flags = 0
68 },
69 /* file system */
70 {
71 .name = "filesystem",
72 .offset = MTDPART_OFS_APPEND,
73 .size = MTDPART_SIZ_FULL,
74 .mask_flags = 0
75 }
76};
77
78static struct flash_platform_data h3_flash_data = {
79 .map_name = "cfi_probe",
80 .width = 2,
81 .parts = h3_partitions,
82 .nr_parts = ARRAY_SIZE(h3_partitions),
83};
84
85static struct resource h3_flash_resource = {
86 .start = OMAP_CS2B_PHYS,
87 .end = OMAP_CS2B_PHYS + OMAP_CS2B_SIZE - 1,
88 .flags = IORESOURCE_MEM,
89};
90
91static struct platform_device flash_device = {
92 .name = "omapflash",
93 .id = 0,
94 .dev = {
95 .platform_data = &h3_flash_data,
96 },
97 .num_resources = 1,
98 .resource = &h3_flash_resource,
99};
100
101static struct resource smc91x_resources[] = {
102 [0] = {
103 .start = OMAP1710_ETHR_START, /* Physical */
104 .end = OMAP1710_ETHR_START + 0xf,
105 .flags = IORESOURCE_MEM,
106 },
107 [1] = {
108 .start = OMAP_GPIO_IRQ(40),
109 .end = OMAP_GPIO_IRQ(40),
110 .flags = IORESOURCE_IRQ,
111 },
112};
113
114static struct platform_device smc91x_device = {
115 .name = "smc91x",
116 .id = 0,
117 .num_resources = ARRAY_SIZE(smc91x_resources),
118 .resource = smc91x_resources,
119};
120
121#define GPTIMER_BASE 0xFFFB1400
122#define GPTIMER_REGS(x) (0xFFFB1400 + (x * 0x800))
123#define GPTIMER_REGS_SIZE 0x46
124
125static struct resource intlat_resources[] = {
126 [0] = {
127 .start = GPTIMER_REGS(0), /* Physical */
128 .end = GPTIMER_REGS(0) + GPTIMER_REGS_SIZE,
129 .flags = IORESOURCE_MEM,
130 },
131 [1] = {
132 .start = INT_1610_GPTIMER1,
133 .end = INT_1610_GPTIMER1,
134 .flags = IORESOURCE_IRQ,
135 },
136};
137
138static struct platform_device intlat_device = {
139 .name = "omap_intlat",
140 .id = 0,
141 .num_resources = ARRAY_SIZE(intlat_resources),
142 .resource = intlat_resources,
143};
144
145static struct platform_device *devices[] __initdata = {
146 &flash_device,
147 &smc91x_device,
148 &intlat_device,
149};
150
151static struct omap_usb_config h3_usb_config __initdata = {
152 /* usb1 has a Mini-AB port and external isp1301 transceiver */
153 .otg = 2,
154
155#ifdef CONFIG_USB_GADGET_OMAP
156 .hmc_mode = 19, /* 0:host(off) 1:dev|otg 2:disabled */
157#elif defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
158 /* NONSTANDARD CABLE NEEDED (B-to-Mini-B) */
159 .hmc_mode = 20, /* 1:dev|otg(off) 1:host 2:disabled */
160#endif
161
162 .pins[1] = 3,
163};
164
165static struct omap_board_config_kernel h3_config[] = {
166 { OMAP_TAG_USB, &h3_usb_config },
167};
168
169static void __init h3_init(void)
170{
171 (void) platform_add_devices(devices, ARRAY_SIZE(devices));
172}
173
174static void __init h3_init_smc91x(void)
175{
176 omap_cfg_reg(W15_1710_GPIO40);
177 if (omap_request_gpio(40) < 0) {
178 printk("Error requesting gpio 40 for smc91x irq\n");
179 return;
180 }
181 omap_set_gpio_edge_ctrl(40, OMAP_GPIO_FALLING_EDGE);
182}
183
184void h3_init_irq(void)
185{
186 omap_init_irq();
187 omap_gpio_init();
188 h3_init_smc91x();
189}
190
191static void __init h3_map_io(void)
192{
193 omap_map_io();
194 omap_serial_init(h3_serial_ports);
195}
196
197MACHINE_START(OMAP_H3, "TI OMAP1710 H3 board")
198 /* Maintainer: Texas Instruments, Inc. */
199 .phys_ram = 0x10000000,
200 .phys_io = 0xfff00000,
201 .io_pg_offst = ((0xfef00000) >> 18) & 0xfffc,
202 .boot_params = 0x10000100,
203 .map_io = h3_map_io,
204 .init_irq = h3_init_irq,
205 .init_machine = h3_init,
206 .timer = &omap_timer,
207MACHINE_END
diff --git a/arch/arm/mach-omap1/board-innovator.c b/arch/arm/mach-omap1/board-innovator.c
new file mode 100644
index 000000000000..944e235d78a8
--- /dev/null
+++ b/arch/arm/mach-omap1/board-innovator.c
@@ -0,0 +1,282 @@
1/*
2 * linux/arch/arm/mach-omap1/board-innovator.c
3 *
4 * Board specific inits for OMAP-1510 and OMAP-1610 Innovator
5 *
6 * Copyright (C) 2001 RidgeRun, Inc.
7 * Author: Greg Lonnon <glonnon@ridgerun.com>
8 *
9 * Copyright (C) 2002 MontaVista Software, Inc.
10 *
11 * Separated FPGA interrupts from innovator1510.c and cleaned up for 2.6
12 * Copyright (C) 2004 Nokia Corporation by Tony Lindrgen <tony@atomide.com>
13 *
14 * This program is free software; you can redistribute it and/or modify
15 * it under the terms of the GNU General Public License version 2 as
16 * published by the Free Software Foundation.
17 */
18
19#include <linux/kernel.h>
20#include <linux/init.h>
21#include <linux/device.h>
22#include <linux/delay.h>
23#include <linux/mtd/mtd.h>
24#include <linux/mtd/partitions.h>
25
26#include <asm/hardware.h>
27#include <asm/mach-types.h>
28#include <asm/mach/arch.h>
29#include <asm/mach/flash.h>
30#include <asm/mach/map.h>
31
32#include <asm/arch/fpga.h>
33#include <asm/arch/gpio.h>
34#include <asm/arch/tc.h>
35#include <asm/arch/usb.h>
36
37#include "common.h"
38
39static int __initdata innovator_serial_ports[OMAP_MAX_NR_PORTS] = {1, 1, 1};
40
41static struct mtd_partition innovator_partitions[] = {
42 /* bootloader (U-Boot, etc) in first sector */
43 {
44 .name = "bootloader",
45 .offset = 0,
46 .size = SZ_128K,
47 .mask_flags = MTD_WRITEABLE, /* force read-only */
48 },
49 /* bootloader params in the next sector */
50 {
51 .name = "params",
52 .offset = MTDPART_OFS_APPEND,
53 .size = SZ_128K,
54 .mask_flags = 0,
55 },
56 /* kernel */
57 {
58 .name = "kernel",
59 .offset = MTDPART_OFS_APPEND,
60 .size = SZ_2M,
61 .mask_flags = 0
62 },
63 /* rest of flash1 is a file system */
64 {
65 .name = "rootfs",
66 .offset = MTDPART_OFS_APPEND,
67 .size = SZ_16M - SZ_2M - 2 * SZ_128K,
68 .mask_flags = 0
69 },
70 /* file system */
71 {
72 .name = "filesystem",
73 .offset = MTDPART_OFS_APPEND,
74 .size = MTDPART_SIZ_FULL,
75 .mask_flags = 0
76 }
77};
78
79static struct flash_platform_data innovator_flash_data = {
80 .map_name = "cfi_probe",
81 .width = 2,
82 .parts = innovator_partitions,
83 .nr_parts = ARRAY_SIZE(innovator_partitions),
84};
85
86static struct resource innovator_flash_resource = {
87 .start = OMAP_CS0_PHYS,
88 .end = OMAP_CS0_PHYS + SZ_32M - 1,
89 .flags = IORESOURCE_MEM,
90};
91
92static struct platform_device innovator_flash_device = {
93 .name = "omapflash",
94 .id = 0,
95 .dev = {
96 .platform_data = &innovator_flash_data,
97 },
98 .num_resources = 1,
99 .resource = &innovator_flash_resource,
100};
101
102#ifdef CONFIG_ARCH_OMAP1510
103
104/* Only FPGA needs to be mapped here. All others are done with ioremap */
105static struct map_desc innovator1510_io_desc[] __initdata = {
106{ OMAP1510_FPGA_BASE, OMAP1510_FPGA_START, OMAP1510_FPGA_SIZE,
107 MT_DEVICE },
108};
109
110static struct resource innovator1510_smc91x_resources[] = {
111 [0] = {
112 .start = OMAP1510_FPGA_ETHR_START, /* Physical */
113 .end = OMAP1510_FPGA_ETHR_START + 0xf,
114 .flags = IORESOURCE_MEM,
115 },
116 [1] = {
117 .start = OMAP1510_INT_ETHER,
118 .end = OMAP1510_INT_ETHER,
119 .flags = IORESOURCE_IRQ,
120 },
121};
122
123static struct platform_device innovator1510_smc91x_device = {
124 .name = "smc91x",
125 .id = 0,
126 .num_resources = ARRAY_SIZE(innovator1510_smc91x_resources),
127 .resource = innovator1510_smc91x_resources,
128};
129
130static struct platform_device *innovator1510_devices[] __initdata = {
131 &innovator_flash_device,
132 &innovator1510_smc91x_device,
133};
134
135#endif /* CONFIG_ARCH_OMAP1510 */
136
137#ifdef CONFIG_ARCH_OMAP16XX
138
139static struct resource innovator1610_smc91x_resources[] = {
140 [0] = {
141 .start = INNOVATOR1610_ETHR_START, /* Physical */
142 .end = INNOVATOR1610_ETHR_START + 0xf,
143 .flags = IORESOURCE_MEM,
144 },
145 [1] = {
146 .start = OMAP_GPIO_IRQ(0),
147 .end = OMAP_GPIO_IRQ(0),
148 .flags = IORESOURCE_IRQ,
149 },
150};
151
152static struct platform_device innovator1610_smc91x_device = {
153 .name = "smc91x",
154 .id = 0,
155 .num_resources = ARRAY_SIZE(innovator1610_smc91x_resources),
156 .resource = innovator1610_smc91x_resources,
157};
158
159static struct platform_device *innovator1610_devices[] __initdata = {
160 &innovator_flash_device,
161 &innovator1610_smc91x_device,
162};
163
164#endif /* CONFIG_ARCH_OMAP16XX */
165
166static void __init innovator_init_smc91x(void)
167{
168 if (cpu_is_omap1510()) {
169 fpga_write(fpga_read(OMAP1510_FPGA_RST) & ~1,
170 OMAP1510_FPGA_RST);
171 udelay(750);
172 } else {
173 if ((omap_request_gpio(0)) < 0) {
174 printk("Error requesting gpio 0 for smc91x irq\n");
175 return;
176 }
177 omap_set_gpio_edge_ctrl(0, OMAP_GPIO_RISING_EDGE);
178 }
179}
180
181void innovator_init_irq(void)
182{
183 omap_init_irq();
184 omap_gpio_init();
185#ifdef CONFIG_ARCH_OMAP1510
186 if (cpu_is_omap1510()) {
187 omap1510_fpga_init_irq();
188 }
189#endif
190 innovator_init_smc91x();
191}
192
193#ifdef CONFIG_ARCH_OMAP1510
194static struct omap_usb_config innovator1510_usb_config __initdata = {
195 /* for bundled non-standard host and peripheral cables */
196 .hmc_mode = 4,
197
198 .register_host = 1,
199 .pins[1] = 6,
200 .pins[2] = 6, /* Conflicts with UART2 */
201
202 .register_dev = 1,
203 .pins[0] = 2,
204};
205#endif
206
207#ifdef CONFIG_ARCH_OMAP16XX
208static struct omap_usb_config h2_usb_config __initdata = {
209 /* usb1 has a Mini-AB port and external isp1301 transceiver */
210 .otg = 2,
211
212#ifdef CONFIG_USB_GADGET_OMAP
213 .hmc_mode = 19, // 0:host(off) 1:dev|otg 2:disabled
214 // .hmc_mode = 21, // 0:host(off) 1:dev(loopback) 2:host(loopback)
215#elif defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
216 /* NONSTANDARD CABLE NEEDED (B-to-Mini-B) */
217 .hmc_mode = 20, // 1:dev|otg(off) 1:host 2:disabled
218#endif
219
220 .pins[1] = 3,
221};
222#endif
223
224static struct omap_board_config_kernel innovator_config[] = {
225 { OMAP_TAG_USB, NULL },
226};
227
228static void __init innovator_init(void)
229{
230#ifdef CONFIG_ARCH_OMAP1510
231 if (cpu_is_omap1510()) {
232 platform_add_devices(innovator1510_devices, ARRAY_SIZE(innovator1510_devices));
233 }
234#endif
235#ifdef CONFIG_ARCH_OMAP16XX
236 if (!cpu_is_omap1510()) {
237 platform_add_devices(innovator1610_devices, ARRAY_SIZE(innovator1610_devices));
238 }
239#endif
240
241#ifdef CONFIG_ARCH_OMAP1510
242 if (cpu_is_omap1510())
243 innovator_config[0].data = &innovator1510_usb_config;
244#endif
245#ifdef CONFIG_ARCH_OMAP16XX
246 if (cpu_is_omap1610())
247 innovator_config[0].data = &h2_usb_config;
248#endif
249 omap_board_config = innovator_config;
250 omap_board_config_size = ARRAY_SIZE(innovator_config);
251}
252
253static void __init innovator_map_io(void)
254{
255 omap_map_io();
256
257#ifdef CONFIG_ARCH_OMAP1510
258 if (cpu_is_omap1510()) {
259 iotable_init(innovator1510_io_desc, ARRAY_SIZE(innovator1510_io_desc));
260 udelay(10); /* Delay needed for FPGA */
261
262 /* Dump the Innovator FPGA rev early - useful info for support. */
263 printk("Innovator FPGA Rev %d.%d Board Rev %d\n",
264 fpga_read(OMAP1510_FPGA_REV_HIGH),
265 fpga_read(OMAP1510_FPGA_REV_LOW),
266 fpga_read(OMAP1510_FPGA_BOARD_REV));
267 }
268#endif
269 omap_serial_init(innovator_serial_ports);
270}
271
272MACHINE_START(OMAP_INNOVATOR, "TI-Innovator")
273 /* Maintainer: MontaVista Software, Inc. */
274 .phys_ram = 0x10000000,
275 .phys_io = 0xfff00000,
276 .io_pg_offst = ((0xfef00000) >> 18) & 0xfffc,
277 .boot_params = 0x10000100,
278 .map_io = innovator_map_io,
279 .init_irq = innovator_init_irq,
280 .init_machine = innovator_init,
281 .timer = &omap_timer,
282MACHINE_END
diff --git a/arch/arm/mach-omap1/board-netstar.c b/arch/arm/mach-omap1/board-netstar.c
new file mode 100644
index 000000000000..8c653734d5a3
--- /dev/null
+++ b/arch/arm/mach-omap1/board-netstar.c
@@ -0,0 +1,153 @@
1/*
2 * Modified from board-generic.c
3 *
4 * Copyright (C) 2004 2N Telekomunikace, Ladislav Michl <michl@2n.cz>
5 *
6 * Code for Netstar OMAP board.
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 */
12
13#include <linux/delay.h>
14#include <linux/device.h>
15#include <linux/interrupt.h>
16#include <linux/init.h>
17#include <linux/kernel.h>
18#include <linux/notifier.h>
19#include <linux/reboot.h>
20
21#include <asm/hardware.h>
22#include <asm/mach-types.h>
23#include <asm/mach/arch.h>
24#include <asm/mach/map.h>
25
26#include <asm/arch/gpio.h>
27#include <asm/arch/mux.h>
28#include <asm/arch/usb.h>
29
30#include "common.h"
31
32extern void __init omap_init_time(void);
33extern int omap_gpio_init(void);
34
35static struct resource netstar_smc91x_resources[] = {
36 [0] = {
37 .start = OMAP_CS1_PHYS + 0x300,
38 .end = OMAP_CS1_PHYS + 0x300 + 16,
39 .flags = IORESOURCE_MEM,
40 },
41 [1] = {
42 .start = OMAP_GPIO_IRQ(8),
43 .end = OMAP_GPIO_IRQ(8),
44 .flags = IORESOURCE_IRQ,
45 },
46};
47
48static struct platform_device netstar_smc91x_device = {
49 .name = "smc91x",
50 .id = 0,
51 .num_resources = ARRAY_SIZE(netstar_smc91x_resources),
52 .resource = netstar_smc91x_resources,
53};
54
55static struct platform_device *netstar_devices[] __initdata = {
56 &netstar_smc91x_device,
57};
58
59static void __init netstar_init_irq(void)
60{
61 omap_init_irq();
62 omap_gpio_init();
63}
64
65static void __init netstar_init(void)
66{
67 /* green LED */
68 omap_request_gpio(4);
69 omap_set_gpio_direction(4, 0);
70 /* smc91x reset */
71 omap_request_gpio(7);
72 omap_set_gpio_direction(7, 0);
73 omap_set_gpio_dataout(7, 1);
74 udelay(2); /* wait at least 100ns */
75 omap_set_gpio_dataout(7, 0);
76 mdelay(50); /* 50ms until PHY ready */
77 /* smc91x interrupt pin */
78 omap_request_gpio(8);
79 omap_set_gpio_edge_ctrl(8, OMAP_GPIO_RISING_EDGE);
80
81 omap_request_gpio(12);
82 omap_request_gpio(13);
83 omap_request_gpio(14);
84 omap_request_gpio(15);
85 omap_set_gpio_edge_ctrl(12, OMAP_GPIO_FALLING_EDGE);
86 omap_set_gpio_edge_ctrl(13, OMAP_GPIO_FALLING_EDGE);
87 omap_set_gpio_edge_ctrl(14, OMAP_GPIO_FALLING_EDGE);
88 omap_set_gpio_edge_ctrl(15, OMAP_GPIO_FALLING_EDGE);
89
90 platform_add_devices(netstar_devices, ARRAY_SIZE(netstar_devices));
91
92 /* Switch on green LED */
93 omap_set_gpio_dataout(4, 0);
94 /* Switch off red LED */
95 omap_writeb(0x00, OMAP_LPG1_PMR); /* Disable clock */
96 omap_writeb(0x80, OMAP_LPG1_LCR);
97}
98
99static int __initdata omap_serial_ports[OMAP_MAX_NR_PORTS] = {1, 1, 1};
100
101static void __init netstar_map_io(void)
102{
103 omap_map_io();
104 omap_serial_init(omap_serial_ports);
105}
106
107#define MACHINE_PANICED 1
108#define MACHINE_REBOOTING 2
109#define MACHINE_REBOOT 4
110static unsigned long machine_state;
111
112static int panic_event(struct notifier_block *this, unsigned long event,
113 void *ptr)
114{
115 if (test_and_set_bit(MACHINE_PANICED, &machine_state))
116 return NOTIFY_DONE;
117
118 /* Switch off green LED */
119 omap_set_gpio_dataout(4, 1);
120 /* Flash red LED */
121 omap_writeb(0x78, OMAP_LPG1_LCR);
122 omap_writeb(0x01, OMAP_LPG1_PMR); /* Enable clock */
123
124 return NOTIFY_DONE;
125}
126
127static struct notifier_block panic_block = {
128 .notifier_call = panic_event,
129};
130
131static int __init netstar_late_init(void)
132{
133 /* TODO: Setup front panel switch here */
134
135 /* Setup panic notifier */
136 notifier_chain_register(&panic_notifier_list, &panic_block);
137
138 return 0;
139}
140
141postcore_initcall(netstar_late_init);
142
143MACHINE_START(NETSTAR, "NetStar OMAP5910")
144 /* Maintainer: Ladislav Michl <michl@2n.cz> */
145 .phys_ram = 0x10000000,
146 .phys_io = 0xfff00000,
147 .io_pg_offst = ((0xfef00000) >> 18) & 0xfffc,
148 .boot_params = 0x10000100,
149 .map_io = netstar_map_io,
150 .init_irq = netstar_init_irq,
151 .init_machine = netstar_init,
152 .timer = &omap_timer,
153MACHINE_END
diff --git a/arch/arm/mach-omap1/board-osk.c b/arch/arm/mach-omap1/board-osk.c
new file mode 100644
index 000000000000..b9e3273ac0b0
--- /dev/null
+++ b/arch/arm/mach-omap1/board-osk.c
@@ -0,0 +1,171 @@
1/*
2 * linux/arch/arm/mach-omap1/board-osk.c
3 *
4 * Board specific init for OMAP5912 OSK
5 *
6 * Written by Dirk Behme <dirk.behme@de.bosch.com>
7 *
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License as published by the
10 * Free Software Foundation; either version 2 of the License, or (at your
11 * option) any later version.
12 *
13 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
14 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
15 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
16 * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
17 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
18 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
19 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
20 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
22 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23 *
24 * You should have received a copy of the GNU General Public License along
25 * with this program; if not, write to the Free Software Foundation, Inc.,
26 * 675 Mass Ave, Cambridge, MA 02139, USA.
27 */
28
29#include <linux/kernel.h>
30#include <linux/init.h>
31#include <linux/device.h>
32
33#include <asm/hardware.h>
34#include <asm/mach-types.h>
35#include <asm/mach/arch.h>
36#include <asm/mach/map.h>
37
38#include <asm/arch/gpio.h>
39#include <asm/arch/usb.h>
40#include <asm/arch/mux.h>
41#include <asm/arch/tc.h>
42
43#include "common.h"
44
45static struct map_desc osk5912_io_desc[] __initdata = {
46{ OMAP_OSK_NOR_FLASH_BASE, OMAP_OSK_NOR_FLASH_START, OMAP_OSK_NOR_FLASH_SIZE,
47 MT_DEVICE },
48};
49
50static int __initdata osk_serial_ports[OMAP_MAX_NR_PORTS] = {1, 0, 0};
51
52static struct resource osk5912_smc91x_resources[] = {
53 [0] = {
54 .start = OMAP_OSK_ETHR_START, /* Physical */
55 .end = OMAP_OSK_ETHR_START + 0xf,
56 .flags = IORESOURCE_MEM,
57 },
58 [1] = {
59 .start = OMAP_GPIO_IRQ(0),
60 .end = OMAP_GPIO_IRQ(0),
61 .flags = IORESOURCE_IRQ,
62 },
63};
64
65static struct platform_device osk5912_smc91x_device = {
66 .name = "smc91x",
67 .id = -1,
68 .num_resources = ARRAY_SIZE(osk5912_smc91x_resources),
69 .resource = osk5912_smc91x_resources,
70};
71
72static struct resource osk5912_cf_resources[] = {
73 [0] = {
74 .start = OMAP_GPIO_IRQ(62),
75 .end = OMAP_GPIO_IRQ(62),
76 .flags = IORESOURCE_IRQ,
77 },
78};
79
80static struct platform_device osk5912_cf_device = {
81 .name = "omap_cf",
82 .id = -1,
83 .dev = {
84 .platform_data = (void *) 2 /* CS2 */,
85 },
86 .num_resources = ARRAY_SIZE(osk5912_cf_resources),
87 .resource = osk5912_cf_resources,
88};
89
90static struct platform_device *osk5912_devices[] __initdata = {
91 &osk5912_smc91x_device,
92 &osk5912_cf_device,
93};
94
95static void __init osk_init_smc91x(void)
96{
97 if ((omap_request_gpio(0)) < 0) {
98 printk("Error requesting gpio 0 for smc91x irq\n");
99 return;
100 }
101 omap_set_gpio_edge_ctrl(0, OMAP_GPIO_RISING_EDGE);
102
103 /* Check EMIFS wait states to fix errors with SMC_GET_PKT_HDR */
104 EMIFS_CCS(1) |= 0x2;
105}
106
107static void __init osk_init_cf(void)
108{
109 omap_cfg_reg(M7_1610_GPIO62);
110 if ((omap_request_gpio(62)) < 0) {
111 printk("Error requesting gpio 62 for CF irq\n");
112 return;
113 }
114 /* it's really active-low */
115 omap_set_gpio_edge_ctrl(62, OMAP_GPIO_FALLING_EDGE);
116}
117
118void osk_init_irq(void)
119{
120 omap_init_irq();
121 omap_gpio_init();
122 osk_init_smc91x();
123 osk_init_cf();
124}
125
126static struct omap_usb_config osk_usb_config __initdata = {
127 /* has usb host connector (A) ... for development it can also
128 * be used, with a NONSTANDARD gender-bending cable/dongle, as
129 * a peripheral.
130 */
131#ifdef CONFIG_USB_GADGET_OMAP
132 .register_dev = 1,
133 .hmc_mode = 0,
134#else
135 .register_host = 1,
136 .hmc_mode = 16,
137 .rwc = 1,
138#endif
139 .pins[0] = 2,
140};
141
142static struct omap_board_config_kernel osk_config[] = {
143 { OMAP_TAG_USB, &osk_usb_config },
144};
145
146static void __init osk_init(void)
147{
148 platform_add_devices(osk5912_devices, ARRAY_SIZE(osk5912_devices));
149 omap_board_config = osk_config;
150 omap_board_config_size = ARRAY_SIZE(osk_config);
151 USB_TRANSCEIVER_CTRL_REG |= (3 << 1);
152}
153
154static void __init osk_map_io(void)
155{
156 omap_map_io();
157 iotable_init(osk5912_io_desc, ARRAY_SIZE(osk5912_io_desc));
158 omap_serial_init(osk_serial_ports);
159}
160
161MACHINE_START(OMAP_OSK, "TI-OSK")
162 /* Maintainer: Dirk Behme <dirk.behme@de.bosch.com> */
163 .phys_ram = 0x10000000,
164 .phys_io = 0xfff00000,
165 .io_pg_offst = ((0xfef00000) >> 18) & 0xfffc,
166 .boot_params = 0x10000100,
167 .map_io = osk_map_io,
168 .init_irq = osk_init_irq,
169 .init_machine = osk_init,
170 .timer = &omap_timer,
171MACHINE_END
diff --git a/arch/arm/mach-omap1/board-perseus2.c b/arch/arm/mach-omap1/board-perseus2.c
new file mode 100644
index 000000000000..0d460522fcaf
--- /dev/null
+++ b/arch/arm/mach-omap1/board-perseus2.c
@@ -0,0 +1,191 @@
1/*
2 * linux/arch/arm/mach-omap1/board-perseus2.c
3 *
4 * Modified from board-generic.c
5 *
6 * Original OMAP730 support by Jean Pihet <j-pihet@ti.com>
7 * Updated for 2.6 by Kevin Hilman <kjh@hilman.org>
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License version 2 as
11 * published by the Free Software Foundation.
12 */
13
14#include <linux/kernel.h>
15#include <linux/init.h>
16#include <linux/device.h>
17#include <linux/delay.h>
18#include <linux/mtd/mtd.h>
19#include <linux/mtd/partitions.h>
20
21#include <asm/hardware.h>
22#include <asm/mach-types.h>
23#include <asm/mach/arch.h>
24#include <asm/mach/flash.h>
25#include <asm/mach/map.h>
26
27#include <asm/arch/gpio.h>
28#include <asm/arch/mux.h>
29#include <asm/arch/fpga.h>
30
31#include "common.h"
32
33static struct resource smc91x_resources[] = {
34 [0] = {
35 .start = H2P2_DBG_FPGA_ETHR_START, /* Physical */
36 .end = H2P2_DBG_FPGA_ETHR_START + 0xf,
37 .flags = IORESOURCE_MEM,
38 },
39 [1] = {
40 .start = INT_730_MPU_EXT_NIRQ,
41 .end = 0,
42 .flags = IORESOURCE_IRQ,
43 },
44};
45
46static int __initdata p2_serial_ports[OMAP_MAX_NR_PORTS] = {1, 1, 0};
47
48static struct mtd_partition p2_partitions[] = {
49 /* bootloader (U-Boot, etc) in first sector */
50 {
51 .name = "bootloader",
52 .offset = 0,
53 .size = SZ_128K,
54 .mask_flags = MTD_WRITEABLE, /* force read-only */
55 },
56 /* bootloader params in the next sector */
57 {
58 .name = "params",
59 .offset = MTDPART_OFS_APPEND,
60 .size = SZ_128K,
61 .mask_flags = 0,
62 },
63 /* kernel */
64 {
65 .name = "kernel",
66 .offset = MTDPART_OFS_APPEND,
67 .size = SZ_2M,
68 .mask_flags = 0
69 },
70 /* rest of flash is a file system */
71 {
72 .name = "rootfs",
73 .offset = MTDPART_OFS_APPEND,
74 .size = MTDPART_SIZ_FULL,
75 .mask_flags = 0
76 },
77};
78
79static struct flash_platform_data p2_flash_data = {
80 .map_name = "cfi_probe",
81 .width = 2,
82 .parts = p2_partitions,
83 .nr_parts = ARRAY_SIZE(p2_partitions),
84};
85
86static struct resource p2_flash_resource = {
87 .start = OMAP_FLASH_0_START,
88 .end = OMAP_FLASH_0_START + OMAP_FLASH_0_SIZE - 1,
89 .flags = IORESOURCE_MEM,
90};
91
92static struct platform_device p2_flash_device = {
93 .name = "omapflash",
94 .id = 0,
95 .dev = {
96 .platform_data = &p2_flash_data,
97 },
98 .num_resources = 1,
99 .resource = &p2_flash_resource,
100};
101
102static struct platform_device smc91x_device = {
103 .name = "smc91x",
104 .id = 0,
105 .num_resources = ARRAY_SIZE(smc91x_resources),
106 .resource = smc91x_resources,
107};
108
109static struct platform_device *devices[] __initdata = {
110 &p2_flash_device,
111 &smc91x_device,
112};
113
114static void __init omap_perseus2_init(void)
115{
116 (void) platform_add_devices(devices, ARRAY_SIZE(devices));
117}
118
119static void __init perseus2_init_smc91x(void)
120{
121 fpga_write(1, H2P2_DBG_FPGA_LAN_RESET);
122 mdelay(50);
123 fpga_write(fpga_read(H2P2_DBG_FPGA_LAN_RESET) & ~1,
124 H2P2_DBG_FPGA_LAN_RESET);
125 mdelay(50);
126}
127
128void omap_perseus2_init_irq(void)
129{
130 omap_init_irq();
131 omap_gpio_init();
132 perseus2_init_smc91x();
133}
134
135/* Only FPGA needs to be mapped here. All others are done with ioremap */
136static struct map_desc omap_perseus2_io_desc[] __initdata = {
137 {H2P2_DBG_FPGA_BASE, H2P2_DBG_FPGA_START, H2P2_DBG_FPGA_SIZE,
138 MT_DEVICE},
139};
140
141static void __init omap_perseus2_map_io(void)
142{
143 omap_map_io();
144 iotable_init(omap_perseus2_io_desc,
145 ARRAY_SIZE(omap_perseus2_io_desc));
146
147 /* Early, board-dependent init */
148
149 /*
150 * Hold GSM Reset until needed
151 */
152 omap_writew(omap_readw(OMAP730_DSP_M_CTL) & ~1, OMAP730_DSP_M_CTL);
153
154 /*
155 * UARTs -> done automagically by 8250 driver
156 */
157
158 /*
159 * CSx timings, GPIO Mux ... setup
160 */
161
162 /* Flash: CS0 timings setup */
163 omap_writel(0x0000fff3, OMAP730_FLASH_CFG_0);
164 omap_writel(0x00000088, OMAP730_FLASH_ACFG_0);
165
166 /*
167 * Ethernet support trough the debug board
168 * CS1 timings setup
169 */
170 omap_writel(0x0000fff3, OMAP730_FLASH_CFG_1);
171 omap_writel(0x00000000, OMAP730_FLASH_ACFG_1);
172
173 /*
174 * Configure MPU_EXT_NIRQ IO in IO_CONF9 register,
175 * It is used as the Ethernet controller interrupt
176 */
177 omap_writel(omap_readl(OMAP730_IO_CONF_9) & 0x1FFFFFFF, OMAP730_IO_CONF_9);
178 omap_serial_init(p2_serial_ports);
179}
180
181MACHINE_START(OMAP_PERSEUS2, "OMAP730 Perseus2")
182 /* Maintainer: Kevin Hilman <kjh@hilman.org> */
183 .phys_ram = 0x10000000,
184 .phys_io = 0xfff00000,
185 .io_pg_offst = ((0xfef00000) >> 18) & 0xfffc,
186 .boot_params = 0x10000100,
187 .map_io = omap_perseus2_map_io,
188 .init_irq = omap_perseus2_init_irq,
189 .init_machine = omap_perseus2_init,
190 .timer = &omap_timer,
191MACHINE_END
diff --git a/arch/arm/mach-omap1/board-voiceblue.c b/arch/arm/mach-omap1/board-voiceblue.c
new file mode 100644
index 000000000000..d882f43658a0
--- /dev/null
+++ b/arch/arm/mach-omap1/board-voiceblue.c
@@ -0,0 +1,258 @@
1/*
2 * linux/arch/arm/mach-omap1/board-voiceblue.c
3 *
4 * Modified from board-generic.c
5 *
6 * Copyright (C) 2004 2N Telekomunikace, Ladislav Michl <michl@2n.cz>
7 *
8 * Code for OMAP5910 based VoiceBlue board (VoIP to GSM gateway).
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License version 2 as
12 * published by the Free Software Foundation.
13 */
14
15#include <linux/delay.h>
16#include <linux/device.h>
17#include <linux/interrupt.h>
18#include <linux/init.h>
19#include <linux/kernel.h>
20#include <linux/notifier.h>
21#include <linux/reboot.h>
22#include <linux/serial_8250.h>
23#include <linux/serial_reg.h>
24
25#include <asm/hardware.h>
26#include <asm/mach-types.h>
27#include <asm/mach/arch.h>
28#include <asm/mach/map.h>
29
30#include <asm/arch/gpio.h>
31#include <asm/arch/tc.h>
32#include <asm/arch/mux.h>
33#include <asm/arch/usb.h>
34
35#include "common.h"
36
37extern void omap_init_time(void);
38extern int omap_gpio_init(void);
39
40static struct plat_serial8250_port voiceblue_ports[] = {
41 {
42 .mapbase = (unsigned long)(OMAP_CS1_PHYS + 0x40000),
43 .irq = OMAP_GPIO_IRQ(12),
44 .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP,
45 .iotype = UPIO_MEM,
46 .regshift = 1,
47 .uartclk = 3686400,
48 },
49 {
50 .mapbase = (unsigned long)(OMAP_CS1_PHYS + 0x50000),
51 .irq = OMAP_GPIO_IRQ(13),
52 .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP,
53 .iotype = UPIO_MEM,
54 .regshift = 1,
55 .uartclk = 3686400,
56 },
57 {
58 .mapbase = (unsigned long)(OMAP_CS1_PHYS + 0x60000),
59 .irq = OMAP_GPIO_IRQ(14),
60 .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP,
61 .iotype = UPIO_MEM,
62 .regshift = 1,
63 .uartclk = 3686400,
64 },
65 {
66 .mapbase = (unsigned long)(OMAP_CS1_PHYS + 0x70000),
67 .irq = OMAP_GPIO_IRQ(15),
68 .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP,
69 .iotype = UPIO_MEM,
70 .regshift = 1,
71 .uartclk = 3686400,
72 },
73 { },
74};
75
76static struct platform_device serial_device = {
77 .name = "serial8250",
78 .id = 1,
79 .dev = {
80 .platform_data = voiceblue_ports,
81 },
82};
83
84static int __init ext_uart_init(void)
85{
86 return platform_device_register(&serial_device);
87}
88arch_initcall(ext_uart_init);
89
90static struct resource voiceblue_smc91x_resources[] = {
91 [0] = {
92 .start = OMAP_CS2_PHYS + 0x300,
93 .end = OMAP_CS2_PHYS + 0x300 + 16,
94 .flags = IORESOURCE_MEM,
95 },
96 [1] = {
97 .start = OMAP_GPIO_IRQ(8),
98 .end = OMAP_GPIO_IRQ(8),
99 .flags = IORESOURCE_IRQ,
100 },
101};
102
103static struct platform_device voiceblue_smc91x_device = {
104 .name = "smc91x",
105 .id = 0,
106 .num_resources = ARRAY_SIZE(voiceblue_smc91x_resources),
107 .resource = voiceblue_smc91x_resources,
108};
109
110static struct platform_device *voiceblue_devices[] __initdata = {
111 &voiceblue_smc91x_device,
112};
113
114static struct omap_usb_config voiceblue_usb_config __initdata = {
115 .hmc_mode = 3,
116 .register_host = 1,
117 .register_dev = 1,
118 .pins[0] = 2,
119 .pins[1] = 6,
120 .pins[2] = 6,
121};
122
123static struct omap_board_config_kernel voiceblue_config[] = {
124 { OMAP_TAG_USB, &voiceblue_usb_config },
125};
126
127static void __init voiceblue_init_irq(void)
128{
129 omap_init_irq();
130 omap_gpio_init();
131}
132
133static void __init voiceblue_init(void)
134{
135 /* There is a good chance board is going up, so enable Power LED
136 * (it is connected through invertor) */
137 omap_writeb(0x00, OMAP_LPG1_LCR);
138 /* Watchdog */
139 omap_request_gpio(0);
140 /* smc91x reset */
141 omap_request_gpio(7);
142 omap_set_gpio_direction(7, 0);
143 omap_set_gpio_dataout(7, 1);
144 udelay(2); /* wait at least 100ns */
145 omap_set_gpio_dataout(7, 0);
146 mdelay(50); /* 50ms until PHY ready */
147 /* smc91x interrupt pin */
148 omap_request_gpio(8);
149 omap_set_gpio_edge_ctrl(8, OMAP_GPIO_RISING_EDGE);
150 /* 16C554 reset*/
151 omap_request_gpio(6);
152 omap_set_gpio_direction(6, 0);
153 omap_set_gpio_dataout(6, 0);
154 /* 16C554 interrupt pins */
155 omap_request_gpio(12);
156 omap_request_gpio(13);
157 omap_request_gpio(14);
158 omap_request_gpio(15);
159 omap_set_gpio_edge_ctrl(12, OMAP_GPIO_RISING_EDGE);
160 omap_set_gpio_edge_ctrl(13, OMAP_GPIO_RISING_EDGE);
161 omap_set_gpio_edge_ctrl(14, OMAP_GPIO_RISING_EDGE);
162 omap_set_gpio_edge_ctrl(15, OMAP_GPIO_RISING_EDGE);
163
164 platform_add_devices(voiceblue_devices, ARRAY_SIZE(voiceblue_devices));
165 omap_board_config = voiceblue_config;
166 omap_board_config_size = ARRAY_SIZE(voiceblue_config);
167}
168
169static int __initdata omap_serial_ports[OMAP_MAX_NR_PORTS] = {1, 1, 1};
170
171static void __init voiceblue_map_io(void)
172{
173 omap_map_io();
174 omap_serial_init(omap_serial_ports);
175}
176
177#define MACHINE_PANICED 1
178#define MACHINE_REBOOTING 2
179#define MACHINE_REBOOT 4
180static unsigned long machine_state;
181
182static int panic_event(struct notifier_block *this, unsigned long event,
183 void *ptr)
184{
185 if (test_and_set_bit(MACHINE_PANICED, &machine_state))
186 return NOTIFY_DONE;
187
188 /* Flash Power LED
189 * (TODO: Enable clock right way (enabled in bootloader already)) */
190 omap_writeb(0x78, OMAP_LPG1_LCR);
191
192 return NOTIFY_DONE;
193}
194
195static struct notifier_block panic_block = {
196 .notifier_call = panic_event,
197};
198
199static int __init setup_notifier(void)
200{
201 /* Setup panic notifier */
202 notifier_chain_register(&panic_notifier_list, &panic_block);
203
204 return 0;
205}
206
207postcore_initcall(setup_notifier);
208
209static int wdt_gpio_state;
210
211void voiceblue_wdt_enable(void)
212{
213 omap_set_gpio_direction(0, 0);
214 omap_set_gpio_dataout(0, 0);
215 omap_set_gpio_dataout(0, 1);
216 omap_set_gpio_dataout(0, 0);
217 wdt_gpio_state = 0;
218}
219
220void voiceblue_wdt_disable(void)
221{
222 omap_set_gpio_dataout(0, 0);
223 omap_set_gpio_dataout(0, 1);
224 omap_set_gpio_dataout(0, 0);
225 omap_set_gpio_direction(0, 1);
226}
227
228void voiceblue_wdt_ping(void)
229{
230 if (test_bit(MACHINE_REBOOT, &machine_state))
231 return;
232
233 wdt_gpio_state = !wdt_gpio_state;
234 omap_set_gpio_dataout(0, wdt_gpio_state);
235}
236
237void voiceblue_reset(void)
238{
239 set_bit(MACHINE_REBOOT, &machine_state);
240 voiceblue_wdt_enable();
241 while (1) ;
242}
243
244EXPORT_SYMBOL(voiceblue_wdt_enable);
245EXPORT_SYMBOL(voiceblue_wdt_disable);
246EXPORT_SYMBOL(voiceblue_wdt_ping);
247
248MACHINE_START(VOICEBLUE, "VoiceBlue OMAP5910")
249 /* Maintainer: Ladislav Michl <michl@2n.cz> */
250 .phys_ram = 0x10000000,
251 .phys_io = 0xfff00000,
252 .io_pg_offst = ((0xfef00000) >> 18) & 0xfffc,
253 .boot_params = 0x10000100,
254 .map_io = voiceblue_map_io,
255 .init_irq = voiceblue_init_irq,
256 .init_machine = voiceblue_init,
257 .timer = &omap_timer,
258MACHINE_END