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