Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
board-snapper9260.c
Go to the documentation of this file.
1 /*
2  * linux/arch/arm/mach-at91/board-snapper9260.c
3  *
4  * Copyright (C) 2010 Bluewater System Ltd
5  *
6  * Author: Andre Renaud <[email protected]>
7  * Author: Ryan Mallon
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 as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22  *
23  */
24 
25 #include <linux/init.h>
26 #include <linux/gpio.h>
27 #include <linux/platform_device.h>
28 #include <linux/spi/spi.h>
29 #include <linux/i2c/pca953x.h>
30 
31 #include <asm/mach-types.h>
32 #include <asm/mach/arch.h>
33 
34 #include <mach/hardware.h>
35 #include <mach/board.h>
36 #include <mach/at91_aic.h>
37 #include <mach/at91sam9_smc.h>
38 
39 #include "sam9_smc.h"
40 #include "generic.h"
41 
42 #define SNAPPER9260_IO_EXP_GPIO(x) (NR_BUILTIN_GPIO + (x))
43 
44 static void __init snapper9260_init_early(void)
45 {
46  at91_initialize(18432000);
47 }
48 
49 static struct at91_usbh_data __initdata snapper9260_usbh_data = {
50  .ports = 2,
51  .vbus_pin = {-EINVAL, -EINVAL},
52  .overcurrent_pin= {-EINVAL, -EINVAL},
53 };
54 
55 static struct at91_udc_data __initdata snapper9260_udc_data = {
56  .vbus_pin = SNAPPER9260_IO_EXP_GPIO(5),
57  .vbus_active_low = 1,
58  .vbus_polled = 1,
59  .pullup_pin = -EINVAL,
60 };
61 
62 static struct macb_platform_data snapper9260_macb_data = {
63  .phy_irq_pin = -EINVAL,
64  .is_rmii = 1,
65 };
66 
67 static struct mtd_partition __initdata snapper9260_nand_partitions[] = {
68  {
69  .name = "Preboot",
70  .offset = 0,
71  .size = SZ_128K,
72  },
73  {
74  .name = "Bootloader",
75  .offset = MTDPART_OFS_APPEND,
76  .size = SZ_256K,
77  },
78  {
79  .name = "Environment",
80  .offset = MTDPART_OFS_APPEND,
81  .size = SZ_128K,
82  },
83  {
84  .name = "Kernel",
85  .offset = MTDPART_OFS_APPEND,
86  .size = SZ_4M,
87  },
88  {
89  .name = "Filesystem",
90  .offset = MTDPART_OFS_APPEND,
91  .size = MTDPART_SIZ_FULL,
92  },
93 };
94 
95 static struct atmel_nand_data __initdata snapper9260_nand_data = {
96  .ale = 21,
97  .cle = 22,
98  .rdy_pin = AT91_PIN_PC13,
99  .parts = snapper9260_nand_partitions,
100  .num_parts = ARRAY_SIZE(snapper9260_nand_partitions),
101  .bus_width_16 = 0,
102  .enable_pin = -EINVAL,
103  .det_pin = -EINVAL,
104  .ecc_mode = NAND_ECC_SOFT,
105 };
106 
107 static struct sam9_smc_config __initdata snapper9260_nand_smc_config = {
108  .ncs_read_setup = 0,
109  .nrd_setup = 0,
110  .ncs_write_setup = 0,
111  .nwe_setup = 0,
112 
113  .ncs_read_pulse = 5,
114  .nrd_pulse = 2,
115  .ncs_write_pulse = 5,
116  .nwe_pulse = 2,
117 
118  .read_cycle = 7,
119  .write_cycle = 7,
120 
123  .tdf_cycles = 1,
124 };
125 
126 static struct pca953x_platform_data snapper9260_io_expander_data = {
127  .gpio_base = SNAPPER9260_IO_EXP_GPIO(0),
128 };
129 
130 static struct i2c_board_info __initdata snapper9260_i2c_devices[] = {
131  {
132  /* IO expander */
133  I2C_BOARD_INFO("max7312", 0x28),
134  .platform_data = &snapper9260_io_expander_data,
135  },
136  {
137  /* Audio codec */
138  I2C_BOARD_INFO("tlv320aic23", 0x1a),
139  },
140 };
141 
142 static struct i2c_board_info __initdata snapper9260_i2c_isl1208 = {
143  /* RTC */
144  I2C_BOARD_INFO("isl1208", 0x6f),
145 };
146 
147 static void __init snapper9260_add_device_nand(void)
148 {
150  sam9_smc_configure(0, 3, &snapper9260_nand_smc_config);
151  at91_add_device_nand(&snapper9260_nand_data);
152 }
153 
154 static void __init snapper9260_board_init(void)
155 {
156  at91_add_device_i2c(snapper9260_i2c_devices,
157  ARRAY_SIZE(snapper9260_i2c_devices));
158 
159  snapper9260_i2c_isl1208.irq = gpio_to_irq(AT91_PIN_PA31);
160  i2c_register_board_info(0, &snapper9260_i2c_isl1208, 1);
161 
162  /* Debug on ttyS0 */
163  at91_register_uart(0, 0, 0);
164 
171  at91_add_device_usbh(&snapper9260_usbh_data);
172  at91_add_device_udc(&snapper9260_udc_data);
173  at91_add_device_eth(&snapper9260_macb_data);
176  snapper9260_add_device_nand();
177 }
178 
179 MACHINE_START(SNAPPER_9260, "Bluewater Systems Snapper 9260/9G20 module")
180  .timer = &at91sam926x_timer,
181  .map_io = at91_map_io,
182  .handle_irq = at91_aic_handle_irq,
183  .init_early = snapper9260_init_early,
185  .init_machine = snapper9260_board_init,
187 
188