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