Root/
1 | /* |
2 | * linux/arch/arm/mach-at91/board-usb-a9263.c |
3 | * |
4 | * Copyright (C) 2005 SAN People |
5 | * Copyright (C) 2007 Atmel Corporation. |
6 | * Copyright (C) 2007 Calao-systems |
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 as published by |
10 | * the Free Software Foundation; either version 2 of the License, or |
11 | * (at your option) any later version. |
12 | * |
13 | * This program is distributed in the hope that it will be useful, |
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16 | * GNU General Public License for more details. |
17 | * |
18 | * You should have received a copy of the GNU General Public License |
19 | * along with this program; if not, write to the Free Software |
20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
21 | */ |
22 | |
23 | #include <linux/types.h> |
24 | #include <linux/init.h> |
25 | #include <linux/mm.h> |
26 | #include <linux/module.h> |
27 | #include <linux/platform_device.h> |
28 | #include <linux/spi/spi.h> |
29 | #include <linux/gpio_keys.h> |
30 | #include <linux/input.h> |
31 | |
32 | #include <asm/setup.h> |
33 | #include <asm/mach-types.h> |
34 | #include <asm/irq.h> |
35 | |
36 | #include <asm/mach/arch.h> |
37 | #include <asm/mach/map.h> |
38 | #include <asm/mach/irq.h> |
39 | |
40 | #include <mach/hardware.h> |
41 | #include <mach/board.h> |
42 | #include <mach/gpio.h> |
43 | #include <mach/at91sam9_smc.h> |
44 | #include <mach/at91_shdwc.h> |
45 | |
46 | #include "sam9_smc.h" |
47 | #include "generic.h" |
48 | |
49 | |
50 | static void __init ek_map_io(void) |
51 | { |
52 | /* Initialize processor: 12.00 MHz crystal */ |
53 | at91sam9263_initialize(12000000); |
54 | |
55 | /* DBGU on ttyS0. (Rx & Tx only) */ |
56 | at91_register_uart(0, 0, 0); |
57 | |
58 | /* set serial console to ttyS0 (ie, DBGU) */ |
59 | at91_set_serial_console(0); |
60 | } |
61 | |
62 | static void __init ek_init_irq(void) |
63 | { |
64 | at91sam9263_init_interrupts(NULL); |
65 | } |
66 | |
67 | |
68 | /* |
69 | * USB Host port |
70 | */ |
71 | static struct at91_usbh_data __initdata ek_usbh_data = { |
72 | .ports = 2, |
73 | }; |
74 | |
75 | /* |
76 | * USB Device port |
77 | */ |
78 | static struct at91_udc_data __initdata ek_udc_data = { |
79 | .vbus_pin = AT91_PIN_PB11, |
80 | .pullup_pin = 0, /* pull-up driven by UDC */ |
81 | }; |
82 | |
83 | /* |
84 | * SPI devices. |
85 | */ |
86 | static struct spi_board_info ek_spi_devices[] = { |
87 | #if !defined(CONFIG_MMC_AT91) |
88 | { /* DataFlash chip */ |
89 | .modalias = "mtd_dataflash", |
90 | .chip_select = 0, |
91 | .max_speed_hz = 15 * 1000 * 1000, |
92 | .bus_num = 0, |
93 | } |
94 | #endif |
95 | }; |
96 | |
97 | /* |
98 | * MACB Ethernet device |
99 | */ |
100 | static struct at91_eth_data __initdata ek_macb_data = { |
101 | .phy_irq_pin = AT91_PIN_PE31, |
102 | .is_rmii = 1, |
103 | }; |
104 | |
105 | /* |
106 | * NAND flash |
107 | */ |
108 | static struct mtd_partition __initdata ek_nand_partition[] = { |
109 | { |
110 | .name = "Linux Kernel", |
111 | .offset = 0, |
112 | .size = SZ_16M, |
113 | }, |
114 | { |
115 | .name = "Root FS", |
116 | .offset = MTDPART_OFS_NXTBLK, |
117 | .size = 120 * SZ_1M, |
118 | }, |
119 | { |
120 | .name = "FS", |
121 | .offset = MTDPART_OFS_NXTBLK, |
122 | .size = 120 * SZ_1M, |
123 | } |
124 | }; |
125 | |
126 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) |
127 | { |
128 | *num_partitions = ARRAY_SIZE(ek_nand_partition); |
129 | return ek_nand_partition; |
130 | } |
131 | |
132 | static struct atmel_nand_data __initdata ek_nand_data = { |
133 | .ale = 21, |
134 | .cle = 22, |
135 | // .det_pin = ... not connected |
136 | .rdy_pin = AT91_PIN_PA22, |
137 | .enable_pin = AT91_PIN_PD15, |
138 | .partition_info = nand_partitions, |
139 | }; |
140 | |
141 | static struct sam9_smc_config __initdata ek_nand_smc_config = { |
142 | .ncs_read_setup = 0, |
143 | .nrd_setup = 1, |
144 | .ncs_write_setup = 0, |
145 | .nwe_setup = 1, |
146 | |
147 | .ncs_read_pulse = 3, |
148 | .nrd_pulse = 3, |
149 | .ncs_write_pulse = 3, |
150 | .nwe_pulse = 3, |
151 | |
152 | .read_cycle = 5, |
153 | .write_cycle = 5, |
154 | |
155 | .mode = AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE | AT91_SMC_DBW_8, |
156 | .tdf_cycles = 2, |
157 | }; |
158 | |
159 | static void __init ek_add_device_nand(void) |
160 | { |
161 | /* configure chip-select 3 (NAND) */ |
162 | sam9_smc_configure(3, &ek_nand_smc_config); |
163 | |
164 | at91_add_device_nand(&ek_nand_data); |
165 | } |
166 | |
167 | |
168 | /* |
169 | * GPIO Buttons |
170 | */ |
171 | #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE) |
172 | static struct gpio_keys_button ek_buttons[] = { |
173 | { /* USER PUSH BUTTON */ |
174 | .code = KEY_ENTER, |
175 | .gpio = AT91_PIN_PB10, |
176 | .active_low = 1, |
177 | .desc = "user_pb", |
178 | .wakeup = 1, |
179 | } |
180 | }; |
181 | |
182 | static struct gpio_keys_platform_data ek_button_data = { |
183 | .buttons = ek_buttons, |
184 | .nbuttons = ARRAY_SIZE(ek_buttons), |
185 | }; |
186 | |
187 | static struct platform_device ek_button_device = { |
188 | .name = "gpio-keys", |
189 | .id = -1, |
190 | .num_resources = 0, |
191 | .dev = { |
192 | .platform_data = &ek_button_data, |
193 | } |
194 | }; |
195 | |
196 | static void __init ek_add_device_buttons(void) |
197 | { |
198 | at91_set_GPIO_periph(AT91_PIN_PB10, 1); /* user push button, pull up enabled */ |
199 | at91_set_deglitch(AT91_PIN_PB10, 1); |
200 | |
201 | platform_device_register(&ek_button_device); |
202 | } |
203 | #else |
204 | static void __init ek_add_device_buttons(void) {} |
205 | #endif |
206 | |
207 | /* |
208 | * LEDs |
209 | */ |
210 | static struct gpio_led ek_leds[] = { |
211 | { /* user_led (green) */ |
212 | .name = "user_led", |
213 | .gpio = AT91_PIN_PB21, |
214 | .active_low = 1, |
215 | .default_trigger = "heartbeat", |
216 | } |
217 | }; |
218 | |
219 | |
220 | static void __init ek_board_init(void) |
221 | { |
222 | /* Serial */ |
223 | at91_add_device_serial(); |
224 | /* USB Host */ |
225 | at91_add_device_usbh(&ek_usbh_data); |
226 | /* USB Device */ |
227 | at91_add_device_udc(&ek_udc_data); |
228 | /* SPI */ |
229 | at91_add_device_spi(ek_spi_devices, ARRAY_SIZE(ek_spi_devices)); |
230 | /* Ethernet */ |
231 | at91_add_device_eth(&ek_macb_data); |
232 | /* NAND */ |
233 | ek_add_device_nand(); |
234 | /* I2C */ |
235 | at91_add_device_i2c(NULL, 0); |
236 | /* Push Buttons */ |
237 | ek_add_device_buttons(); |
238 | /* LEDs */ |
239 | at91_gpio_leds(ek_leds, ARRAY_SIZE(ek_leds)); |
240 | /* shutdown controller, wakeup button (5 msec low) */ |
241 | at91_sys_write(AT91_SHDW_MR, AT91_SHDW_CPTWK0_(10) | AT91_SHDW_WKMODE0_LOW |
242 | | AT91_SHDW_RTTWKEN); |
243 | } |
244 | |
245 | MACHINE_START(USB_A9263, "CALAO USB_A9263") |
246 | /* Maintainer: calao-systems */ |
247 | .boot_params = AT91_SDRAM_BASE + 0x100, |
248 | .timer = &at91sam926x_timer, |
249 | .map_io = ek_map_io, |
250 | .init_irq = ek_init_irq, |
251 | .init_machine = ek_board_init, |
252 | MACHINE_END |
253 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9