sh: dmaengine support for SH7757
[linux-2.6-block.git] / arch / sh / boards / board-sh7757lcr.c
CommitLineData
36239c67
YS
1/*
2 * Renesas R0P7757LC0012RL Support.
3 *
4 * Copyright (C) 2009 - 2010 Renesas Solutions Corp.
5 *
6 * This file is subject to the terms and conditions of the GNU General Public
7 * License. See the file "COPYING" in the main directory of this archive
8 * for more details.
9 */
10
11#include <linux/init.h>
12#include <linux/platform_device.h>
13#include <linux/gpio.h>
14#include <linux/irq.h>
15#include <linux/spi/spi.h>
16#include <linux/spi/flash.h>
17#include <linux/io.h>
18#include <cpu/sh7757.h>
19#include <asm/sh_eth.h>
20#include <asm/heartbeat.h>
21
22static struct resource heartbeat_resource = {
23 .start = 0xffec005c, /* PUDR */
24 .end = 0xffec005c,
25 .flags = IORESOURCE_MEM | IORESOURCE_MEM_8BIT,
26};
27
28static unsigned char heartbeat_bit_pos[] = { 0, 1, 2, 3 };
29
30static struct heartbeat_data heartbeat_data = {
31 .bit_pos = heartbeat_bit_pos,
32 .nr_bits = ARRAY_SIZE(heartbeat_bit_pos),
33 .flags = HEARTBEAT_INVERTED,
34};
35
36static struct platform_device heartbeat_device = {
37 .name = "heartbeat",
38 .id = -1,
39 .dev = {
40 .platform_data = &heartbeat_data,
41 },
42 .num_resources = 1,
43 .resource = &heartbeat_resource,
44};
45
46/* Fast Ethernet */
47static struct resource sh_eth0_resources[] = {
48 {
49 .start = 0xfef00000,
50 .end = 0xfef001ff,
51 .flags = IORESOURCE_MEM,
52 }, {
53 .start = 84,
54 .end = 84,
55 .flags = IORESOURCE_IRQ,
56 },
57};
58
59static struct sh_eth_plat_data sh7757_eth0_pdata = {
60 .phy = 1,
61 .edmac_endian = EDMAC_LITTLE_ENDIAN,
62};
63
64static struct platform_device sh7757_eth0_device = {
65 .name = "sh-eth",
66 .resource = sh_eth0_resources,
67 .id = 0,
68 .num_resources = ARRAY_SIZE(sh_eth0_resources),
69 .dev = {
70 .platform_data = &sh7757_eth0_pdata,
71 },
72};
73
74static struct resource sh_eth1_resources[] = {
75 {
76 .start = 0xfef00800,
77 .end = 0xfef009ff,
78 .flags = IORESOURCE_MEM,
79 }, {
80 .start = 84,
81 .end = 84,
82 .flags = IORESOURCE_IRQ,
83 },
84};
85
86static struct sh_eth_plat_data sh7757_eth1_pdata = {
87 .phy = 1,
88 .edmac_endian = EDMAC_LITTLE_ENDIAN,
89};
90
91static struct platform_device sh7757_eth1_device = {
92 .name = "sh-eth",
93 .resource = sh_eth1_resources,
94 .id = 1,
95 .num_resources = ARRAY_SIZE(sh_eth1_resources),
96 .dev = {
97 .platform_data = &sh7757_eth1_pdata,
98 },
99};
100
101static struct platform_device *sh7757lcr_devices[] __initdata = {
102 &heartbeat_device,
103 &sh7757_eth0_device,
104 &sh7757_eth1_device,
105};
106
ceb7afe2
YS
107static struct flash_platform_data spi_flash_data = {
108 .name = "m25p80",
109 .type = "m25px64",
110};
111
112static struct spi_board_info spi_board_info[] = {
113 {
114 .modalias = "m25p80",
115 .max_speed_hz = 25000000,
116 .bus_num = 0,
117 .chip_select = 1,
118 .platform_data = &spi_flash_data,
119 },
120};
121
36239c67
YS
122static int __init sh7757lcr_devices_setup(void)
123{
124 /* RGMII (PTA) */
125 gpio_request(GPIO_FN_ET0_MDC, NULL);
126 gpio_request(GPIO_FN_ET0_MDIO, NULL);
127 gpio_request(GPIO_FN_ET1_MDC, NULL);
128 gpio_request(GPIO_FN_ET1_MDIO, NULL);
129
130 /* ONFI (PTB, PTZ) */
131 gpio_request(GPIO_FN_ON_NRE, NULL);
132 gpio_request(GPIO_FN_ON_NWE, NULL);
133 gpio_request(GPIO_FN_ON_NWP, NULL);
134 gpio_request(GPIO_FN_ON_NCE0, NULL);
135 gpio_request(GPIO_FN_ON_R_B0, NULL);
136 gpio_request(GPIO_FN_ON_ALE, NULL);
137 gpio_request(GPIO_FN_ON_CLE, NULL);
138
139 gpio_request(GPIO_FN_ON_DQ7, NULL);
140 gpio_request(GPIO_FN_ON_DQ6, NULL);
141 gpio_request(GPIO_FN_ON_DQ5, NULL);
142 gpio_request(GPIO_FN_ON_DQ4, NULL);
143 gpio_request(GPIO_FN_ON_DQ3, NULL);
144 gpio_request(GPIO_FN_ON_DQ2, NULL);
145 gpio_request(GPIO_FN_ON_DQ1, NULL);
146 gpio_request(GPIO_FN_ON_DQ0, NULL);
147
148 /* IRQ8 to 0 (PTB, PTC) */
149 gpio_request(GPIO_FN_IRQ8, NULL);
150 gpio_request(GPIO_FN_IRQ7, NULL);
151 gpio_request(GPIO_FN_IRQ6, NULL);
152 gpio_request(GPIO_FN_IRQ5, NULL);
153 gpio_request(GPIO_FN_IRQ4, NULL);
154 gpio_request(GPIO_FN_IRQ3, NULL);
155 gpio_request(GPIO_FN_IRQ2, NULL);
156 gpio_request(GPIO_FN_IRQ1, NULL);
157 gpio_request(GPIO_FN_IRQ0, NULL);
158
159 /* SPI0 (PTD) */
160 gpio_request(GPIO_FN_SP0_MOSI, NULL);
161 gpio_request(GPIO_FN_SP0_MISO, NULL);
162 gpio_request(GPIO_FN_SP0_SCK, NULL);
163 gpio_request(GPIO_FN_SP0_SCK_FB, NULL);
164 gpio_request(GPIO_FN_SP0_SS0, NULL);
165 gpio_request(GPIO_FN_SP0_SS1, NULL);
166 gpio_request(GPIO_FN_SP0_SS2, NULL);
167 gpio_request(GPIO_FN_SP0_SS3, NULL);
168
169 /* RMII 0/1 (PTE, PTF) */
170 gpio_request(GPIO_FN_RMII0_CRS_DV, NULL);
171 gpio_request(GPIO_FN_RMII0_TXD1, NULL);
172 gpio_request(GPIO_FN_RMII0_TXD0, NULL);
173 gpio_request(GPIO_FN_RMII0_TXEN, NULL);
174 gpio_request(GPIO_FN_RMII0_REFCLK, NULL);
175 gpio_request(GPIO_FN_RMII0_RXD1, NULL);
176 gpio_request(GPIO_FN_RMII0_RXD0, NULL);
177 gpio_request(GPIO_FN_RMII0_RX_ER, NULL);
178 gpio_request(GPIO_FN_RMII1_CRS_DV, NULL);
179 gpio_request(GPIO_FN_RMII1_TXD1, NULL);
180 gpio_request(GPIO_FN_RMII1_TXD0, NULL);
181 gpio_request(GPIO_FN_RMII1_TXEN, NULL);
182 gpio_request(GPIO_FN_RMII1_REFCLK, NULL);
183 gpio_request(GPIO_FN_RMII1_RXD1, NULL);
184 gpio_request(GPIO_FN_RMII1_RXD0, NULL);
185 gpio_request(GPIO_FN_RMII1_RX_ER, NULL);
186
187 /* eMMC (PTG) */
188 gpio_request(GPIO_FN_MMCCLK, NULL);
189 gpio_request(GPIO_FN_MMCCMD, NULL);
190 gpio_request(GPIO_FN_MMCDAT7, NULL);
191 gpio_request(GPIO_FN_MMCDAT6, NULL);
192 gpio_request(GPIO_FN_MMCDAT5, NULL);
193 gpio_request(GPIO_FN_MMCDAT4, NULL);
194 gpio_request(GPIO_FN_MMCDAT3, NULL);
195 gpio_request(GPIO_FN_MMCDAT2, NULL);
196 gpio_request(GPIO_FN_MMCDAT1, NULL);
197 gpio_request(GPIO_FN_MMCDAT0, NULL);
198
199 /* LPC (PTG, PTH, PTQ, PTU) */
200 gpio_request(GPIO_FN_SERIRQ, NULL);
201 gpio_request(GPIO_FN_LPCPD, NULL);
202 gpio_request(GPIO_FN_LDRQ, NULL);
203 gpio_request(GPIO_FN_WP, NULL);
204 gpio_request(GPIO_FN_FMS0, NULL);
205 gpio_request(GPIO_FN_LAD3, NULL);
206 gpio_request(GPIO_FN_LAD2, NULL);
207 gpio_request(GPIO_FN_LAD1, NULL);
208 gpio_request(GPIO_FN_LAD0, NULL);
209 gpio_request(GPIO_FN_LFRAME, NULL);
210 gpio_request(GPIO_FN_LRESET, NULL);
211 gpio_request(GPIO_FN_LCLK, NULL);
212 gpio_request(GPIO_FN_LGPIO7, NULL);
213 gpio_request(GPIO_FN_LGPIO6, NULL);
214 gpio_request(GPIO_FN_LGPIO5, NULL);
215 gpio_request(GPIO_FN_LGPIO4, NULL);
216
217 /* SPI1 (PTH) */
218 gpio_request(GPIO_FN_SP1_MOSI, NULL);
219 gpio_request(GPIO_FN_SP1_MISO, NULL);
220 gpio_request(GPIO_FN_SP1_SCK, NULL);
221 gpio_request(GPIO_FN_SP1_SCK_FB, NULL);
222 gpio_request(GPIO_FN_SP1_SS0, NULL);
223 gpio_request(GPIO_FN_SP1_SS1, NULL);
224
225 /* SDHI (PTI) */
226 gpio_request(GPIO_FN_SD_WP, NULL);
227 gpio_request(GPIO_FN_SD_CD, NULL);
228 gpio_request(GPIO_FN_SD_CLK, NULL);
229 gpio_request(GPIO_FN_SD_CMD, NULL);
230 gpio_request(GPIO_FN_SD_D3, NULL);
231 gpio_request(GPIO_FN_SD_D2, NULL);
232 gpio_request(GPIO_FN_SD_D1, NULL);
233 gpio_request(GPIO_FN_SD_D0, NULL);
234
235 /* SCIF3/4 (PTJ, PTW) */
236 gpio_request(GPIO_FN_RTS3, NULL);
237 gpio_request(GPIO_FN_CTS3, NULL);
238 gpio_request(GPIO_FN_TXD3, NULL);
239 gpio_request(GPIO_FN_RXD3, NULL);
240 gpio_request(GPIO_FN_RTS4, NULL);
241 gpio_request(GPIO_FN_RXD4, NULL);
242 gpio_request(GPIO_FN_TXD4, NULL);
243 gpio_request(GPIO_FN_CTS4, NULL);
244
245 /* SERMUX (PTK, PTL, PTO, PTV) */
246 gpio_request(GPIO_FN_COM2_TXD, NULL);
247 gpio_request(GPIO_FN_COM2_RXD, NULL);
248 gpio_request(GPIO_FN_COM2_RTS, NULL);
249 gpio_request(GPIO_FN_COM2_CTS, NULL);
250 gpio_request(GPIO_FN_COM2_DTR, NULL);
251 gpio_request(GPIO_FN_COM2_DSR, NULL);
252 gpio_request(GPIO_FN_COM2_DCD, NULL);
253 gpio_request(GPIO_FN_COM2_RI, NULL);
254 gpio_request(GPIO_FN_RAC_RXD, NULL);
255 gpio_request(GPIO_FN_RAC_RTS, NULL);
256 gpio_request(GPIO_FN_RAC_CTS, NULL);
257 gpio_request(GPIO_FN_RAC_DTR, NULL);
258 gpio_request(GPIO_FN_RAC_DSR, NULL);
259 gpio_request(GPIO_FN_RAC_DCD, NULL);
260 gpio_request(GPIO_FN_RAC_TXD, NULL);
261 gpio_request(GPIO_FN_COM1_TXD, NULL);
262 gpio_request(GPIO_FN_COM1_RXD, NULL);
263 gpio_request(GPIO_FN_COM1_RTS, NULL);
264 gpio_request(GPIO_FN_COM1_CTS, NULL);
265
266 writeb(0x10, 0xfe470000); /* SMR0: SerMux mode 0 */
267
268 /* IIC (PTM, PTR, PTS) */
269 gpio_request(GPIO_FN_SDA7, NULL);
270 gpio_request(GPIO_FN_SCL7, NULL);
271 gpio_request(GPIO_FN_SDA6, NULL);
272 gpio_request(GPIO_FN_SCL6, NULL);
273 gpio_request(GPIO_FN_SDA5, NULL);
274 gpio_request(GPIO_FN_SCL5, NULL);
275 gpio_request(GPIO_FN_SDA4, NULL);
276 gpio_request(GPIO_FN_SCL4, NULL);
277 gpio_request(GPIO_FN_SDA3, NULL);
278 gpio_request(GPIO_FN_SCL3, NULL);
279 gpio_request(GPIO_FN_SDA2, NULL);
280 gpio_request(GPIO_FN_SCL2, NULL);
281 gpio_request(GPIO_FN_SDA1, NULL);
282 gpio_request(GPIO_FN_SCL1, NULL);
283 gpio_request(GPIO_FN_SDA0, NULL);
284 gpio_request(GPIO_FN_SCL0, NULL);
285
286 /* USB (PTN) */
287 gpio_request(GPIO_FN_VBUS_EN, NULL);
288 gpio_request(GPIO_FN_VBUS_OC, NULL);
289
290 /* SGPIO1/0 (PTN, PTO) */
291 gpio_request(GPIO_FN_SGPIO1_CLK, NULL);
292 gpio_request(GPIO_FN_SGPIO1_LOAD, NULL);
293 gpio_request(GPIO_FN_SGPIO1_DI, NULL);
294 gpio_request(GPIO_FN_SGPIO1_DO, NULL);
295 gpio_request(GPIO_FN_SGPIO0_CLK, NULL);
296 gpio_request(GPIO_FN_SGPIO0_LOAD, NULL);
297 gpio_request(GPIO_FN_SGPIO0_DI, NULL);
298 gpio_request(GPIO_FN_SGPIO0_DO, NULL);
299
300 /* WDT (PTN) */
301 gpio_request(GPIO_FN_SUB_CLKIN, NULL);
302
303 /* System (PTT) */
304 gpio_request(GPIO_FN_STATUS1, NULL);
305 gpio_request(GPIO_FN_STATUS0, NULL);
306
307 /* PWMX (PTT) */
308 gpio_request(GPIO_FN_PWMX1, NULL);
309 gpio_request(GPIO_FN_PWMX0, NULL);
310
311 /* R-SPI (PTV) */
312 gpio_request(GPIO_FN_R_SPI_MOSI, NULL);
313 gpio_request(GPIO_FN_R_SPI_MISO, NULL);
314 gpio_request(GPIO_FN_R_SPI_RSPCK, NULL);
315 gpio_request(GPIO_FN_R_SPI_SSL0, NULL);
316 gpio_request(GPIO_FN_R_SPI_SSL1, NULL);
317
318 /* EVC (PTV, PTW) */
319 gpio_request(GPIO_FN_EVENT7, NULL);
320 gpio_request(GPIO_FN_EVENT6, NULL);
321 gpio_request(GPIO_FN_EVENT5, NULL);
322 gpio_request(GPIO_FN_EVENT4, NULL);
323 gpio_request(GPIO_FN_EVENT3, NULL);
324 gpio_request(GPIO_FN_EVENT2, NULL);
325 gpio_request(GPIO_FN_EVENT1, NULL);
326 gpio_request(GPIO_FN_EVENT0, NULL);
327
328 /* LED for heartbeat */
329 gpio_request(GPIO_PTU3, NULL);
330 gpio_direction_output(GPIO_PTU3, 1);
331 gpio_request(GPIO_PTU2, NULL);
332 gpio_direction_output(GPIO_PTU2, 1);
333 gpio_request(GPIO_PTU1, NULL);
334 gpio_direction_output(GPIO_PTU1, 1);
335 gpio_request(GPIO_PTU0, NULL);
336 gpio_direction_output(GPIO_PTU0, 1);
337
338 /* control for MDIO of Gigabit Ethernet */
339 gpio_request(GPIO_PTT4, NULL);
340 gpio_direction_output(GPIO_PTT4, 1);
341
342 /* control for eMMC */
343 gpio_request(GPIO_PTT7, NULL); /* eMMC_RST# */
344 gpio_direction_output(GPIO_PTT7, 0);
345 gpio_request(GPIO_PTT6, NULL); /* eMMC_INDEX# */
346 gpio_direction_output(GPIO_PTT6, 0);
347 gpio_request(GPIO_PTT5, NULL); /* eMMC_PRST# */
348 gpio_direction_output(GPIO_PTT5, 1);
349
ceb7afe2
YS
350 /* register SPI device information */
351 spi_register_board_info(spi_board_info,
352 ARRAY_SIZE(spi_board_info));
353
36239c67
YS
354 /* General platform */
355 return platform_add_devices(sh7757lcr_devices,
356 ARRAY_SIZE(sh7757lcr_devices));
357}
358arch_initcall(sh7757lcr_devices_setup);
359
360/* Initialize IRQ setting */
361void __init init_sh7757lcr_IRQ(void)
362{
363 plat_irq_setup_pins(IRQ_MODE_IRQ7654);
364 plat_irq_setup_pins(IRQ_MODE_IRQ3210);
365}
366
367/* Initialize the board */
368static void __init sh7757lcr_setup(char **cmdline_p)
369{
370 printk(KERN_INFO "Renesas R0P7757LC0012RL support.\n");
371}
372
373static int sh7757lcr_mode_pins(void)
374{
375 int value = 0;
376
377 /* These are the factory default settings of S3 (Low active).
378 * If you change these dip switches then you will need to
379 * adjust the values below as well.
380 */
381 value |= MODE_PIN0; /* Clock Mode: 1 */
382
383 return value;
384}
385
386/* The Machine Vector */
387static struct sh_machine_vector mv_sh7757lcr __initmv = {
388 .mv_name = "SH7757LCR",
389 .mv_setup = sh7757lcr_setup,
390 .mv_init_irq = init_sh7757lcr_IRQ,
391 .mv_mode_pins = sh7757lcr_mode_pins,
392};
393