]> git.karo-electronics.de Git - karo-tx-linux.git/blob - arch/arm/mach-at91/board-sam9260ek.c
Merge tag 'exynos-mcpm-2' of git://git.kernel.org/pub/scm/linux/kernel/git/kgene...
[karo-tx-linux.git] / arch / arm / mach-at91 / board-sam9260ek.c
1 /*
2  * linux/arch/arm/mach-at91/board-sam9260ek.c
3  *
4  *  Copyright (C) 2005 SAN People
5  *  Copyright (C) 2006 Atmel
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
20  */
21
22 #include <linux/types.h>
23 #include <linux/gpio.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/spi/at73c213.h>
30 #include <linux/clk.h>
31 #include <linux/platform_data/at24.h>
32 #include <linux/gpio_keys.h>
33 #include <linux/input.h>
34
35 #include <asm/setup.h>
36 #include <asm/mach-types.h>
37 #include <asm/irq.h>
38
39 #include <asm/mach/arch.h>
40 #include <asm/mach/map.h>
41 #include <asm/mach/irq.h>
42
43 #include <mach/hardware.h>
44 #include <mach/at91sam9_smc.h>
45 #include <mach/system_rev.h>
46
47 #include "at91_aic.h"
48 #include "at91_shdwc.h"
49 #include "board.h"
50 #include "sam9_smc.h"
51 #include "generic.h"
52 #include "gpio.h"
53
54
55 static void __init ek_init_early(void)
56 {
57         /* Initialize processor: 18.432 MHz crystal */
58         at91_initialize(18432000);
59 }
60
61 /*
62  * USB Host port
63  */
64 static struct at91_usbh_data __initdata ek_usbh_data = {
65         .ports          = 2,
66         .vbus_pin       = {-EINVAL, -EINVAL},
67         .overcurrent_pin= {-EINVAL, -EINVAL},
68 };
69
70 /*
71  * USB Device port
72  */
73 static struct at91_udc_data __initdata ek_udc_data = {
74         .vbus_pin       = AT91_PIN_PC5,
75         .pullup_pin     = -EINVAL,              /* pull-up driven by UDC */
76 };
77
78
79 /*
80  * Audio
81  */
82 static struct at73c213_board_info at73c213_data = {
83         .ssc_id         = 0,
84         .shortname      = "AT91SAM9260-EK external DAC",
85 };
86
87 #if defined(CONFIG_SND_AT73C213) || defined(CONFIG_SND_AT73C213_MODULE)
88 static void __init at73c213_set_clk(struct at73c213_board_info *info)
89 {
90         struct clk *pck0;
91         struct clk *plla;
92
93         pck0 = clk_get(NULL, "pck0");
94         plla = clk_get(NULL, "plla");
95
96         /* AT73C213 MCK Clock */
97         at91_set_B_periph(AT91_PIN_PC1, 0);     /* PCK0 */
98
99         clk_set_parent(pck0, plla);
100         clk_put(plla);
101
102         info->dac_clk = pck0;
103 }
104 #else
105 static void __init at73c213_set_clk(struct at73c213_board_info *info) {}
106 #endif
107
108 /*
109  * SPI devices.
110  */
111 static struct spi_board_info ek_spi_devices[] = {
112 #if !IS_ENABLED(CONFIG_MMC_ATMELMCI)
113         {       /* DataFlash chip */
114                 .modalias       = "mtd_dataflash",
115                 .chip_select    = 1,
116                 .max_speed_hz   = 15 * 1000 * 1000,
117                 .bus_num        = 0,
118         },
119 #if defined(CONFIG_MTD_AT91_DATAFLASH_CARD)
120         {       /* DataFlash card */
121                 .modalias       = "mtd_dataflash",
122                 .chip_select    = 0,
123                 .max_speed_hz   = 15 * 1000 * 1000,
124                 .bus_num        = 0,
125         },
126 #endif
127 #endif
128 #if defined(CONFIG_SND_AT73C213) || defined(CONFIG_SND_AT73C213_MODULE)
129         {       /* AT73C213 DAC */
130                 .modalias       = "at73c213",
131                 .chip_select    = 0,
132                 .max_speed_hz   = 10 * 1000 * 1000,
133                 .bus_num        = 1,
134                 .mode           = SPI_MODE_1,
135                 .platform_data  = &at73c213_data,
136         },
137 #endif
138 };
139
140
141 /*
142  * MACB Ethernet device
143  */
144 static struct macb_platform_data __initdata ek_macb_data = {
145         .phy_irq_pin    = AT91_PIN_PA7,
146         .is_rmii        = 1,
147 };
148
149
150 /*
151  * NAND flash
152  */
153 static struct mtd_partition __initdata ek_nand_partition[] = {
154         {
155                 .name   = "Partition 1",
156                 .offset = 0,
157                 .size   = SZ_256K,
158         },
159         {
160                 .name   = "Partition 2",
161                 .offset = MTDPART_OFS_NXTBLK,
162                 .size   = MTDPART_SIZ_FULL,
163         },
164 };
165
166 static struct atmel_nand_data __initdata ek_nand_data = {
167         .ale            = 21,
168         .cle            = 22,
169         .det_pin        = -EINVAL,
170         .rdy_pin        = AT91_PIN_PC13,
171         .enable_pin     = AT91_PIN_PC14,
172         .ecc_mode       = NAND_ECC_SOFT,
173         .on_flash_bbt   = 1,
174         .parts          = ek_nand_partition,
175         .num_parts      = ARRAY_SIZE(ek_nand_partition),
176 };
177
178 static struct sam9_smc_config __initdata ek_nand_smc_config = {
179         .ncs_read_setup         = 0,
180         .nrd_setup              = 1,
181         .ncs_write_setup        = 0,
182         .nwe_setup              = 1,
183
184         .ncs_read_pulse         = 3,
185         .nrd_pulse              = 3,
186         .ncs_write_pulse        = 3,
187         .nwe_pulse              = 3,
188
189         .read_cycle             = 5,
190         .write_cycle            = 5,
191
192         .mode                   = AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE,
193         .tdf_cycles             = 2,
194 };
195
196 static void __init ek_add_device_nand(void)
197 {
198         ek_nand_data.bus_width_16 = board_have_nand_16bit();
199         /* setup bus-width (8 or 16) */
200         if (ek_nand_data.bus_width_16)
201                 ek_nand_smc_config.mode |= AT91_SMC_DBW_16;
202         else
203                 ek_nand_smc_config.mode |= AT91_SMC_DBW_8;
204
205         /* configure chip-select 3 (NAND) */
206         sam9_smc_configure(0, 3, &ek_nand_smc_config);
207
208         at91_add_device_nand(&ek_nand_data);
209 }
210
211
212 /*
213  * MCI (SD/MMC)
214  */
215 static struct mci_platform_data __initdata ek_mci0_data = {
216         .slot[1] = {
217                 .bus_width      = 4,
218                 .detect_pin     = -EINVAL,
219                 .wp_pin         = -EINVAL,
220         },
221 };
222
223
224 /*
225  * LEDs
226  */
227 static struct gpio_led ek_leds[] = {
228         {       /* "bottom" led, green, userled1 to be defined */
229                 .name                   = "ds5",
230                 .gpio                   = AT91_PIN_PA6,
231                 .active_low             = 1,
232                 .default_trigger        = "none",
233         },
234         {       /* "power" led, yellow */
235                 .name                   = "ds1",
236                 .gpio                   = AT91_PIN_PA9,
237                 .default_trigger        = "heartbeat",
238         }
239 };
240
241 /*
242  * I2C devices
243  */
244 static struct at24_platform_data at24c512 = {
245         .byte_len       = SZ_512K / 8,
246         .page_size      = 128,
247         .flags          = AT24_FLAG_ADDR16,
248 };
249
250 static struct i2c_board_info __initdata ek_i2c_devices[] = {
251         {
252                 I2C_BOARD_INFO("24c512", 0x50),
253                 .platform_data = &at24c512,
254         },
255         /* more devices can be added using expansion connectors */
256 };
257
258
259 /*
260  * GPIO Buttons
261  */
262 #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
263 static struct gpio_keys_button ek_buttons[] = {
264         {
265                 .gpio           = AT91_PIN_PA30,
266                 .code           = BTN_3,
267                 .desc           = "Button 3",
268                 .active_low     = 1,
269                 .wakeup         = 1,
270         },
271         {
272                 .gpio           = AT91_PIN_PA31,
273                 .code           = BTN_4,
274                 .desc           = "Button 4",
275                 .active_low     = 1,
276                 .wakeup         = 1,
277         }
278 };
279
280 static struct gpio_keys_platform_data ek_button_data = {
281         .buttons        = ek_buttons,
282         .nbuttons       = ARRAY_SIZE(ek_buttons),
283 };
284
285 static struct platform_device ek_button_device = {
286         .name           = "gpio-keys",
287         .id             = -1,
288         .num_resources  = 0,
289         .dev            = {
290                 .platform_data  = &ek_button_data,
291         }
292 };
293
294 static void __init ek_add_device_buttons(void)
295 {
296         at91_set_gpio_input(AT91_PIN_PA30, 1);  /* btn3 */
297         at91_set_deglitch(AT91_PIN_PA30, 1);
298         at91_set_gpio_input(AT91_PIN_PA31, 1);  /* btn4 */
299         at91_set_deglitch(AT91_PIN_PA31, 1);
300
301         platform_device_register(&ek_button_device);
302 }
303 #else
304 static void __init ek_add_device_buttons(void) {}
305 #endif
306
307
308 static void __init ek_board_init(void)
309 {
310         /* Serial */
311         /* DBGU on ttyS0. (Rx & Tx only) */
312         at91_register_uart(0, 0, 0);
313
314         /* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */
315         at91_register_uart(AT91SAM9260_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS
316                            | ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD
317                            | ATMEL_UART_RI);
318
319         /* USART1 on ttyS2. (Rx, Tx, RTS, CTS) */
320         at91_register_uart(AT91SAM9260_ID_US1, 2, ATMEL_UART_CTS | ATMEL_UART_RTS);
321         at91_add_device_serial();
322         /* USB Host */
323         at91_add_device_usbh(&ek_usbh_data);
324         /* USB Device */
325         at91_add_device_udc(&ek_udc_data);
326         /* SPI */
327         at91_add_device_spi(ek_spi_devices, ARRAY_SIZE(ek_spi_devices));
328         /* NAND */
329         ek_add_device_nand();
330         /* Ethernet */
331         at91_add_device_eth(&ek_macb_data);
332         /* MMC */
333         at91_add_device_mci(0, &ek_mci0_data);
334         /* I2C */
335         at91_add_device_i2c(ek_i2c_devices, ARRAY_SIZE(ek_i2c_devices));
336         /* SSC (to AT73C213) */
337         at73c213_set_clk(&at73c213_data);
338         at91_add_device_ssc(AT91SAM9260_ID_SSC, ATMEL_SSC_TX);
339         /* LEDs */
340         at91_gpio_leds(ek_leds, ARRAY_SIZE(ek_leds));
341         /* Push Buttons */
342         ek_add_device_buttons();
343 }
344
345 MACHINE_START(AT91SAM9260EK, "Atmel AT91SAM9260-EK")
346         /* Maintainer: Atmel */
347         .init_time      = at91sam926x_pit_init,
348         .map_io         = at91_map_io,
349         .handle_irq     = at91_aic_handle_irq,
350         .init_early     = ek_init_early,
351         .init_irq       = at91_init_irq_default,
352         .init_machine   = ek_board_init,
353 MACHINE_END