~ubuntu-branches/ubuntu/precise/linux-lowlatency/precise

« back to all changes in this revision

Viewing changes to arch/arm/mach-at91/board-qil-a9260.c

  • Committer: Package Import Robot
  • Author(s): Alessio Igor Bogani
  • Date: 2011-10-26 11:13:05 UTC
  • Revision ID: package-import@ubuntu.com-20111026111305-tz023xykf0i6eosh
Tags: upstream-3.2.0
ImportĀ upstreamĀ versionĀ 3.2.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * linux/arch/arm/mach-at91/board-qil-a9260.c
 
3
 *
 
4
 *  Copyright (C) 2005 SAN People
 
5
 *  Copyright (C) 2006 Atmel
 
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/gpio.h>
 
25
#include <linux/init.h>
 
26
#include <linux/mm.h>
 
27
#include <linux/module.h>
 
28
#include <linux/platform_device.h>
 
29
#include <linux/spi/spi.h>
 
30
#include <linux/gpio_keys.h>
 
31
#include <linux/input.h>
 
32
#include <linux/clk.h>
 
33
 
 
34
#include <asm/setup.h>
 
35
#include <asm/mach-types.h>
 
36
#include <asm/irq.h>
 
37
 
 
38
#include <asm/mach/arch.h>
 
39
#include <asm/mach/map.h>
 
40
#include <asm/mach/irq.h>
 
41
 
 
42
#include <mach/hardware.h>
 
43
#include <mach/board.h>
 
44
#include <mach/at91sam9_smc.h>
 
45
#include <mach/at91_shdwc.h>
 
46
 
 
47
#include "sam9_smc.h"
 
48
#include "generic.h"
 
49
 
 
50
 
 
51
static void __init ek_init_early(void)
 
52
{
 
53
        /* Initialize processor: 12.000 MHz crystal */
 
54
        at91_initialize(12000000);
 
55
 
 
56
        /* DBGU on ttyS0. (Rx & Tx only) */
 
57
        at91_register_uart(0, 0, 0);
 
58
 
 
59
        /* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */
 
60
        at91_register_uart(AT91SAM9260_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS
 
61
                           | ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD
 
62
                           | ATMEL_UART_RI);
 
63
 
 
64
        /* USART1 on ttyS2. (Rx, Tx, CTS, RTS) */
 
65
        at91_register_uart(AT91SAM9260_ID_US1, 2, ATMEL_UART_CTS | ATMEL_UART_RTS);
 
66
 
 
67
        /* USART2 on ttyS3. (Rx, Tx, CTS, RTS) */
 
68
        at91_register_uart(AT91SAM9260_ID_US2, 3, ATMEL_UART_CTS | ATMEL_UART_RTS);
 
69
 
 
70
        /* set serial console to ttyS1 (ie, USART0) */
 
71
        at91_set_serial_console(1);
 
72
 
 
73
}
 
74
 
 
75
/*
 
76
 * USB Host port
 
77
 */
 
78
static struct at91_usbh_data __initdata ek_usbh_data = {
 
79
        .ports          = 2,
 
80
};
 
81
 
 
82
/*
 
83
 * USB Device port
 
84
 */
 
85
static struct at91_udc_data __initdata ek_udc_data = {
 
86
        .vbus_pin       = AT91_PIN_PC5,
 
87
        .pullup_pin     = 0,            /* pull-up driven by UDC */
 
88
};
 
89
 
 
90
/*
 
91
 * SPI devices.
 
92
 */
 
93
static struct spi_board_info ek_spi_devices[] = {
 
94
#if defined(CONFIG_RTC_DRV_M41T94)
 
95
        {       /* M41T94 RTC */
 
96
                .modalias       = "m41t94",
 
97
                .chip_select    = 0,
 
98
                .max_speed_hz   = 1 * 1000 * 1000,
 
99
                .bus_num        = 0,
 
100
        }
 
101
#endif
 
102
};
 
103
 
 
104
/*
 
105
 * MACB Ethernet device
 
106
 */
 
107
static struct at91_eth_data __initdata ek_macb_data = {
 
108
        .phy_irq_pin    = AT91_PIN_PA31,
 
109
        .is_rmii        = 1,
 
110
};
 
111
 
 
112
/*
 
113
 * NAND flash
 
114
 */
 
115
static struct mtd_partition __initdata ek_nand_partition[] = {
 
116
        {
 
117
                .name   = "Uboot & Kernel",
 
118
                .offset = 0,
 
119
                .size   = SZ_16M,
 
120
        },
 
121
        {
 
122
                .name   = "Root FS",
 
123
                .offset = MTDPART_OFS_NXTBLK,
 
124
                .size   = 120 * SZ_1M,
 
125
        },
 
126
        {
 
127
                .name   = "FS",
 
128
                .offset = MTDPART_OFS_NXTBLK,
 
129
                .size   = 120 * SZ_1M,
 
130
        },
 
131
};
 
132
 
 
133
static struct atmel_nand_data __initdata ek_nand_data = {
 
134
        .ale            = 21,
 
135
        .cle            = 22,
 
136
//      .det_pin        = ... not connected
 
137
        .rdy_pin        = AT91_PIN_PC13,
 
138
        .enable_pin     = AT91_PIN_PC14,
 
139
        .parts          = ek_nand_partition,
 
140
        .num_parts      = ARRAY_SIZE(ek_nand_partition),
 
141
};
 
142
 
 
143
static struct sam9_smc_config __initdata ek_nand_smc_config = {
 
144
        .ncs_read_setup         = 0,
 
145
        .nrd_setup              = 1,
 
146
        .ncs_write_setup        = 0,
 
147
        .nwe_setup              = 1,
 
148
 
 
149
        .ncs_read_pulse         = 3,
 
150
        .nrd_pulse              = 3,
 
151
        .ncs_write_pulse        = 3,
 
152
        .nwe_pulse              = 3,
 
153
 
 
154
        .read_cycle             = 5,
 
155
        .write_cycle            = 5,
 
156
 
 
157
        .mode                   = AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE | AT91_SMC_DBW_8,
 
158
        .tdf_cycles             = 2,
 
159
};
 
160
 
 
161
static void __init ek_add_device_nand(void)
 
162
{
 
163
        /* configure chip-select 3 (NAND) */
 
164
        sam9_smc_configure(3, &ek_nand_smc_config);
 
165
 
 
166
        at91_add_device_nand(&ek_nand_data);
 
167
}
 
168
 
 
169
/*
 
170
 * MCI (SD/MMC)
 
171
 */
 
172
static struct at91_mmc_data __initdata ek_mmc_data = {
 
173
        .slot_b         = 0,
 
174
        .wire4          = 1,
 
175
//      .det_pin        = ... not connected
 
176
//      .wp_pin         = ... not connected
 
177
//      .vcc_pin        = ... not connected
 
178
};
 
179
 
 
180
/*
 
181
 * GPIO Buttons
 
182
 */
 
183
#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
 
184
static struct gpio_keys_button ek_buttons[] = {
 
185
        {       /* USER PUSH BUTTON */
 
186
                .code           = KEY_ENTER,
 
187
                .gpio           = AT91_PIN_PB10,
 
188
                .active_low     = 1,
 
189
                .desc           = "user_pb",
 
190
                .wakeup         = 1,
 
191
        }
 
192
};
 
193
 
 
194
static struct gpio_keys_platform_data ek_button_data = {
 
195
        .buttons        = ek_buttons,
 
196
        .nbuttons       = ARRAY_SIZE(ek_buttons),
 
197
};
 
198
 
 
199
static struct platform_device ek_button_device = {
 
200
        .name           = "gpio-keys",
 
201
        .id             = -1,
 
202
        .num_resources  = 0,
 
203
        .dev            = {
 
204
                .platform_data  = &ek_button_data,
 
205
        }
 
206
};
 
207
 
 
208
static void __init ek_add_device_buttons(void)
 
209
{
 
210
        at91_set_GPIO_periph(AT91_PIN_PB10, 1); /* user push button, pull up enabled */
 
211
        at91_set_deglitch(AT91_PIN_PB10, 1);
 
212
 
 
213
        platform_device_register(&ek_button_device);
 
214
}
 
215
#else
 
216
static void __init ek_add_device_buttons(void) {}
 
217
#endif
 
218
 
 
219
/*
 
220
 * LEDs
 
221
 */
 
222
static struct gpio_led ek_leds[] = {
 
223
        {       /* user_led (green) */
 
224
                .name                   = "user_led",
 
225
                .gpio                   = AT91_PIN_PB21,
 
226
                .active_low             = 0,
 
227
                .default_trigger        = "heartbeat",
 
228
        }
 
229
};
 
230
 
 
231
static void __init ek_board_init(void)
 
232
{
 
233
        /* Serial */
 
234
        at91_add_device_serial();
 
235
        /* USB Host */
 
236
        at91_add_device_usbh(&ek_usbh_data);
 
237
        /* USB Device */
 
238
        at91_add_device_udc(&ek_udc_data);
 
239
        /* SPI */
 
240
        at91_add_device_spi(ek_spi_devices, ARRAY_SIZE(ek_spi_devices));
 
241
        /* NAND */
 
242
        ek_add_device_nand();
 
243
        /* I2C */
 
244
        at91_add_device_i2c(NULL, 0);
 
245
        /* Ethernet */
 
246
        at91_add_device_eth(&ek_macb_data);
 
247
        /* MMC */
 
248
        at91_add_device_mmc(0, &ek_mmc_data);
 
249
        /* Push Buttons */
 
250
        ek_add_device_buttons();
 
251
        /* LEDs */
 
252
        at91_gpio_leds(ek_leds, ARRAY_SIZE(ek_leds));
 
253
        /* shutdown controller, wakeup button (5 msec low) */
 
254
        at91_sys_write(AT91_SHDW_MR, AT91_SHDW_CPTWK0_(10) | AT91_SHDW_WKMODE0_LOW
 
255
                                | AT91_SHDW_RTTWKEN);
 
256
}
 
257
 
 
258
MACHINE_START(QIL_A9260, "CALAO QIL_A9260")
 
259
        /* Maintainer: calao-systems */
 
260
        .timer          = &at91sam926x_timer,
 
261
        .map_io         = at91_map_io,
 
262
        .init_early     = ek_init_early,
 
263
        .init_irq       = at91_init_irq_default,
 
264
        .init_machine   = ek_board_init,
 
265
MACHINE_END