xref: /linux/arch/sh/boards/mach-ecovec24/setup.c (revision f2ee442115c9b6219083c019939a9cc0c9abb2f8)
1 /*
2  * Copyright (C) 2009 Renesas Solutions Corp.
3  *
4  * Kuninori Morimoto <morimoto.kuninori@renesas.com>
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/device.h>
13 #include <linux/platform_device.h>
14 #include <linux/mmc/host.h>
15 #include <linux/mmc/sh_mmcif.h>
16 #include <linux/mmc/sh_mobile_sdhi.h>
17 #include <linux/mtd/physmap.h>
18 #include <linux/gpio.h>
19 #include <linux/interrupt.h>
20 #include <linux/io.h>
21 #include <linux/delay.h>
22 #include <linux/usb/r8a66597.h>
23 #include <linux/usb/renesas_usbhs.h>
24 #include <linux/i2c.h>
25 #include <linux/i2c/tsc2007.h>
26 #include <linux/spi/spi.h>
27 #include <linux/spi/sh_msiof.h>
28 #include <linux/spi/mmc_spi.h>
29 #include <linux/input.h>
30 #include <linux/input/sh_keysc.h>
31 #include <linux/sh_eth.h>
32 #include <video/sh_mobile_lcdc.h>
33 #include <sound/sh_fsi.h>
34 #include <media/sh_mobile_ceu.h>
35 #include <media/tw9910.h>
36 #include <media/mt9t112.h>
37 #include <asm/heartbeat.h>
38 #include <asm/clock.h>
39 #include <asm/suspend.h>
40 #include <cpu/sh7724.h>
41 
42 /*
43  *  Address      Interface        BusWidth
44  *-----------------------------------------
45  *  0x0000_0000  uboot            16bit
46  *  0x0004_0000  Linux romImage   16bit
47  *  0x0014_0000  MTD for Linux    16bit
48  *  0x0400_0000  Internal I/O     16/32bit
49  *  0x0800_0000  DRAM             32bit
50  *  0x1800_0000  MFI              16bit
51  */
52 
53 /* SWITCH
54  *------------------------------
55  * DS2[1] = FlashROM write protect  ON     : write protect
56  *                                  OFF    : No write protect
57  * DS2[2] = RMII / TS, SCIF         ON     : RMII
58  *                                  OFF    : TS, SCIF3
59  * DS2[3] = Camera / Video          ON     : Camera
60  *                                  OFF    : NTSC/PAL (IN)
61  * DS2[5] = NTSC_OUT Clock          ON     : On board OSC
62  *                                  OFF    : SH7724 DV_CLK
63  * DS2[6-7] = MMC / SD              ON-OFF : SD
64  *                                  OFF-ON : MMC
65  */
66 
67 /* Heartbeat */
68 static unsigned char led_pos[] = { 0, 1, 2, 3 };
69 
70 static struct heartbeat_data heartbeat_data = {
71 	.nr_bits = 4,
72 	.bit_pos = led_pos,
73 };
74 
75 static struct resource heartbeat_resource = {
76 	.start  = 0xA405012C, /* PTG */
77 	.end    = 0xA405012E - 1,
78 	.flags  = IORESOURCE_MEM | IORESOURCE_MEM_8BIT,
79 };
80 
81 static struct platform_device heartbeat_device = {
82 	.name           = "heartbeat",
83 	.id             = -1,
84 	.dev = {
85 		.platform_data = &heartbeat_data,
86 	},
87 	.num_resources  = 1,
88 	.resource       = &heartbeat_resource,
89 };
90 
91 /* MTD */
92 static struct mtd_partition nor_flash_partitions[] = {
93 	{
94 		.name = "boot loader",
95 		.offset = 0,
96 		.size = (5 * 1024 * 1024),
97 		.mask_flags = MTD_WRITEABLE,  /* force read-only */
98 	}, {
99 		.name = "free-area",
100 		.offset = MTDPART_OFS_APPEND,
101 		.size = MTDPART_SIZ_FULL,
102 	},
103 };
104 
105 static struct physmap_flash_data nor_flash_data = {
106 	.width		= 2,
107 	.parts		= nor_flash_partitions,
108 	.nr_parts	= ARRAY_SIZE(nor_flash_partitions),
109 };
110 
111 static struct resource nor_flash_resources[] = {
112 	[0] = {
113 		.name	= "NOR Flash",
114 		.start	= 0x00000000,
115 		.end	= 0x03ffffff,
116 		.flags	= IORESOURCE_MEM,
117 	}
118 };
119 
120 static struct platform_device nor_flash_device = {
121 	.name		= "physmap-flash",
122 	.resource	= nor_flash_resources,
123 	.num_resources	= ARRAY_SIZE(nor_flash_resources),
124 	.dev		= {
125 		.platform_data = &nor_flash_data,
126 	},
127 };
128 
129 /* SH Eth */
130 #define SH_ETH_ADDR	(0xA4600000)
131 static struct resource sh_eth_resources[] = {
132 	[0] = {
133 		.start = SH_ETH_ADDR,
134 		.end   = SH_ETH_ADDR + 0x1FC,
135 		.flags = IORESOURCE_MEM,
136 	},
137 	[1] = {
138 		.start = 91,
139 		.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
140 	},
141 };
142 
143 static struct sh_eth_plat_data sh_eth_plat = {
144 	.phy = 0x1f, /* SMSC LAN8700 */
145 	.edmac_endian = EDMAC_LITTLE_ENDIAN,
146 	.register_type = SH_ETH_REG_FAST_SH4,
147 	.phy_interface = PHY_INTERFACE_MODE_MII,
148 	.ether_link_active_low = 1
149 };
150 
151 static struct platform_device sh_eth_device = {
152 	.name = "sh-eth",
153 	.id	= 0,
154 	.dev = {
155 		.platform_data = &sh_eth_plat,
156 	},
157 	.num_resources = ARRAY_SIZE(sh_eth_resources),
158 	.resource = sh_eth_resources,
159 	.archdata = {
160 		.hwblk_id = HWBLK_ETHER,
161 	},
162 };
163 
164 /* USB0 host */
165 static void usb0_port_power(int port, int power)
166 {
167 	gpio_set_value(GPIO_PTB4, power);
168 }
169 
170 static struct r8a66597_platdata usb0_host_data = {
171 	.on_chip = 1,
172 	.port_power = usb0_port_power,
173 };
174 
175 static struct resource usb0_host_resources[] = {
176 	[0] = {
177 		.start	= 0xa4d80000,
178 		.end	= 0xa4d80124 - 1,
179 		.flags	= IORESOURCE_MEM,
180 	},
181 	[1] = {
182 		.start	= 65,
183 		.end	= 65,
184 		.flags	= IORESOURCE_IRQ | IRQF_TRIGGER_LOW,
185 	},
186 };
187 
188 static struct platform_device usb0_host_device = {
189 	.name		= "r8a66597_hcd",
190 	.id		= 0,
191 	.dev = {
192 		.dma_mask		= NULL,         /*  not use dma */
193 		.coherent_dma_mask	= 0xffffffff,
194 		.platform_data		= &usb0_host_data,
195 	},
196 	.num_resources	= ARRAY_SIZE(usb0_host_resources),
197 	.resource	= usb0_host_resources,
198 };
199 
200 /* USB1 host/function */
201 static void usb1_port_power(int port, int power)
202 {
203 	gpio_set_value(GPIO_PTB5, power);
204 }
205 
206 static struct r8a66597_platdata usb1_common_data = {
207 	.on_chip = 1,
208 	.port_power = usb1_port_power,
209 };
210 
211 static struct resource usb1_common_resources[] = {
212 	[0] = {
213 		.start	= 0xa4d90000,
214 		.end	= 0xa4d90124 - 1,
215 		.flags	= IORESOURCE_MEM,
216 	},
217 	[1] = {
218 		.start	= 66,
219 		.end	= 66,
220 		.flags	= IORESOURCE_IRQ | IRQF_TRIGGER_LOW,
221 	},
222 };
223 
224 static struct platform_device usb1_common_device = {
225 	/* .name will be added in arch_setup */
226 	.id		= 1,
227 	.dev = {
228 		.dma_mask		= NULL,         /*  not use dma */
229 		.coherent_dma_mask	= 0xffffffff,
230 		.platform_data		= &usb1_common_data,
231 	},
232 	.num_resources	= ARRAY_SIZE(usb1_common_resources),
233 	.resource	= usb1_common_resources,
234 };
235 
236 /*
237  * USBHS
238  */
239 static int usbhs_get_id(struct platform_device *pdev)
240 {
241 	return gpio_get_value(GPIO_PTB3);
242 }
243 
244 static struct renesas_usbhs_platform_info usbhs_info = {
245 	.platform_callback = {
246 		.get_id		= usbhs_get_id,
247 	},
248 	.driver_param = {
249 		.buswait_bwait		= 4,
250 		.detection_delay	= 5,
251 		.d0_tx_id = SHDMA_SLAVE_USB1D0_TX,
252 		.d0_rx_id = SHDMA_SLAVE_USB1D0_RX,
253 		.d1_tx_id = SHDMA_SLAVE_USB1D1_TX,
254 		.d1_rx_id = SHDMA_SLAVE_USB1D1_RX,
255 	},
256 };
257 
258 static struct resource usbhs_resources[] = {
259 	[0] = {
260 		.start	= 0xa4d90000,
261 		.end	= 0xa4d90124 - 1,
262 		.flags	= IORESOURCE_MEM,
263 	},
264 	[1] = {
265 		.start	= 66,
266 		.end	= 66,
267 		.flags	= IORESOURCE_IRQ,
268 	},
269 };
270 
271 static struct platform_device usbhs_device = {
272 	.name	= "renesas_usbhs",
273 	.id	= 1,
274 	.dev = {
275 		.dma_mask		= NULL,         /*  not use dma */
276 		.coherent_dma_mask	= 0xffffffff,
277 		.platform_data		= &usbhs_info,
278 	},
279 	.num_resources	= ARRAY_SIZE(usbhs_resources),
280 	.resource	= usbhs_resources,
281 	.archdata = {
282 		.hwblk_id = HWBLK_USB1,
283 	},
284 };
285 
286 /* LCDC */
287 static const struct fb_videomode ecovec_lcd_modes[] = {
288 	{
289 		.name		= "Panel",
290 		.xres		= 800,
291 		.yres		= 480,
292 		.left_margin	= 220,
293 		.right_margin	= 110,
294 		.hsync_len	= 70,
295 		.upper_margin	= 20,
296 		.lower_margin	= 5,
297 		.vsync_len	= 5,
298 		.sync		= 0, /* hsync and vsync are active low */
299 	},
300 };
301 
302 static const struct fb_videomode ecovec_dvi_modes[] = {
303 	{
304 		.name		= "DVI",
305 		.xres		= 1280,
306 		.yres		= 720,
307 		.left_margin	= 220,
308 		.right_margin	= 110,
309 		.hsync_len	= 40,
310 		.upper_margin	= 20,
311 		.lower_margin	= 5,
312 		.vsync_len	= 5,
313 		.sync = 0, /* hsync and vsync are active low */
314 	},
315 };
316 
317 static int ecovec24_set_brightness(void *board_data, int brightness)
318 {
319 	gpio_set_value(GPIO_PTR1, brightness);
320 
321 	return 0;
322 }
323 
324 static int ecovec24_get_brightness(void *board_data)
325 {
326 	return gpio_get_value(GPIO_PTR1);
327 }
328 
329 static struct sh_mobile_lcdc_info lcdc_info = {
330 	.ch[0] = {
331 		.interface_type = RGB18,
332 		.chan = LCDC_CHAN_MAINLCD,
333 		.bpp = 16,
334 		.lcd_size_cfg = { /* 7.0 inch */
335 			.width = 152,
336 			.height = 91,
337 		},
338 		.board_cfg = {
339 			.set_brightness = ecovec24_set_brightness,
340 			.get_brightness = ecovec24_get_brightness,
341 		},
342 		.bl_info = {
343 			.name = "sh_mobile_lcdc_bl",
344 			.max_brightness = 1,
345 		},
346 	}
347 };
348 
349 static struct resource lcdc_resources[] = {
350 	[0] = {
351 		.name	= "LCDC",
352 		.start	= 0xfe940000,
353 		.end	= 0xfe942fff,
354 		.flags	= IORESOURCE_MEM,
355 	},
356 	[1] = {
357 		.start	= 106,
358 		.flags	= IORESOURCE_IRQ,
359 	},
360 };
361 
362 static struct platform_device lcdc_device = {
363 	.name		= "sh_mobile_lcdc_fb",
364 	.num_resources	= ARRAY_SIZE(lcdc_resources),
365 	.resource	= lcdc_resources,
366 	.dev		= {
367 		.platform_data	= &lcdc_info,
368 	},
369 	.archdata = {
370 		.hwblk_id = HWBLK_LCDC,
371 	},
372 };
373 
374 /* CEU0 */
375 static struct sh_mobile_ceu_info sh_mobile_ceu0_info = {
376 	.flags = SH_CEU_FLAG_USE_8BIT_BUS,
377 };
378 
379 static struct resource ceu0_resources[] = {
380 	[0] = {
381 		.name	= "CEU0",
382 		.start	= 0xfe910000,
383 		.end	= 0xfe91009f,
384 		.flags	= IORESOURCE_MEM,
385 	},
386 	[1] = {
387 		.start  = 52,
388 		.flags  = IORESOURCE_IRQ,
389 	},
390 	[2] = {
391 		/* place holder for contiguous memory */
392 	},
393 };
394 
395 static struct platform_device ceu0_device = {
396 	.name		= "sh_mobile_ceu",
397 	.id             = 0, /* "ceu0" clock */
398 	.num_resources	= ARRAY_SIZE(ceu0_resources),
399 	.resource	= ceu0_resources,
400 	.dev	= {
401 		.platform_data	= &sh_mobile_ceu0_info,
402 	},
403 	.archdata = {
404 		.hwblk_id = HWBLK_CEU0,
405 	},
406 };
407 
408 /* CEU1 */
409 static struct sh_mobile_ceu_info sh_mobile_ceu1_info = {
410 	.flags = SH_CEU_FLAG_USE_8BIT_BUS,
411 };
412 
413 static struct resource ceu1_resources[] = {
414 	[0] = {
415 		.name	= "CEU1",
416 		.start	= 0xfe914000,
417 		.end	= 0xfe91409f,
418 		.flags	= IORESOURCE_MEM,
419 	},
420 	[1] = {
421 		.start  = 63,
422 		.flags  = IORESOURCE_IRQ,
423 	},
424 	[2] = {
425 		/* place holder for contiguous memory */
426 	},
427 };
428 
429 static struct platform_device ceu1_device = {
430 	.name		= "sh_mobile_ceu",
431 	.id             = 1, /* "ceu1" clock */
432 	.num_resources	= ARRAY_SIZE(ceu1_resources),
433 	.resource	= ceu1_resources,
434 	.dev	= {
435 		.platform_data	= &sh_mobile_ceu1_info,
436 	},
437 	.archdata = {
438 		.hwblk_id = HWBLK_CEU1,
439 	},
440 };
441 
442 /* I2C device */
443 static struct i2c_board_info i2c0_devices[] = {
444 	{
445 		I2C_BOARD_INFO("da7210", 0x1a),
446 	},
447 };
448 
449 static struct i2c_board_info i2c1_devices[] = {
450 	{
451 		I2C_BOARD_INFO("r2025sd", 0x32),
452 	},
453 	{
454 		I2C_BOARD_INFO("lis3lv02d", 0x1c),
455 		.irq = 33,
456 	}
457 };
458 
459 /* KEYSC */
460 static struct sh_keysc_info keysc_info = {
461 	.mode		= SH_KEYSC_MODE_1,
462 	.scan_timing	= 3,
463 	.delay		= 50,
464 	.kycr2_delay	= 100,
465 	.keycodes	= { KEY_1, 0, 0, 0, 0,
466 			    KEY_2, 0, 0, 0, 0,
467 			    KEY_3, 0, 0, 0, 0,
468 			    KEY_4, 0, 0, 0, 0,
469 			    KEY_5, 0, 0, 0, 0,
470 			    KEY_6, 0, 0, 0, 0, },
471 };
472 
473 static struct resource keysc_resources[] = {
474 	[0] = {
475 		.name	= "KEYSC",
476 		.start  = 0x044b0000,
477 		.end    = 0x044b000f,
478 		.flags  = IORESOURCE_MEM,
479 	},
480 	[1] = {
481 		.start  = 79,
482 		.flags  = IORESOURCE_IRQ,
483 	},
484 };
485 
486 static struct platform_device keysc_device = {
487 	.name           = "sh_keysc",
488 	.id             = 0, /* keysc0 clock */
489 	.num_resources  = ARRAY_SIZE(keysc_resources),
490 	.resource       = keysc_resources,
491 	.dev	= {
492 		.platform_data	= &keysc_info,
493 	},
494 	.archdata = {
495 		.hwblk_id = HWBLK_KEYSC,
496 	},
497 };
498 
499 /* TouchScreen */
500 #define IRQ0 32
501 static int ts_get_pendown_state(void)
502 {
503 	int val = 0;
504 	gpio_free(GPIO_FN_INTC_IRQ0);
505 	gpio_request(GPIO_PTZ0, NULL);
506 	gpio_direction_input(GPIO_PTZ0);
507 
508 	val = gpio_get_value(GPIO_PTZ0);
509 
510 	gpio_free(GPIO_PTZ0);
511 	gpio_request(GPIO_FN_INTC_IRQ0, NULL);
512 
513 	return val ? 0 : 1;
514 }
515 
516 static int ts_init(void)
517 {
518 	gpio_request(GPIO_FN_INTC_IRQ0, NULL);
519 	return 0;
520 }
521 
522 static struct tsc2007_platform_data tsc2007_info = {
523 	.model			= 2007,
524 	.x_plate_ohms		= 180,
525 	.get_pendown_state	= ts_get_pendown_state,
526 	.init_platform_hw	= ts_init,
527 };
528 
529 static struct i2c_board_info ts_i2c_clients = {
530 	I2C_BOARD_INFO("tsc2007", 0x48),
531 	.type		= "tsc2007",
532 	.platform_data	= &tsc2007_info,
533 	.irq		= IRQ0,
534 };
535 
536 #if defined(CONFIG_MMC_SDHI) || defined(CONFIG_MMC_SDHI_MODULE)
537 /* SDHI0 */
538 static void sdhi0_set_pwr(struct platform_device *pdev, int state)
539 {
540 	gpio_set_value(GPIO_PTB6, state);
541 }
542 
543 static struct sh_mobile_sdhi_info sdhi0_info = {
544 	.dma_slave_tx	= SHDMA_SLAVE_SDHI0_TX,
545 	.dma_slave_rx	= SHDMA_SLAVE_SDHI0_RX,
546 	.set_pwr	= sdhi0_set_pwr,
547 	.tmio_caps      = MMC_CAP_SDIO_IRQ | MMC_CAP_POWER_OFF_CARD,
548 };
549 
550 static struct resource sdhi0_resources[] = {
551 	[0] = {
552 		.name	= "SDHI0",
553 		.start  = 0x04ce0000,
554 		.end    = 0x04ce00ff,
555 		.flags  = IORESOURCE_MEM,
556 	},
557 	[1] = {
558 		.start  = 100,
559 		.flags  = IORESOURCE_IRQ,
560 	},
561 };
562 
563 static struct platform_device sdhi0_device = {
564 	.name           = "sh_mobile_sdhi",
565 	.num_resources  = ARRAY_SIZE(sdhi0_resources),
566 	.resource       = sdhi0_resources,
567 	.id             = 0,
568 	.dev	= {
569 		.platform_data	= &sdhi0_info,
570 	},
571 	.archdata = {
572 		.hwblk_id = HWBLK_SDHI0,
573 	},
574 };
575 
576 #if !defined(CONFIG_MMC_SH_MMCIF) && !defined(CONFIG_MMC_SH_MMCIF_MODULE)
577 /* SDHI1 */
578 static void sdhi1_set_pwr(struct platform_device *pdev, int state)
579 {
580 	gpio_set_value(GPIO_PTB7, state);
581 }
582 
583 static struct sh_mobile_sdhi_info sdhi1_info = {
584 	.dma_slave_tx	= SHDMA_SLAVE_SDHI1_TX,
585 	.dma_slave_rx	= SHDMA_SLAVE_SDHI1_RX,
586 	.tmio_caps      = MMC_CAP_SDIO_IRQ | MMC_CAP_POWER_OFF_CARD,
587 	.set_pwr	= sdhi1_set_pwr,
588 };
589 
590 static struct resource sdhi1_resources[] = {
591 	[0] = {
592 		.name	= "SDHI1",
593 		.start  = 0x04cf0000,
594 		.end    = 0x04cf00ff,
595 		.flags  = IORESOURCE_MEM,
596 	},
597 	[1] = {
598 		.start  = 23,
599 		.flags  = IORESOURCE_IRQ,
600 	},
601 };
602 
603 static struct platform_device sdhi1_device = {
604 	.name           = "sh_mobile_sdhi",
605 	.num_resources  = ARRAY_SIZE(sdhi1_resources),
606 	.resource       = sdhi1_resources,
607 	.id             = 1,
608 	.dev	= {
609 		.platform_data	= &sdhi1_info,
610 	},
611 	.archdata = {
612 		.hwblk_id = HWBLK_SDHI1,
613 	},
614 };
615 #endif /* CONFIG_MMC_SH_MMCIF */
616 
617 #else
618 
619 /* MMC SPI */
620 static int mmc_spi_get_ro(struct device *dev)
621 {
622 	return gpio_get_value(GPIO_PTY6);
623 }
624 
625 static int mmc_spi_get_cd(struct device *dev)
626 {
627 	return !gpio_get_value(GPIO_PTY7);
628 }
629 
630 static void mmc_spi_setpower(struct device *dev, unsigned int maskval)
631 {
632 	gpio_set_value(GPIO_PTB6, maskval ? 1 : 0);
633 }
634 
635 static struct mmc_spi_platform_data mmc_spi_info = {
636 	.get_ro = mmc_spi_get_ro,
637 	.get_cd = mmc_spi_get_cd,
638 	.caps = MMC_CAP_NEEDS_POLL,
639 	.ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, /* 3.3V only */
640 	.setpower = mmc_spi_setpower,
641 };
642 
643 static struct spi_board_info spi_bus[] = {
644 	{
645 		.modalias	= "mmc_spi",
646 		.platform_data	= &mmc_spi_info,
647 		.max_speed_hz	= 5000000,
648 		.mode		= SPI_MODE_0,
649 		.controller_data = (void *) GPIO_PTM4,
650 	},
651 };
652 
653 /* MSIOF0 */
654 static struct sh_msiof_spi_info msiof0_data = {
655 	.num_chipselect = 1,
656 };
657 
658 static struct resource msiof0_resources[] = {
659 	[0] = {
660 		.name	= "MSIOF0",
661 		.start	= 0xa4c40000,
662 		.end	= 0xa4c40063,
663 		.flags	= IORESOURCE_MEM,
664 	},
665 	[1] = {
666 		.start	= 84,
667 		.flags	= IORESOURCE_IRQ,
668 	},
669 };
670 
671 static struct platform_device msiof0_device = {
672 	.name		= "spi_sh_msiof",
673 	.id		= 0, /* MSIOF0 */
674 	.dev = {
675 		.platform_data = &msiof0_data,
676 	},
677 	.num_resources	= ARRAY_SIZE(msiof0_resources),
678 	.resource	= msiof0_resources,
679 	.archdata = {
680 		.hwblk_id = HWBLK_MSIOF0,
681 	},
682 };
683 
684 #endif
685 
686 /* I2C Video/Camera */
687 static struct i2c_board_info i2c_camera[] = {
688 	{
689 		I2C_BOARD_INFO("tw9910", 0x45),
690 	},
691 	{
692 		/* 1st camera */
693 		I2C_BOARD_INFO("mt9t112", 0x3c),
694 	},
695 	{
696 		/* 2nd camera */
697 		I2C_BOARD_INFO("mt9t112", 0x3c),
698 	},
699 };
700 
701 /* tw9910 */
702 static int tw9910_power(struct device *dev, int mode)
703 {
704 	int val = mode ? 0 : 1;
705 
706 	gpio_set_value(GPIO_PTU2, val);
707 	if (mode)
708 		mdelay(100);
709 
710 	return 0;
711 }
712 
713 static struct tw9910_video_info tw9910_info = {
714 	.buswidth	= SOCAM_DATAWIDTH_8,
715 	.mpout		= TW9910_MPO_FIELD,
716 };
717 
718 static struct soc_camera_link tw9910_link = {
719 	.i2c_adapter_id	= 0,
720 	.bus_id		= 1,
721 	.power		= tw9910_power,
722 	.board_info	= &i2c_camera[0],
723 	.priv		= &tw9910_info,
724 };
725 
726 /* mt9t112 */
727 static int mt9t112_power1(struct device *dev, int mode)
728 {
729 	gpio_set_value(GPIO_PTA3, mode);
730 	if (mode)
731 		mdelay(100);
732 
733 	return 0;
734 }
735 
736 static struct mt9t112_camera_info mt9t112_info1 = {
737 	.flags = MT9T112_FLAG_PCLK_RISING_EDGE | MT9T112_FLAG_DATAWIDTH_8,
738 	.divider = { 0x49, 0x6, 0, 6, 0, 9, 9, 6, 0 }, /* for 24MHz */
739 };
740 
741 static struct soc_camera_link mt9t112_link1 = {
742 	.i2c_adapter_id	= 0,
743 	.power		= mt9t112_power1,
744 	.bus_id		= 0,
745 	.board_info	= &i2c_camera[1],
746 	.priv		= &mt9t112_info1,
747 };
748 
749 static int mt9t112_power2(struct device *dev, int mode)
750 {
751 	gpio_set_value(GPIO_PTA4, mode);
752 	if (mode)
753 		mdelay(100);
754 
755 	return 0;
756 }
757 
758 static struct mt9t112_camera_info mt9t112_info2 = {
759 	.flags = MT9T112_FLAG_PCLK_RISING_EDGE | MT9T112_FLAG_DATAWIDTH_8,
760 	.divider = { 0x49, 0x6, 0, 6, 0, 9, 9, 6, 0 }, /* for 24MHz */
761 };
762 
763 static struct soc_camera_link mt9t112_link2 = {
764 	.i2c_adapter_id	= 1,
765 	.power		= mt9t112_power2,
766 	.bus_id		= 1,
767 	.board_info	= &i2c_camera[2],
768 	.priv		= &mt9t112_info2,
769 };
770 
771 static struct platform_device camera_devices[] = {
772 	{
773 		.name	= "soc-camera-pdrv",
774 		.id	= 0,
775 		.dev	= {
776 			.platform_data = &tw9910_link,
777 		},
778 	},
779 	{
780 		.name	= "soc-camera-pdrv",
781 		.id	= 1,
782 		.dev	= {
783 			.platform_data = &mt9t112_link1,
784 		},
785 	},
786 	{
787 		.name	= "soc-camera-pdrv",
788 		.id	= 2,
789 		.dev	= {
790 			.platform_data = &mt9t112_link2,
791 		},
792 	},
793 };
794 
795 /* FSI */
796 static struct sh_fsi_platform_info fsi_info = {
797 	.portb_flags = SH_FSI_BRS_INV,
798 };
799 
800 static struct resource fsi_resources[] = {
801 	[0] = {
802 		.name	= "FSI",
803 		.start	= 0xFE3C0000,
804 		.end	= 0xFE3C021d,
805 		.flags	= IORESOURCE_MEM,
806 	},
807 	[1] = {
808 		.start  = 108,
809 		.flags  = IORESOURCE_IRQ,
810 	},
811 };
812 
813 static struct platform_device fsi_device = {
814 	.name		= "sh_fsi",
815 	.id		= 0,
816 	.num_resources	= ARRAY_SIZE(fsi_resources),
817 	.resource	= fsi_resources,
818 	.dev	= {
819 		.platform_data	= &fsi_info,
820 	},
821 	.archdata = {
822 		.hwblk_id = HWBLK_SPU, /* FSI needs SPU hwblk */
823 	},
824 };
825 
826 /* IrDA */
827 static struct resource irda_resources[] = {
828 	[0] = {
829 		.name	= "IrDA",
830 		.start  = 0xA45D0000,
831 		.end    = 0xA45D0049,
832 		.flags  = IORESOURCE_MEM,
833 	},
834 	[1] = {
835 		.start  = 20,
836 		.flags  = IORESOURCE_IRQ,
837 	},
838 };
839 
840 static struct platform_device irda_device = {
841 	.name           = "sh_sir",
842 	.num_resources  = ARRAY_SIZE(irda_resources),
843 	.resource       = irda_resources,
844 };
845 
846 #include <media/ak881x.h>
847 #include <media/sh_vou.h>
848 
849 static struct ak881x_pdata ak881x_pdata = {
850 	.flags = AK881X_IF_MODE_SLAVE,
851 };
852 
853 static struct i2c_board_info ak8813 = {
854 	I2C_BOARD_INFO("ak8813", 0x20),
855 	.platform_data = &ak881x_pdata,
856 };
857 
858 static struct sh_vou_pdata sh_vou_pdata = {
859 	.bus_fmt	= SH_VOU_BUS_8BIT,
860 	.flags		= SH_VOU_HSYNC_LOW | SH_VOU_VSYNC_LOW,
861 	.board_info	= &ak8813,
862 	.i2c_adap	= 0,
863 };
864 
865 static struct resource sh_vou_resources[] = {
866 	[0] = {
867 		.start  = 0xfe960000,
868 		.end    = 0xfe962043,
869 		.flags  = IORESOURCE_MEM,
870 	},
871 	[1] = {
872 		.start  = 55,
873 		.flags  = IORESOURCE_IRQ,
874 	},
875 };
876 
877 static struct platform_device vou_device = {
878 	.name           = "sh-vou",
879 	.id		= -1,
880 	.num_resources  = ARRAY_SIZE(sh_vou_resources),
881 	.resource       = sh_vou_resources,
882 	.dev		= {
883 		.platform_data	= &sh_vou_pdata,
884 	},
885 	.archdata	= {
886 		.hwblk_id	= HWBLK_VOU,
887 	},
888 };
889 
890 #if defined(CONFIG_MMC_SH_MMCIF) || defined(CONFIG_MMC_SH_MMCIF_MODULE)
891 /* SH_MMCIF */
892 static void mmcif_set_pwr(struct platform_device *pdev, int state)
893 {
894 	gpio_set_value(GPIO_PTB7, state);
895 }
896 
897 static void mmcif_down_pwr(struct platform_device *pdev)
898 {
899 	gpio_set_value(GPIO_PTB7, 0);
900 }
901 
902 static struct resource sh_mmcif_resources[] = {
903 	[0] = {
904 		.name	= "SH_MMCIF",
905 		.start	= 0xA4CA0000,
906 		.end	= 0xA4CA00FF,
907 		.flags	= IORESOURCE_MEM,
908 	},
909 	[1] = {
910 		/* MMC2I */
911 		.start	= 29,
912 		.flags	= IORESOURCE_IRQ,
913 	},
914 	[2] = {
915 		/* MMC3I */
916 		.start	= 30,
917 		.flags	= IORESOURCE_IRQ,
918 	},
919 };
920 
921 static struct sh_mmcif_plat_data sh_mmcif_plat = {
922 	.set_pwr	= mmcif_set_pwr,
923 	.down_pwr	= mmcif_down_pwr,
924 	.sup_pclk	= 0, /* SH7724: Max Pclk/2 */
925 	.caps		= MMC_CAP_4_BIT_DATA |
926 			  MMC_CAP_8_BIT_DATA |
927 			  MMC_CAP_NEEDS_POLL,
928 	.ocr		= MMC_VDD_32_33 | MMC_VDD_33_34,
929 };
930 
931 static struct platform_device sh_mmcif_device = {
932 	.name		= "sh_mmcif",
933 	.id		= 0,
934 	.dev		= {
935 		.platform_data		= &sh_mmcif_plat,
936 	},
937 	.num_resources	= ARRAY_SIZE(sh_mmcif_resources),
938 	.resource	= sh_mmcif_resources,
939 	.archdata = {
940 		.hwblk_id = HWBLK_MMC,
941 	},
942 };
943 #endif
944 
945 static struct platform_device *ecovec_devices[] __initdata = {
946 	&heartbeat_device,
947 	&nor_flash_device,
948 	&sh_eth_device,
949 	&usb0_host_device,
950 	&usb1_common_device,
951 	&usbhs_device,
952 	&lcdc_device,
953 	&ceu0_device,
954 	&ceu1_device,
955 	&keysc_device,
956 #if defined(CONFIG_MMC_SDHI) || defined(CONFIG_MMC_SDHI_MODULE)
957 	&sdhi0_device,
958 #if !defined(CONFIG_MMC_SH_MMCIF) && !defined(CONFIG_MMC_SH_MMCIF_MODULE)
959 	&sdhi1_device,
960 #endif
961 #else
962 	&msiof0_device,
963 #endif
964 	&camera_devices[0],
965 	&camera_devices[1],
966 	&camera_devices[2],
967 	&fsi_device,
968 	&irda_device,
969 	&vou_device,
970 #if defined(CONFIG_MMC_SH_MMCIF) || defined(CONFIG_MMC_SH_MMCIF_MODULE)
971 	&sh_mmcif_device,
972 #endif
973 };
974 
975 #ifdef CONFIG_I2C
976 #define EEPROM_ADDR 0x50
977 static u8 mac_read(struct i2c_adapter *a, u8 command)
978 {
979 	struct i2c_msg msg[2];
980 	u8 buf;
981 	int ret;
982 
983 	msg[0].addr  = EEPROM_ADDR;
984 	msg[0].flags = 0;
985 	msg[0].len   = 1;
986 	msg[0].buf   = &command;
987 
988 	msg[1].addr  = EEPROM_ADDR;
989 	msg[1].flags = I2C_M_RD;
990 	msg[1].len   = 1;
991 	msg[1].buf   = &buf;
992 
993 	ret = i2c_transfer(a, msg, 2);
994 	if (ret < 0) {
995 		printk(KERN_ERR "error %d\n", ret);
996 		buf = 0xff;
997 	}
998 
999 	return buf;
1000 }
1001 
1002 static void __init sh_eth_init(struct sh_eth_plat_data *pd)
1003 {
1004 	struct i2c_adapter *a = i2c_get_adapter(1);
1005 	int i;
1006 
1007 	if (!a) {
1008 		pr_err("can not get I2C 1\n");
1009 		return;
1010 	}
1011 
1012 	/* read MAC address from EEPROM */
1013 	for (i = 0; i < sizeof(pd->mac_addr); i++) {
1014 		pd->mac_addr[i] = mac_read(a, 0x10 + i);
1015 		msleep(10);
1016 	}
1017 
1018 	i2c_put_adapter(a);
1019 }
1020 #else
1021 static void __init sh_eth_init(struct sh_eth_plat_data *pd)
1022 {
1023 	pr_err("unable to read sh_eth MAC address\n");
1024 }
1025 #endif
1026 
1027 #define PORT_HIZA 0xA4050158
1028 #define IODRIVEA  0xA405018A
1029 
1030 extern char ecovec24_sdram_enter_start;
1031 extern char ecovec24_sdram_enter_end;
1032 extern char ecovec24_sdram_leave_start;
1033 extern char ecovec24_sdram_leave_end;
1034 
1035 static int __init arch_setup(void)
1036 {
1037 	struct clk *clk;
1038 
1039 	/* register board specific self-refresh code */
1040 	sh_mobile_register_self_refresh(SUSP_SH_STANDBY | SUSP_SH_SF |
1041 					SUSP_SH_RSTANDBY,
1042 					&ecovec24_sdram_enter_start,
1043 					&ecovec24_sdram_enter_end,
1044 					&ecovec24_sdram_leave_start,
1045 					&ecovec24_sdram_leave_end);
1046 
1047 	/* enable STATUS0, STATUS2 and PDSTATUS */
1048 	gpio_request(GPIO_FN_STATUS0, NULL);
1049 	gpio_request(GPIO_FN_STATUS2, NULL);
1050 	gpio_request(GPIO_FN_PDSTATUS, NULL);
1051 
1052 	/* enable SCIFA0 */
1053 	gpio_request(GPIO_FN_SCIF0_TXD, NULL);
1054 	gpio_request(GPIO_FN_SCIF0_RXD, NULL);
1055 
1056 	/* enable debug LED */
1057 	gpio_request(GPIO_PTG0, NULL);
1058 	gpio_request(GPIO_PTG1, NULL);
1059 	gpio_request(GPIO_PTG2, NULL);
1060 	gpio_request(GPIO_PTG3, NULL);
1061 	gpio_direction_output(GPIO_PTG0, 0);
1062 	gpio_direction_output(GPIO_PTG1, 0);
1063 	gpio_direction_output(GPIO_PTG2, 0);
1064 	gpio_direction_output(GPIO_PTG3, 0);
1065 	__raw_writew((__raw_readw(PORT_HIZA) & ~(0x1 << 1)) , PORT_HIZA);
1066 
1067 	/* enable SH-Eth */
1068 	gpio_request(GPIO_PTA1, NULL);
1069 	gpio_direction_output(GPIO_PTA1, 1);
1070 	mdelay(20);
1071 
1072 	gpio_request(GPIO_FN_RMII_RXD0,    NULL);
1073 	gpio_request(GPIO_FN_RMII_RXD1,    NULL);
1074 	gpio_request(GPIO_FN_RMII_TXD0,    NULL);
1075 	gpio_request(GPIO_FN_RMII_TXD1,    NULL);
1076 	gpio_request(GPIO_FN_RMII_REF_CLK, NULL);
1077 	gpio_request(GPIO_FN_RMII_TX_EN,   NULL);
1078 	gpio_request(GPIO_FN_RMII_RX_ER,   NULL);
1079 	gpio_request(GPIO_FN_RMII_CRS_DV,  NULL);
1080 	gpio_request(GPIO_FN_MDIO,         NULL);
1081 	gpio_request(GPIO_FN_MDC,          NULL);
1082 	gpio_request(GPIO_FN_LNKSTA,       NULL);
1083 
1084 	/* enable USB */
1085 	__raw_writew(0x0000, 0xA4D80000);
1086 	__raw_writew(0x0000, 0xA4D90000);
1087 	gpio_request(GPIO_PTB3,  NULL);
1088 	gpio_request(GPIO_PTB4,  NULL);
1089 	gpio_request(GPIO_PTB5,  NULL);
1090 	gpio_direction_input(GPIO_PTB3);
1091 	gpio_direction_output(GPIO_PTB4, 0);
1092 	gpio_direction_output(GPIO_PTB5, 0);
1093 	__raw_writew(0x0600, 0xa40501d4);
1094 	__raw_writew(0x0600, 0xa4050192);
1095 
1096 	if (gpio_get_value(GPIO_PTB3)) {
1097 		printk(KERN_INFO "USB1 function is selected\n");
1098 		usb1_common_device.name = "r8a66597_udc";
1099 	} else {
1100 		printk(KERN_INFO "USB1 host is selected\n");
1101 		usb1_common_device.name = "r8a66597_hcd";
1102 	}
1103 
1104 	/* enable LCDC */
1105 	gpio_request(GPIO_FN_LCDD23,   NULL);
1106 	gpio_request(GPIO_FN_LCDD22,   NULL);
1107 	gpio_request(GPIO_FN_LCDD21,   NULL);
1108 	gpio_request(GPIO_FN_LCDD20,   NULL);
1109 	gpio_request(GPIO_FN_LCDD19,   NULL);
1110 	gpio_request(GPIO_FN_LCDD18,   NULL);
1111 	gpio_request(GPIO_FN_LCDD17,   NULL);
1112 	gpio_request(GPIO_FN_LCDD16,   NULL);
1113 	gpio_request(GPIO_FN_LCDD15,   NULL);
1114 	gpio_request(GPIO_FN_LCDD14,   NULL);
1115 	gpio_request(GPIO_FN_LCDD13,   NULL);
1116 	gpio_request(GPIO_FN_LCDD12,   NULL);
1117 	gpio_request(GPIO_FN_LCDD11,   NULL);
1118 	gpio_request(GPIO_FN_LCDD10,   NULL);
1119 	gpio_request(GPIO_FN_LCDD9,    NULL);
1120 	gpio_request(GPIO_FN_LCDD8,    NULL);
1121 	gpio_request(GPIO_FN_LCDD7,    NULL);
1122 	gpio_request(GPIO_FN_LCDD6,    NULL);
1123 	gpio_request(GPIO_FN_LCDD5,    NULL);
1124 	gpio_request(GPIO_FN_LCDD4,    NULL);
1125 	gpio_request(GPIO_FN_LCDD3,    NULL);
1126 	gpio_request(GPIO_FN_LCDD2,    NULL);
1127 	gpio_request(GPIO_FN_LCDD1,    NULL);
1128 	gpio_request(GPIO_FN_LCDD0,    NULL);
1129 	gpio_request(GPIO_FN_LCDDISP,  NULL);
1130 	gpio_request(GPIO_FN_LCDHSYN,  NULL);
1131 	gpio_request(GPIO_FN_LCDDCK,   NULL);
1132 	gpio_request(GPIO_FN_LCDVSYN,  NULL);
1133 	gpio_request(GPIO_FN_LCDDON,   NULL);
1134 	gpio_request(GPIO_FN_LCDLCLK,  NULL);
1135 	__raw_writew((__raw_readw(PORT_HIZA) & ~0x0001), PORT_HIZA);
1136 
1137 	gpio_request(GPIO_PTE6, NULL);
1138 	gpio_request(GPIO_PTU1, NULL);
1139 	gpio_request(GPIO_PTR1, NULL);
1140 	gpio_request(GPIO_PTA2, NULL);
1141 	gpio_direction_input(GPIO_PTE6);
1142 	gpio_direction_output(GPIO_PTU1, 0);
1143 	gpio_direction_output(GPIO_PTR1, 0);
1144 	gpio_direction_output(GPIO_PTA2, 0);
1145 
1146 	/* I/O buffer drive ability is high */
1147 	__raw_writew((__raw_readw(IODRIVEA) & ~0x00c0) | 0x0080 , IODRIVEA);
1148 
1149 	if (gpio_get_value(GPIO_PTE6)) {
1150 		/* DVI */
1151 		lcdc_info.clock_source			= LCDC_CLK_EXTERNAL;
1152 		lcdc_info.ch[0].clock_divider		= 1;
1153 		lcdc_info.ch[0].lcd_cfg			= ecovec_dvi_modes;
1154 		lcdc_info.ch[0].num_cfg			= ARRAY_SIZE(ecovec_dvi_modes);
1155 
1156 		gpio_set_value(GPIO_PTA2, 1);
1157 		gpio_set_value(GPIO_PTU1, 1);
1158 	} else {
1159 		/* Panel */
1160 		lcdc_info.clock_source			= LCDC_CLK_PERIPHERAL;
1161 		lcdc_info.ch[0].clock_divider		= 2;
1162 		lcdc_info.ch[0].lcd_cfg			= ecovec_lcd_modes;
1163 		lcdc_info.ch[0].num_cfg			= ARRAY_SIZE(ecovec_lcd_modes);
1164 
1165 		gpio_set_value(GPIO_PTR1, 1);
1166 
1167 		/* FIXME
1168 		 *
1169 		 * LCDDON control is needed for Panel,
1170 		 * but current sh_mobile_lcdc driver doesn't control it.
1171 		 * It is temporary correspondence
1172 		 */
1173 		gpio_request(GPIO_PTF4, NULL);
1174 		gpio_direction_output(GPIO_PTF4, 1);
1175 
1176 		/* enable TouchScreen */
1177 		i2c_register_board_info(0, &ts_i2c_clients, 1);
1178 		irq_set_irq_type(IRQ0, IRQ_TYPE_LEVEL_LOW);
1179 	}
1180 
1181 	/* enable CEU0 */
1182 	gpio_request(GPIO_FN_VIO0_D15, NULL);
1183 	gpio_request(GPIO_FN_VIO0_D14, NULL);
1184 	gpio_request(GPIO_FN_VIO0_D13, NULL);
1185 	gpio_request(GPIO_FN_VIO0_D12, NULL);
1186 	gpio_request(GPIO_FN_VIO0_D11, NULL);
1187 	gpio_request(GPIO_FN_VIO0_D10, NULL);
1188 	gpio_request(GPIO_FN_VIO0_D9,  NULL);
1189 	gpio_request(GPIO_FN_VIO0_D8,  NULL);
1190 	gpio_request(GPIO_FN_VIO0_D7,  NULL);
1191 	gpio_request(GPIO_FN_VIO0_D6,  NULL);
1192 	gpio_request(GPIO_FN_VIO0_D5,  NULL);
1193 	gpio_request(GPIO_FN_VIO0_D4,  NULL);
1194 	gpio_request(GPIO_FN_VIO0_D3,  NULL);
1195 	gpio_request(GPIO_FN_VIO0_D2,  NULL);
1196 	gpio_request(GPIO_FN_VIO0_D1,  NULL);
1197 	gpio_request(GPIO_FN_VIO0_D0,  NULL);
1198 	gpio_request(GPIO_FN_VIO0_VD,  NULL);
1199 	gpio_request(GPIO_FN_VIO0_CLK, NULL);
1200 	gpio_request(GPIO_FN_VIO0_FLD, NULL);
1201 	gpio_request(GPIO_FN_VIO0_HD,  NULL);
1202 	platform_resource_setup_memory(&ceu0_device, "ceu0", 4 << 20);
1203 
1204 	/* enable CEU1 */
1205 	gpio_request(GPIO_FN_VIO1_D7,  NULL);
1206 	gpio_request(GPIO_FN_VIO1_D6,  NULL);
1207 	gpio_request(GPIO_FN_VIO1_D5,  NULL);
1208 	gpio_request(GPIO_FN_VIO1_D4,  NULL);
1209 	gpio_request(GPIO_FN_VIO1_D3,  NULL);
1210 	gpio_request(GPIO_FN_VIO1_D2,  NULL);
1211 	gpio_request(GPIO_FN_VIO1_D1,  NULL);
1212 	gpio_request(GPIO_FN_VIO1_D0,  NULL);
1213 	gpio_request(GPIO_FN_VIO1_FLD, NULL);
1214 	gpio_request(GPIO_FN_VIO1_HD,  NULL);
1215 	gpio_request(GPIO_FN_VIO1_VD,  NULL);
1216 	gpio_request(GPIO_FN_VIO1_CLK, NULL);
1217 	platform_resource_setup_memory(&ceu1_device, "ceu1", 4 << 20);
1218 
1219 	/* enable KEYSC */
1220 	gpio_request(GPIO_FN_KEYOUT5_IN5, NULL);
1221 	gpio_request(GPIO_FN_KEYOUT4_IN6, NULL);
1222 	gpio_request(GPIO_FN_KEYOUT3,     NULL);
1223 	gpio_request(GPIO_FN_KEYOUT2,     NULL);
1224 	gpio_request(GPIO_FN_KEYOUT1,     NULL);
1225 	gpio_request(GPIO_FN_KEYOUT0,     NULL);
1226 	gpio_request(GPIO_FN_KEYIN0,      NULL);
1227 
1228 	/* enable user debug switch */
1229 	gpio_request(GPIO_PTR0, NULL);
1230 	gpio_request(GPIO_PTR4, NULL);
1231 	gpio_request(GPIO_PTR5, NULL);
1232 	gpio_request(GPIO_PTR6, NULL);
1233 	gpio_direction_input(GPIO_PTR0);
1234 	gpio_direction_input(GPIO_PTR4);
1235 	gpio_direction_input(GPIO_PTR5);
1236 	gpio_direction_input(GPIO_PTR6);
1237 
1238 #if defined(CONFIG_MMC_SDHI) || defined(CONFIG_MMC_SDHI_MODULE)
1239 	/* enable SDHI0 on CN11 (needs DS2.4 set to ON) */
1240 	gpio_request(GPIO_FN_SDHI0CD,  NULL);
1241 	gpio_request(GPIO_FN_SDHI0WP,  NULL);
1242 	gpio_request(GPIO_FN_SDHI0CMD, NULL);
1243 	gpio_request(GPIO_FN_SDHI0CLK, NULL);
1244 	gpio_request(GPIO_FN_SDHI0D3,  NULL);
1245 	gpio_request(GPIO_FN_SDHI0D2,  NULL);
1246 	gpio_request(GPIO_FN_SDHI0D1,  NULL);
1247 	gpio_request(GPIO_FN_SDHI0D0,  NULL);
1248 	gpio_request(GPIO_PTB6, NULL);
1249 	gpio_direction_output(GPIO_PTB6, 0);
1250 
1251 #if !defined(CONFIG_MMC_SH_MMCIF) && !defined(CONFIG_MMC_SH_MMCIF_MODULE)
1252 	/* enable SDHI1 on CN12 (needs DS2.6,7 set to ON,OFF) */
1253 	gpio_request(GPIO_FN_SDHI1CD,  NULL);
1254 	gpio_request(GPIO_FN_SDHI1WP,  NULL);
1255 	gpio_request(GPIO_FN_SDHI1CMD, NULL);
1256 	gpio_request(GPIO_FN_SDHI1CLK, NULL);
1257 	gpio_request(GPIO_FN_SDHI1D3,  NULL);
1258 	gpio_request(GPIO_FN_SDHI1D2,  NULL);
1259 	gpio_request(GPIO_FN_SDHI1D1,  NULL);
1260 	gpio_request(GPIO_FN_SDHI1D0,  NULL);
1261 	gpio_request(GPIO_PTB7, NULL);
1262 	gpio_direction_output(GPIO_PTB7, 0);
1263 
1264 	/* I/O buffer drive ability is high for SDHI1 */
1265 	__raw_writew((__raw_readw(IODRIVEA) & ~0x3000) | 0x2000 , IODRIVEA);
1266 #endif /* CONFIG_MMC_SH_MMCIF */
1267 #else
1268 	/* enable MSIOF0 on CN11 (needs DS2.4 set to OFF) */
1269 	gpio_request(GPIO_FN_MSIOF0_TXD, NULL);
1270 	gpio_request(GPIO_FN_MSIOF0_RXD, NULL);
1271 	gpio_request(GPIO_FN_MSIOF0_TSCK, NULL);
1272 	gpio_request(GPIO_PTM4, NULL); /* software CS control of TSYNC pin */
1273 	gpio_direction_output(GPIO_PTM4, 1); /* active low CS */
1274 	gpio_request(GPIO_PTB6, NULL); /* 3.3V power control */
1275 	gpio_direction_output(GPIO_PTB6, 0); /* disable power by default */
1276 	gpio_request(GPIO_PTY6, NULL); /* write protect */
1277 	gpio_direction_input(GPIO_PTY6);
1278 	gpio_request(GPIO_PTY7, NULL); /* card detect */
1279 	gpio_direction_input(GPIO_PTY7);
1280 
1281 	spi_register_board_info(spi_bus, ARRAY_SIZE(spi_bus));
1282 #endif
1283 
1284 	/* enable Video */
1285 	gpio_request(GPIO_PTU2, NULL);
1286 	gpio_direction_output(GPIO_PTU2, 1);
1287 
1288 	/* enable Camera */
1289 	gpio_request(GPIO_PTA3, NULL);
1290 	gpio_request(GPIO_PTA4, NULL);
1291 	gpio_direction_output(GPIO_PTA3, 0);
1292 	gpio_direction_output(GPIO_PTA4, 0);
1293 
1294 	/* enable FSI */
1295 	gpio_request(GPIO_FN_FSIMCKB,    NULL);
1296 	gpio_request(GPIO_FN_FSIIBSD,    NULL);
1297 	gpio_request(GPIO_FN_FSIOBSD,    NULL);
1298 	gpio_request(GPIO_FN_FSIIBBCK,   NULL);
1299 	gpio_request(GPIO_FN_FSIIBLRCK,  NULL);
1300 	gpio_request(GPIO_FN_FSIOBBCK,   NULL);
1301 	gpio_request(GPIO_FN_FSIOBLRCK,  NULL);
1302 	gpio_request(GPIO_FN_CLKAUDIOBO, NULL);
1303 
1304 	/* set SPU2 clock to 83.4 MHz */
1305 	clk = clk_get(NULL, "spu_clk");
1306 	if (!IS_ERR(clk)) {
1307 		clk_set_rate(clk, clk_round_rate(clk, 83333333));
1308 		clk_put(clk);
1309 	}
1310 
1311 	/* change parent of FSI B */
1312 	clk = clk_get(NULL, "fsib_clk");
1313 	if (!IS_ERR(clk)) {
1314 		/* 48kHz dummy clock was used to make sure 1/1 divide */
1315 		clk_set_rate(&sh7724_fsimckb_clk, 48000);
1316 		clk_set_parent(clk, &sh7724_fsimckb_clk);
1317 		clk_set_rate(clk, 48000);
1318 		clk_put(clk);
1319 	}
1320 
1321 	gpio_request(GPIO_PTU0, NULL);
1322 	gpio_direction_output(GPIO_PTU0, 0);
1323 	mdelay(20);
1324 
1325 	/* enable motion sensor */
1326 	gpio_request(GPIO_FN_INTC_IRQ1, NULL);
1327 	gpio_direction_input(GPIO_FN_INTC_IRQ1);
1328 
1329 	/* set VPU clock to 166 MHz */
1330 	clk = clk_get(NULL, "vpu_clk");
1331 	if (!IS_ERR(clk)) {
1332 		clk_set_rate(clk, clk_round_rate(clk, 166000000));
1333 		clk_put(clk);
1334 	}
1335 
1336 	/* enable IrDA */
1337 	gpio_request(GPIO_FN_IRDA_OUT, NULL);
1338 	gpio_request(GPIO_FN_IRDA_IN,  NULL);
1339 	gpio_request(GPIO_PTU5, NULL);
1340 	gpio_direction_output(GPIO_PTU5, 0);
1341 
1342 #if defined(CONFIG_MMC_SH_MMCIF) || defined(CONFIG_MMC_SH_MMCIF_MODULE)
1343 	/* enable MMCIF (needs DS2.6,7 set to OFF,ON) */
1344 	gpio_request(GPIO_FN_MMC_D7, NULL);
1345 	gpio_request(GPIO_FN_MMC_D6, NULL);
1346 	gpio_request(GPIO_FN_MMC_D5, NULL);
1347 	gpio_request(GPIO_FN_MMC_D4, NULL);
1348 	gpio_request(GPIO_FN_MMC_D3, NULL);
1349 	gpio_request(GPIO_FN_MMC_D2, NULL);
1350 	gpio_request(GPIO_FN_MMC_D1, NULL);
1351 	gpio_request(GPIO_FN_MMC_D0, NULL);
1352 	gpio_request(GPIO_FN_MMC_CLK, NULL);
1353 	gpio_request(GPIO_FN_MMC_CMD, NULL);
1354 	gpio_request(GPIO_PTB7, NULL);
1355 	gpio_direction_output(GPIO_PTB7, 0);
1356 
1357 	/* I/O buffer drive ability is high for MMCIF */
1358 	__raw_writew((__raw_readw(IODRIVEA) & ~0x3000) | 0x2000 , IODRIVEA);
1359 #endif
1360 
1361 	/* enable I2C device */
1362 	i2c_register_board_info(0, i2c0_devices,
1363 				ARRAY_SIZE(i2c0_devices));
1364 
1365 	i2c_register_board_info(1, i2c1_devices,
1366 				ARRAY_SIZE(i2c1_devices));
1367 
1368 #if defined(CONFIG_VIDEO_SH_VOU) || defined(CONFIG_VIDEO_SH_VOU_MODULE)
1369 	/* VOU */
1370 	gpio_request(GPIO_FN_DV_D15, NULL);
1371 	gpio_request(GPIO_FN_DV_D14, NULL);
1372 	gpio_request(GPIO_FN_DV_D13, NULL);
1373 	gpio_request(GPIO_FN_DV_D12, NULL);
1374 	gpio_request(GPIO_FN_DV_D11, NULL);
1375 	gpio_request(GPIO_FN_DV_D10, NULL);
1376 	gpio_request(GPIO_FN_DV_D9, NULL);
1377 	gpio_request(GPIO_FN_DV_D8, NULL);
1378 	gpio_request(GPIO_FN_DV_CLKI, NULL);
1379 	gpio_request(GPIO_FN_DV_CLK, NULL);
1380 	gpio_request(GPIO_FN_DV_VSYNC, NULL);
1381 	gpio_request(GPIO_FN_DV_HSYNC, NULL);
1382 
1383 	/* AK8813 power / reset sequence */
1384 	gpio_request(GPIO_PTG4, NULL);
1385 	gpio_request(GPIO_PTU3, NULL);
1386 	/* Reset */
1387 	gpio_direction_output(GPIO_PTG4, 0);
1388 	/* Power down */
1389 	gpio_direction_output(GPIO_PTU3, 1);
1390 
1391 	udelay(10);
1392 
1393 	/* Power up, reset */
1394 	gpio_set_value(GPIO_PTU3, 0);
1395 
1396 	udelay(10);
1397 
1398 	/* Remove reset */
1399 	gpio_set_value(GPIO_PTG4, 1);
1400 #endif
1401 
1402 	return platform_add_devices(ecovec_devices,
1403 				    ARRAY_SIZE(ecovec_devices));
1404 }
1405 arch_initcall(arch_setup);
1406 
1407 static int __init devices_setup(void)
1408 {
1409 	sh_eth_init(&sh_eth_plat);
1410 	return 0;
1411 }
1412 device_initcall(devices_setup);
1413 
1414 static struct sh_machine_vector mv_ecovec __initmv = {
1415 	.mv_name	= "R0P7724 (EcoVec)",
1416 };
1417