14138b740SKuninori Morimoto /* 24138b740SKuninori Morimoto * Copyright (C) 2009 Renesas Solutions Corp. 34138b740SKuninori Morimoto * 44138b740SKuninori Morimoto * Kuninori Morimoto <morimoto.kuninori@renesas.com> 54138b740SKuninori Morimoto * 64138b740SKuninori Morimoto * This file is subject to the terms and conditions of the GNU General Public 74138b740SKuninori Morimoto * License. See the file "COPYING" in the main directory of this archive 84138b740SKuninori Morimoto * for more details. 94138b740SKuninori Morimoto */ 104138b740SKuninori Morimoto 114138b740SKuninori Morimoto #include <linux/init.h> 124138b740SKuninori Morimoto #include <linux/device.h> 134138b740SKuninori Morimoto #include <linux/platform_device.h> 144138b740SKuninori Morimoto #include <linux/mtd/physmap.h> 154138b740SKuninori Morimoto #include <linux/gpio.h> 164138b740SKuninori Morimoto #include <linux/interrupt.h> 1735a35408SKuninori Morimoto #include <linux/io.h> 1835a35408SKuninori Morimoto #include <linux/delay.h> 19907050a3SKuninori Morimoto #include <linux/usb/r8a66597.h> 20*fa3ba51bSKuninori Morimoto #include <video/sh_mobile_lcdc.h> 214138b740SKuninori Morimoto #include <asm/heartbeat.h> 2235a35408SKuninori Morimoto #include <asm/sh_eth.h> 234138b740SKuninori Morimoto #include <cpu/sh7724.h> 244138b740SKuninori Morimoto 254138b740SKuninori Morimoto /* 26b7056bc1SKuninori Morimoto * Address Interface BusWidth 27b7056bc1SKuninori Morimoto *----------------------------------------- 28b7056bc1SKuninori Morimoto * 0x0000_0000 uboot 16bit 29b7056bc1SKuninori Morimoto * 0x0004_0000 Linux romImage 16bit 30b7056bc1SKuninori Morimoto * 0x0014_0000 MTD for Linux 16bit 31b7056bc1SKuninori Morimoto * 0x0400_0000 Internal I/O 16/32bit 32b7056bc1SKuninori Morimoto * 0x0800_0000 DRAM 32bit 33b7056bc1SKuninori Morimoto * 0x1800_0000 MFI 16bit 344138b740SKuninori Morimoto */ 354138b740SKuninori Morimoto 364138b740SKuninori Morimoto /* Heartbeat */ 374138b740SKuninori Morimoto static unsigned char led_pos[] = { 0, 1, 2, 3 }; 384138b740SKuninori Morimoto static struct heartbeat_data heartbeat_data = { 394138b740SKuninori Morimoto .regsize = 8, 404138b740SKuninori Morimoto .nr_bits = 4, 414138b740SKuninori Morimoto .bit_pos = led_pos, 424138b740SKuninori Morimoto }; 434138b740SKuninori Morimoto 444138b740SKuninori Morimoto static struct resource heartbeat_resources[] = { 454138b740SKuninori Morimoto [0] = { 464138b740SKuninori Morimoto .start = 0xA405012C, /* PTG */ 474138b740SKuninori Morimoto .end = 0xA405012E - 1, 484138b740SKuninori Morimoto .flags = IORESOURCE_MEM, 494138b740SKuninori Morimoto }, 504138b740SKuninori Morimoto }; 514138b740SKuninori Morimoto 524138b740SKuninori Morimoto static struct platform_device heartbeat_device = { 534138b740SKuninori Morimoto .name = "heartbeat", 544138b740SKuninori Morimoto .id = -1, 554138b740SKuninori Morimoto .dev = { 564138b740SKuninori Morimoto .platform_data = &heartbeat_data, 574138b740SKuninori Morimoto }, 584138b740SKuninori Morimoto .num_resources = ARRAY_SIZE(heartbeat_resources), 594138b740SKuninori Morimoto .resource = heartbeat_resources, 604138b740SKuninori Morimoto }; 614138b740SKuninori Morimoto 624138b740SKuninori Morimoto /* MTD */ 634138b740SKuninori Morimoto static struct mtd_partition nor_flash_partitions[] = { 644138b740SKuninori Morimoto { 65b7056bc1SKuninori Morimoto .name = "boot loader", 664138b740SKuninori Morimoto .offset = 0, 67b7056bc1SKuninori Morimoto .size = (5 * 1024 * 1024), 684138b740SKuninori Morimoto .mask_flags = MTD_CAP_ROM, 694138b740SKuninori Morimoto }, { 704138b740SKuninori Morimoto .name = "free-area", 714138b740SKuninori Morimoto .offset = MTDPART_OFS_APPEND, 724138b740SKuninori Morimoto .size = MTDPART_SIZ_FULL, 734138b740SKuninori Morimoto }, 744138b740SKuninori Morimoto }; 754138b740SKuninori Morimoto 764138b740SKuninori Morimoto static struct physmap_flash_data nor_flash_data = { 774138b740SKuninori Morimoto .width = 2, 784138b740SKuninori Morimoto .parts = nor_flash_partitions, 794138b740SKuninori Morimoto .nr_parts = ARRAY_SIZE(nor_flash_partitions), 804138b740SKuninori Morimoto }; 814138b740SKuninori Morimoto 824138b740SKuninori Morimoto static struct resource nor_flash_resources[] = { 834138b740SKuninori Morimoto [0] = { 844138b740SKuninori Morimoto .name = "NOR Flash", 854138b740SKuninori Morimoto .start = 0x00000000, 864138b740SKuninori Morimoto .end = 0x03ffffff, 874138b740SKuninori Morimoto .flags = IORESOURCE_MEM, 884138b740SKuninori Morimoto } 894138b740SKuninori Morimoto }; 904138b740SKuninori Morimoto 914138b740SKuninori Morimoto static struct platform_device nor_flash_device = { 924138b740SKuninori Morimoto .name = "physmap-flash", 934138b740SKuninori Morimoto .resource = nor_flash_resources, 944138b740SKuninori Morimoto .num_resources = ARRAY_SIZE(nor_flash_resources), 954138b740SKuninori Morimoto .dev = { 964138b740SKuninori Morimoto .platform_data = &nor_flash_data, 974138b740SKuninori Morimoto }, 984138b740SKuninori Morimoto }; 994138b740SKuninori Morimoto 10035a35408SKuninori Morimoto /* SH Eth */ 10135a35408SKuninori Morimoto #define SH_ETH_ADDR (0xA4600000) 10235a35408SKuninori Morimoto #define SH_ETH_MAHR (SH_ETH_ADDR + 0x1C0) 10335a35408SKuninori Morimoto #define SH_ETH_MALR (SH_ETH_ADDR + 0x1C8) 10435a35408SKuninori Morimoto static struct resource sh_eth_resources[] = { 10535a35408SKuninori Morimoto [0] = { 10635a35408SKuninori Morimoto .start = SH_ETH_ADDR, 10735a35408SKuninori Morimoto .end = SH_ETH_ADDR + 0x1FC, 10835a35408SKuninori Morimoto .flags = IORESOURCE_MEM, 10935a35408SKuninori Morimoto }, 11035a35408SKuninori Morimoto [1] = { 11135a35408SKuninori Morimoto .start = 91, 11235a35408SKuninori Morimoto .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL, 11335a35408SKuninori Morimoto }, 11435a35408SKuninori Morimoto }; 11535a35408SKuninori Morimoto 11635a35408SKuninori Morimoto struct sh_eth_plat_data sh_eth_plat = { 11735a35408SKuninori Morimoto .phy = 0x1f, /* SMSC LAN8700 */ 11835a35408SKuninori Morimoto .edmac_endian = EDMAC_LITTLE_ENDIAN, 11935a35408SKuninori Morimoto }; 12035a35408SKuninori Morimoto 12135a35408SKuninori Morimoto static struct platform_device sh_eth_device = { 12235a35408SKuninori Morimoto .name = "sh-eth", 12335a35408SKuninori Morimoto .id = 0, 12435a35408SKuninori Morimoto .dev = { 12535a35408SKuninori Morimoto .platform_data = &sh_eth_plat, 12635a35408SKuninori Morimoto }, 12735a35408SKuninori Morimoto .num_resources = ARRAY_SIZE(sh_eth_resources), 12835a35408SKuninori Morimoto .resource = sh_eth_resources, 12935a35408SKuninori Morimoto }; 13035a35408SKuninori Morimoto 131907050a3SKuninori Morimoto /* USB0 host */ 132907050a3SKuninori Morimoto void usb0_port_power(int port, int power) 133907050a3SKuninori Morimoto { 134907050a3SKuninori Morimoto gpio_set_value(GPIO_PTB4, power); 135907050a3SKuninori Morimoto } 136907050a3SKuninori Morimoto 137907050a3SKuninori Morimoto static struct r8a66597_platdata usb0_host_data = { 138907050a3SKuninori Morimoto .on_chip = 1, 139907050a3SKuninori Morimoto .port_power = usb0_port_power, 140907050a3SKuninori Morimoto }; 141907050a3SKuninori Morimoto 142907050a3SKuninori Morimoto static struct resource usb0_host_resources[] = { 143907050a3SKuninori Morimoto [0] = { 144907050a3SKuninori Morimoto .start = 0xa4d80000, 145907050a3SKuninori Morimoto .end = 0xa4d80124 - 1, 146907050a3SKuninori Morimoto .flags = IORESOURCE_MEM, 147907050a3SKuninori Morimoto }, 148907050a3SKuninori Morimoto [1] = { 149907050a3SKuninori Morimoto .start = 65, 150907050a3SKuninori Morimoto .end = 65, 151907050a3SKuninori Morimoto .flags = IORESOURCE_IRQ | IRQF_TRIGGER_LOW, 152907050a3SKuninori Morimoto }, 153907050a3SKuninori Morimoto }; 154907050a3SKuninori Morimoto 155907050a3SKuninori Morimoto static struct platform_device usb0_host_device = { 156907050a3SKuninori Morimoto .name = "r8a66597_hcd", 157907050a3SKuninori Morimoto .id = 0, 158907050a3SKuninori Morimoto .dev = { 159907050a3SKuninori Morimoto .dma_mask = NULL, /* not use dma */ 160907050a3SKuninori Morimoto .coherent_dma_mask = 0xffffffff, 161907050a3SKuninori Morimoto .platform_data = &usb0_host_data, 162907050a3SKuninori Morimoto }, 163907050a3SKuninori Morimoto .num_resources = ARRAY_SIZE(usb0_host_resources), 164907050a3SKuninori Morimoto .resource = usb0_host_resources, 165907050a3SKuninori Morimoto }; 166907050a3SKuninori Morimoto 167907050a3SKuninori Morimoto /* 168907050a3SKuninori Morimoto * USB1 169907050a3SKuninori Morimoto * 170907050a3SKuninori Morimoto * CN5 can use both host/function, 171907050a3SKuninori Morimoto * and we can determine it by checking PTB[3] 172907050a3SKuninori Morimoto * 173907050a3SKuninori Morimoto * This time only USB1 host is supported. 174907050a3SKuninori Morimoto */ 175907050a3SKuninori Morimoto void usb1_port_power(int port, int power) 176907050a3SKuninori Morimoto { 177907050a3SKuninori Morimoto if (!gpio_get_value(GPIO_PTB3)) { 178907050a3SKuninori Morimoto printk(KERN_ERR "USB1 function is not supported\n"); 179907050a3SKuninori Morimoto return; 180907050a3SKuninori Morimoto } 181907050a3SKuninori Morimoto 182907050a3SKuninori Morimoto gpio_set_value(GPIO_PTB5, power); 183907050a3SKuninori Morimoto } 184907050a3SKuninori Morimoto 185907050a3SKuninori Morimoto static struct r8a66597_platdata usb1_host_data = { 186907050a3SKuninori Morimoto .on_chip = 1, 187907050a3SKuninori Morimoto .port_power = usb1_port_power, 188907050a3SKuninori Morimoto }; 189907050a3SKuninori Morimoto 190907050a3SKuninori Morimoto static struct resource usb1_host_resources[] = { 191907050a3SKuninori Morimoto [0] = { 192907050a3SKuninori Morimoto .start = 0xa4d90000, 193907050a3SKuninori Morimoto .end = 0xa4d90124 - 1, 194907050a3SKuninori Morimoto .flags = IORESOURCE_MEM, 195907050a3SKuninori Morimoto }, 196907050a3SKuninori Morimoto [1] = { 197907050a3SKuninori Morimoto .start = 66, 198907050a3SKuninori Morimoto .end = 66, 199907050a3SKuninori Morimoto .flags = IORESOURCE_IRQ | IRQF_TRIGGER_LOW, 200907050a3SKuninori Morimoto }, 201907050a3SKuninori Morimoto }; 202907050a3SKuninori Morimoto 203907050a3SKuninori Morimoto static struct platform_device usb1_host_device = { 204907050a3SKuninori Morimoto .name = "r8a66597_hcd", 205907050a3SKuninori Morimoto .id = 1, 206907050a3SKuninori Morimoto .dev = { 207907050a3SKuninori Morimoto .dma_mask = NULL, /* not use dma */ 208907050a3SKuninori Morimoto .coherent_dma_mask = 0xffffffff, 209907050a3SKuninori Morimoto .platform_data = &usb1_host_data, 210907050a3SKuninori Morimoto }, 211907050a3SKuninori Morimoto .num_resources = ARRAY_SIZE(usb1_host_resources), 212907050a3SKuninori Morimoto .resource = usb1_host_resources, 213907050a3SKuninori Morimoto }; 214907050a3SKuninori Morimoto 215*fa3ba51bSKuninori Morimoto /* LCDC */ 216*fa3ba51bSKuninori Morimoto static struct sh_mobile_lcdc_info lcdc_info = { 217*fa3ba51bSKuninori Morimoto .ch[0] = { 218*fa3ba51bSKuninori Morimoto .interface_type = RGB18, 219*fa3ba51bSKuninori Morimoto .chan = LCDC_CHAN_MAINLCD, 220*fa3ba51bSKuninori Morimoto .bpp = 16, 221*fa3ba51bSKuninori Morimoto .clock_divider = 1, 222*fa3ba51bSKuninori Morimoto .lcd_cfg = { 223*fa3ba51bSKuninori Morimoto .sync = 0, /* hsync and vsync are active low */ 224*fa3ba51bSKuninori Morimoto }, 225*fa3ba51bSKuninori Morimoto .lcd_size_cfg = { /* 7.0 inch */ 226*fa3ba51bSKuninori Morimoto .width = 152, 227*fa3ba51bSKuninori Morimoto .height = 91, 228*fa3ba51bSKuninori Morimoto }, 229*fa3ba51bSKuninori Morimoto .board_cfg = { 230*fa3ba51bSKuninori Morimoto }, 231*fa3ba51bSKuninori Morimoto } 232*fa3ba51bSKuninori Morimoto }; 233*fa3ba51bSKuninori Morimoto 234*fa3ba51bSKuninori Morimoto static struct resource lcdc_resources[] = { 235*fa3ba51bSKuninori Morimoto [0] = { 236*fa3ba51bSKuninori Morimoto .name = "LCDC", 237*fa3ba51bSKuninori Morimoto .start = 0xfe940000, 238*fa3ba51bSKuninori Morimoto .end = 0xfe941fff, 239*fa3ba51bSKuninori Morimoto .flags = IORESOURCE_MEM, 240*fa3ba51bSKuninori Morimoto }, 241*fa3ba51bSKuninori Morimoto [1] = { 242*fa3ba51bSKuninori Morimoto .start = 106, 243*fa3ba51bSKuninori Morimoto .flags = IORESOURCE_IRQ, 244*fa3ba51bSKuninori Morimoto }, 245*fa3ba51bSKuninori Morimoto }; 246*fa3ba51bSKuninori Morimoto 247*fa3ba51bSKuninori Morimoto static struct platform_device lcdc_device = { 248*fa3ba51bSKuninori Morimoto .name = "sh_mobile_lcdc_fb", 249*fa3ba51bSKuninori Morimoto .num_resources = ARRAY_SIZE(lcdc_resources), 250*fa3ba51bSKuninori Morimoto .resource = lcdc_resources, 251*fa3ba51bSKuninori Morimoto .dev = { 252*fa3ba51bSKuninori Morimoto .platform_data = &lcdc_info, 253*fa3ba51bSKuninori Morimoto }, 254*fa3ba51bSKuninori Morimoto .archdata = { 255*fa3ba51bSKuninori Morimoto .hwblk_id = HWBLK_LCDC, 256*fa3ba51bSKuninori Morimoto }, 257*fa3ba51bSKuninori Morimoto }; 258*fa3ba51bSKuninori Morimoto 2594138b740SKuninori Morimoto static struct platform_device *ecovec_devices[] __initdata = { 2604138b740SKuninori Morimoto &heartbeat_device, 2614138b740SKuninori Morimoto &nor_flash_device, 26235a35408SKuninori Morimoto &sh_eth_device, 263907050a3SKuninori Morimoto &usb0_host_device, 264907050a3SKuninori Morimoto &usb1_host_device, /* USB1 host support */ 265*fa3ba51bSKuninori Morimoto &lcdc_device, 2664138b740SKuninori Morimoto }; 2674138b740SKuninori Morimoto 268*fa3ba51bSKuninori Morimoto #define PORT_HIZA 0xA4050158 2694138b740SKuninori Morimoto static int __init devices_setup(void) 2704138b740SKuninori Morimoto { 2714138b740SKuninori Morimoto /* enable SCIFA0 */ 2724138b740SKuninori Morimoto gpio_request(GPIO_FN_SCIF0_TXD, NULL); 2734138b740SKuninori Morimoto gpio_request(GPIO_FN_SCIF0_RXD, NULL); 2744138b740SKuninori Morimoto 2754138b740SKuninori Morimoto /* enable debug LED */ 2764138b740SKuninori Morimoto gpio_request(GPIO_PTG0, NULL); 2774138b740SKuninori Morimoto gpio_request(GPIO_PTG1, NULL); 2784138b740SKuninori Morimoto gpio_request(GPIO_PTG2, NULL); 2794138b740SKuninori Morimoto gpio_request(GPIO_PTG3, NULL); 280b7056bc1SKuninori Morimoto gpio_direction_output(GPIO_PTG0, 0); 281b7056bc1SKuninori Morimoto gpio_direction_output(GPIO_PTG1, 0); 282b7056bc1SKuninori Morimoto gpio_direction_output(GPIO_PTG2, 0); 283b7056bc1SKuninori Morimoto gpio_direction_output(GPIO_PTG3, 0); 2844138b740SKuninori Morimoto 28535a35408SKuninori Morimoto /* enable SH-Eth */ 28635a35408SKuninori Morimoto gpio_request(GPIO_PTA1, NULL); 28735a35408SKuninori Morimoto gpio_direction_output(GPIO_PTA1, 1); 28835a35408SKuninori Morimoto mdelay(20); 28935a35408SKuninori Morimoto 29035a35408SKuninori Morimoto gpio_request(GPIO_FN_RMII_RXD0, NULL); 29135a35408SKuninori Morimoto gpio_request(GPIO_FN_RMII_RXD1, NULL); 29235a35408SKuninori Morimoto gpio_request(GPIO_FN_RMII_TXD0, NULL); 29335a35408SKuninori Morimoto gpio_request(GPIO_FN_RMII_TXD1, NULL); 29435a35408SKuninori Morimoto gpio_request(GPIO_FN_RMII_REF_CLK, NULL); 29535a35408SKuninori Morimoto gpio_request(GPIO_FN_RMII_TX_EN, NULL); 29635a35408SKuninori Morimoto gpio_request(GPIO_FN_RMII_RX_ER, NULL); 29735a35408SKuninori Morimoto gpio_request(GPIO_FN_RMII_CRS_DV, NULL); 29835a35408SKuninori Morimoto gpio_request(GPIO_FN_MDIO, NULL); 29935a35408SKuninori Morimoto gpio_request(GPIO_FN_MDC, NULL); 30035a35408SKuninori Morimoto gpio_request(GPIO_FN_LNKSTA, NULL); 30135a35408SKuninori Morimoto 302907050a3SKuninori Morimoto /* enable USB */ 303907050a3SKuninori Morimoto gpio_request(GPIO_PTB3, NULL); 304907050a3SKuninori Morimoto gpio_request(GPIO_PTB4, NULL); 305907050a3SKuninori Morimoto gpio_request(GPIO_PTB5, NULL); 306907050a3SKuninori Morimoto gpio_direction_input(GPIO_PTB3); 307907050a3SKuninori Morimoto gpio_direction_output(GPIO_PTB4, 0); 308907050a3SKuninori Morimoto gpio_direction_output(GPIO_PTB5, 0); 309907050a3SKuninori Morimoto ctrl_outw(0x0600, 0xa40501d4); 310907050a3SKuninori Morimoto ctrl_outw(0x0600, 0xa4050192); 311907050a3SKuninori Morimoto 312*fa3ba51bSKuninori Morimoto /* enable LCDC */ 313*fa3ba51bSKuninori Morimoto gpio_request(GPIO_FN_LCDD23, NULL); 314*fa3ba51bSKuninori Morimoto gpio_request(GPIO_FN_LCDD22, NULL); 315*fa3ba51bSKuninori Morimoto gpio_request(GPIO_FN_LCDD21, NULL); 316*fa3ba51bSKuninori Morimoto gpio_request(GPIO_FN_LCDD20, NULL); 317*fa3ba51bSKuninori Morimoto gpio_request(GPIO_FN_LCDD19, NULL); 318*fa3ba51bSKuninori Morimoto gpio_request(GPIO_FN_LCDD18, NULL); 319*fa3ba51bSKuninori Morimoto gpio_request(GPIO_FN_LCDD17, NULL); 320*fa3ba51bSKuninori Morimoto gpio_request(GPIO_FN_LCDD16, NULL); 321*fa3ba51bSKuninori Morimoto gpio_request(GPIO_FN_LCDD15, NULL); 322*fa3ba51bSKuninori Morimoto gpio_request(GPIO_FN_LCDD14, NULL); 323*fa3ba51bSKuninori Morimoto gpio_request(GPIO_FN_LCDD13, NULL); 324*fa3ba51bSKuninori Morimoto gpio_request(GPIO_FN_LCDD12, NULL); 325*fa3ba51bSKuninori Morimoto gpio_request(GPIO_FN_LCDD11, NULL); 326*fa3ba51bSKuninori Morimoto gpio_request(GPIO_FN_LCDD10, NULL); 327*fa3ba51bSKuninori Morimoto gpio_request(GPIO_FN_LCDD9, NULL); 328*fa3ba51bSKuninori Morimoto gpio_request(GPIO_FN_LCDD8, NULL); 329*fa3ba51bSKuninori Morimoto gpio_request(GPIO_FN_LCDD7, NULL); 330*fa3ba51bSKuninori Morimoto gpio_request(GPIO_FN_LCDD6, NULL); 331*fa3ba51bSKuninori Morimoto gpio_request(GPIO_FN_LCDD5, NULL); 332*fa3ba51bSKuninori Morimoto gpio_request(GPIO_FN_LCDD4, NULL); 333*fa3ba51bSKuninori Morimoto gpio_request(GPIO_FN_LCDD3, NULL); 334*fa3ba51bSKuninori Morimoto gpio_request(GPIO_FN_LCDD2, NULL); 335*fa3ba51bSKuninori Morimoto gpio_request(GPIO_FN_LCDD1, NULL); 336*fa3ba51bSKuninori Morimoto gpio_request(GPIO_FN_LCDD0, NULL); 337*fa3ba51bSKuninori Morimoto gpio_request(GPIO_FN_LCDDISP, NULL); 338*fa3ba51bSKuninori Morimoto gpio_request(GPIO_FN_LCDHSYN, NULL); 339*fa3ba51bSKuninori Morimoto gpio_request(GPIO_FN_LCDDCK, NULL); 340*fa3ba51bSKuninori Morimoto gpio_request(GPIO_FN_LCDVSYN, NULL); 341*fa3ba51bSKuninori Morimoto gpio_request(GPIO_FN_LCDDON, NULL); 342*fa3ba51bSKuninori Morimoto gpio_request(GPIO_FN_LCDLCLK, NULL); 343*fa3ba51bSKuninori Morimoto ctrl_outw((ctrl_inw(PORT_HIZA) & ~0x0001), PORT_HIZA); 344*fa3ba51bSKuninori Morimoto 345*fa3ba51bSKuninori Morimoto gpio_request(GPIO_PTE6, NULL); 346*fa3ba51bSKuninori Morimoto gpio_request(GPIO_PTU1, NULL); 347*fa3ba51bSKuninori Morimoto gpio_request(GPIO_PTR1, NULL); 348*fa3ba51bSKuninori Morimoto gpio_request(GPIO_PTA2, NULL); 349*fa3ba51bSKuninori Morimoto gpio_direction_input(GPIO_PTE6); 350*fa3ba51bSKuninori Morimoto gpio_direction_output(GPIO_PTU1, 0); 351*fa3ba51bSKuninori Morimoto gpio_direction_output(GPIO_PTR1, 0); 352*fa3ba51bSKuninori Morimoto gpio_direction_output(GPIO_PTA2, 0); 353*fa3ba51bSKuninori Morimoto 354*fa3ba51bSKuninori Morimoto if (gpio_get_value(GPIO_PTE6)) { 355*fa3ba51bSKuninori Morimoto /* DVI */ 356*fa3ba51bSKuninori Morimoto lcdc_info.clock_source = LCDC_CLK_EXTERNAL; 357*fa3ba51bSKuninori Morimoto lcdc_info.ch[0].lcd_cfg.name = "DVI"; 358*fa3ba51bSKuninori Morimoto lcdc_info.ch[0].lcd_cfg.xres = 1280; 359*fa3ba51bSKuninori Morimoto lcdc_info.ch[0].lcd_cfg.yres = 720; 360*fa3ba51bSKuninori Morimoto lcdc_info.ch[0].lcd_cfg.left_margin = 220; 361*fa3ba51bSKuninori Morimoto lcdc_info.ch[0].lcd_cfg.right_margin = 110; 362*fa3ba51bSKuninori Morimoto lcdc_info.ch[0].lcd_cfg.hsync_len = 40; 363*fa3ba51bSKuninori Morimoto lcdc_info.ch[0].lcd_cfg.upper_margin = 20; 364*fa3ba51bSKuninori Morimoto lcdc_info.ch[0].lcd_cfg.lower_margin = 5; 365*fa3ba51bSKuninori Morimoto lcdc_info.ch[0].lcd_cfg.vsync_len = 5; 366*fa3ba51bSKuninori Morimoto 367*fa3ba51bSKuninori Morimoto gpio_set_value(GPIO_PTA2, 1); 368*fa3ba51bSKuninori Morimoto gpio_set_value(GPIO_PTU1, 1); 369*fa3ba51bSKuninori Morimoto } else { 370*fa3ba51bSKuninori Morimoto /* Panel */ 371*fa3ba51bSKuninori Morimoto /* not supported */ 372*fa3ba51bSKuninori Morimoto } 373*fa3ba51bSKuninori Morimoto 3744138b740SKuninori Morimoto return platform_add_devices(ecovec_devices, 3754138b740SKuninori Morimoto ARRAY_SIZE(ecovec_devices)); 3764138b740SKuninori Morimoto } 3774138b740SKuninori Morimoto device_initcall(devices_setup); 3784138b740SKuninori Morimoto 3794138b740SKuninori Morimoto static struct sh_machine_vector mv_ecovec __initmv = { 3804138b740SKuninori Morimoto .mv_name = "R0P7724 (EcoVec)", 3814138b740SKuninori Morimoto }; 382