1/* 2 * Hardware definitions for the Toshiba eseries PDAs 3 * 4 * Copyright (c) 2003 Ian Molton <spyro@f2s.com> 5 * 6 * This file is licensed under 7 * the terms of the GNU General Public License version 2. This program 8 * is licensed "as is" without any warranty of any kind, whether express 9 * or implied. 10 * 11 */ 12 13#include <linux/clkdev.h> 14#include <linux/kernel.h> 15#include <linux/init.h> 16#include <linux/clk-provider.h> 17#include <linux/gpio.h> 18#include <linux/delay.h> 19#include <linux/platform_device.h> 20#include <linux/mfd/tc6387xb.h> 21#include <linux/mfd/tc6393xb.h> 22#include <linux/mfd/t7l66xb.h> 23#include <linux/mtd/nand.h> 24#include <linux/mtd/partitions.h> 25#include <linux/usb/gpio_vbus.h> 26#include <linux/memblock.h> 27 28#include <video/w100fb.h> 29 30#include <asm/setup.h> 31#include <asm/mach/arch.h> 32#include <asm/mach-types.h> 33 34#include <mach/pxa25x.h> 35#include <mach/eseries-gpio.h> 36#include <mach/eseries-irq.h> 37#include <mach/audio.h> 38#include <linux/platform_data/video-pxafb.h> 39#include <mach/udc.h> 40#include <linux/platform_data/irda-pxaficp.h> 41 42#include "devices.h" 43#include "generic.h" 44 45/* Only e800 has 128MB RAM */ 46void __init eseries_fixup(struct tag *tags, char **cmdline) 47{ 48 if (machine_is_e800()) 49 memblock_add(0xa0000000, SZ_128M); 50 else 51 memblock_add(0xa0000000, SZ_64M); 52} 53 54struct gpio_vbus_mach_info e7xx_udc_info = { 55 .gpio_vbus = GPIO_E7XX_USB_DISC, 56 .gpio_pullup = GPIO_E7XX_USB_PULLUP, 57 .gpio_pullup_inverted = 1 58}; 59 60static struct platform_device e7xx_gpio_vbus = { 61 .name = "gpio-vbus", 62 .id = -1, 63 .dev = { 64 .platform_data = &e7xx_udc_info, 65 }, 66}; 67 68struct pxaficp_platform_data e7xx_ficp_platform_data = { 69 .gpio_pwdown = GPIO_E7XX_IR_OFF, 70 .transceiver_cap = IR_SIRMODE | IR_OFF, 71}; 72 73int eseries_tmio_enable(struct platform_device *dev) 74{ 75 /* Reset - bring SUSPEND high before PCLR */ 76 gpio_set_value(GPIO_ESERIES_TMIO_SUSPEND, 0); 77 gpio_set_value(GPIO_ESERIES_TMIO_PCLR, 0); 78 msleep(1); 79 gpio_set_value(GPIO_ESERIES_TMIO_SUSPEND, 1); 80 msleep(1); 81 gpio_set_value(GPIO_ESERIES_TMIO_PCLR, 1); 82 msleep(1); 83 return 0; 84} 85 86int eseries_tmio_disable(struct platform_device *dev) 87{ 88 gpio_set_value(GPIO_ESERIES_TMIO_SUSPEND, 0); 89 gpio_set_value(GPIO_ESERIES_TMIO_PCLR, 0); 90 return 0; 91} 92 93int eseries_tmio_suspend(struct platform_device *dev) 94{ 95 gpio_set_value(GPIO_ESERIES_TMIO_SUSPEND, 0); 96 return 0; 97} 98 99int eseries_tmio_resume(struct platform_device *dev) 100{ 101 gpio_set_value(GPIO_ESERIES_TMIO_SUSPEND, 1); 102 msleep(1); 103 return 0; 104} 105 106void eseries_get_tmio_gpios(void) 107{ 108 gpio_request(GPIO_ESERIES_TMIO_SUSPEND, NULL); 109 gpio_request(GPIO_ESERIES_TMIO_PCLR, NULL); 110 gpio_direction_output(GPIO_ESERIES_TMIO_SUSPEND, 0); 111 gpio_direction_output(GPIO_ESERIES_TMIO_PCLR, 0); 112} 113 114/* TMIO controller uses the same resources on all e-series machines. */ 115struct resource eseries_tmio_resources[] = { 116 [0] = { 117 .start = PXA_CS4_PHYS, 118 .end = PXA_CS4_PHYS + 0x1fffff, 119 .flags = IORESOURCE_MEM, 120 }, 121 [1] = { 122 .start = PXA_GPIO_TO_IRQ(GPIO_ESERIES_TMIO_IRQ), 123 .end = PXA_GPIO_TO_IRQ(GPIO_ESERIES_TMIO_IRQ), 124 .flags = IORESOURCE_IRQ, 125 }, 126}; 127 128/* Some e-series hardware cannot control the 32K clock */ 129static void __init eseries_register_clks(void) 130{ 131 clk_register_fixed_rate(NULL, "CLK_CK32K", NULL, CLK_IS_ROOT, 32768); 132} 133 134#ifdef CONFIG_MACH_E330 135/* -------------------- e330 tc6387xb parameters -------------------- */ 136 137static struct tc6387xb_platform_data e330_tc6387xb_info = { 138 .enable = &eseries_tmio_enable, 139 .disable = &eseries_tmio_disable, 140 .suspend = &eseries_tmio_suspend, 141 .resume = &eseries_tmio_resume, 142}; 143 144static struct platform_device e330_tc6387xb_device = { 145 .name = "tc6387xb", 146 .id = -1, 147 .dev = { 148 .platform_data = &e330_tc6387xb_info, 149 }, 150 .num_resources = 2, 151 .resource = eseries_tmio_resources, 152}; 153 154/* --------------------------------------------------------------- */ 155 156static struct platform_device *e330_devices[] __initdata = { 157 &e330_tc6387xb_device, 158 &e7xx_gpio_vbus, 159}; 160 161static void __init e330_init(void) 162{ 163 pxa_set_ffuart_info(NULL); 164 pxa_set_btuart_info(NULL); 165 pxa_set_stuart_info(NULL); 166 eseries_register_clks(); 167 eseries_get_tmio_gpios(); 168 platform_add_devices(ARRAY_AND_SIZE(e330_devices)); 169} 170 171MACHINE_START(E330, "Toshiba e330") 172 /* Maintainer: Ian Molton (spyro@f2s.com) */ 173 .atag_offset = 0x100, 174 .map_io = pxa25x_map_io, 175 .nr_irqs = ESERIES_NR_IRQS, 176 .init_irq = pxa25x_init_irq, 177 .handle_irq = pxa25x_handle_irq, 178 .fixup = eseries_fixup, 179 .init_machine = e330_init, 180 .init_time = pxa_timer_init, 181 .restart = pxa_restart, 182MACHINE_END 183#endif 184 185#ifdef CONFIG_MACH_E350 186/* -------------------- e350 t7l66xb parameters -------------------- */ 187 188static struct t7l66xb_platform_data e350_t7l66xb_info = { 189 .irq_base = IRQ_BOARD_START, 190 .enable = &eseries_tmio_enable, 191 .suspend = &eseries_tmio_suspend, 192 .resume = &eseries_tmio_resume, 193}; 194 195static struct platform_device e350_t7l66xb_device = { 196 .name = "t7l66xb", 197 .id = -1, 198 .dev = { 199 .platform_data = &e350_t7l66xb_info, 200 }, 201 .num_resources = 2, 202 .resource = eseries_tmio_resources, 203}; 204 205/* ---------------------------------------------------------- */ 206 207static struct platform_device *e350_devices[] __initdata = { 208 &e350_t7l66xb_device, 209 &e7xx_gpio_vbus, 210}; 211 212static void __init e350_init(void) 213{ 214 pxa_set_ffuart_info(NULL); 215 pxa_set_btuart_info(NULL); 216 pxa_set_stuart_info(NULL); 217 eseries_register_clks(); 218 eseries_get_tmio_gpios(); 219 platform_add_devices(ARRAY_AND_SIZE(e350_devices)); 220} 221 222MACHINE_START(E350, "Toshiba e350") 223 /* Maintainer: Ian Molton (spyro@f2s.com) */ 224 .atag_offset = 0x100, 225 .map_io = pxa25x_map_io, 226 .nr_irqs = ESERIES_NR_IRQS, 227 .init_irq = pxa25x_init_irq, 228 .handle_irq = pxa25x_handle_irq, 229 .fixup = eseries_fixup, 230 .init_machine = e350_init, 231 .init_time = pxa_timer_init, 232 .restart = pxa_restart, 233MACHINE_END 234#endif 235 236#ifdef CONFIG_MACH_E400 237/* ------------------------ E400 LCD definitions ------------------------ */ 238 239static struct pxafb_mode_info e400_pxafb_mode_info = { 240 .pixclock = 140703, 241 .xres = 240, 242 .yres = 320, 243 .bpp = 16, 244 .hsync_len = 4, 245 .left_margin = 28, 246 .right_margin = 8, 247 .vsync_len = 3, 248 .upper_margin = 5, 249 .lower_margin = 6, 250 .sync = 0, 251}; 252 253static struct pxafb_mach_info e400_pxafb_mach_info = { 254 .modes = &e400_pxafb_mode_info, 255 .num_modes = 1, 256 .lcd_conn = LCD_COLOR_TFT_16BPP, 257 .lccr3 = 0, 258 .pxafb_backlight_power = NULL, 259}; 260 261/* ------------------------ E400 MFP config ----------------------------- */ 262 263static unsigned long e400_pin_config[] __initdata = { 264 /* Chip selects */ 265 GPIO15_nCS_1, /* CS1 - Flash */ 266 GPIO80_nCS_4, /* CS4 - TMIO */ 267 268 /* Clocks */ 269 GPIO12_32KHz, 270 271 /* BTUART */ 272 GPIO42_BTUART_RXD, 273 GPIO43_BTUART_TXD, 274 GPIO44_BTUART_CTS, 275 276 /* TMIO controller */ 277 GPIO19_GPIO, /* t7l66xb #PCLR */ 278 GPIO45_GPIO, /* t7l66xb #SUSPEND (NOT BTUART!) */ 279 280 /* wakeup */ 281 GPIO0_GPIO | WAKEUP_ON_EDGE_RISE, 282}; 283 284/* ---------------------------------------------------------------------- */ 285 286static struct mtd_partition partition_a = { 287 .name = "Internal NAND flash", 288 .offset = 0, 289 .size = MTDPART_SIZ_FULL, 290}; 291 292static uint8_t scan_ff_pattern[] = { 0xff, 0xff }; 293 294static struct nand_bbt_descr e400_t7l66xb_nand_bbt = { 295 .options = 0, 296 .offs = 4, 297 .len = 2, 298 .pattern = scan_ff_pattern 299}; 300 301static struct tmio_nand_data e400_t7l66xb_nand_config = { 302 .num_partitions = 1, 303 .partition = &partition_a, 304 .badblock_pattern = &e400_t7l66xb_nand_bbt, 305}; 306 307static struct t7l66xb_platform_data e400_t7l66xb_info = { 308 .irq_base = IRQ_BOARD_START, 309 .enable = &eseries_tmio_enable, 310 .suspend = &eseries_tmio_suspend, 311 .resume = &eseries_tmio_resume, 312 313 .nand_data = &e400_t7l66xb_nand_config, 314}; 315 316static struct platform_device e400_t7l66xb_device = { 317 .name = "t7l66xb", 318 .id = -1, 319 .dev = { 320 .platform_data = &e400_t7l66xb_info, 321 }, 322 .num_resources = 2, 323 .resource = eseries_tmio_resources, 324}; 325 326/* ---------------------------------------------------------- */ 327 328static struct platform_device *e400_devices[] __initdata = { 329 &e400_t7l66xb_device, 330 &e7xx_gpio_vbus, 331}; 332 333static void __init e400_init(void) 334{ 335 pxa2xx_mfp_config(ARRAY_AND_SIZE(e400_pin_config)); 336 pxa_set_ffuart_info(NULL); 337 pxa_set_btuart_info(NULL); 338 pxa_set_stuart_info(NULL); 339 /* Fixme - e400 may have a switched clock */ 340 eseries_register_clks(); 341 eseries_get_tmio_gpios(); 342 pxa_set_fb_info(NULL, &e400_pxafb_mach_info); 343 platform_add_devices(ARRAY_AND_SIZE(e400_devices)); 344} 345 346MACHINE_START(E400, "Toshiba e400") 347 /* Maintainer: Ian Molton (spyro@f2s.com) */ 348 .atag_offset = 0x100, 349 .map_io = pxa25x_map_io, 350 .nr_irqs = ESERIES_NR_IRQS, 351 .init_irq = pxa25x_init_irq, 352 .handle_irq = pxa25x_handle_irq, 353 .fixup = eseries_fixup, 354 .init_machine = e400_init, 355 .init_time = pxa_timer_init, 356 .restart = pxa_restart, 357MACHINE_END 358#endif 359 360#ifdef CONFIG_MACH_E740 361/* ------------------------ e740 video support --------------------------- */ 362 363static struct w100_gen_regs e740_lcd_regs = { 364 .lcd_format = 0x00008023, 365 .lcdd_cntl1 = 0x0f000000, 366 .lcdd_cntl2 = 0x0003ffff, 367 .genlcd_cntl1 = 0x00ffff03, 368 .genlcd_cntl2 = 0x003c0f03, 369 .genlcd_cntl3 = 0x000143aa, 370}; 371 372static struct w100_mode e740_lcd_mode = { 373 .xres = 240, 374 .yres = 320, 375 .left_margin = 20, 376 .right_margin = 28, 377 .upper_margin = 9, 378 .lower_margin = 8, 379 .crtc_ss = 0x80140013, 380 .crtc_ls = 0x81150110, 381 .crtc_gs = 0x80050005, 382 .crtc_vpos_gs = 0x000a0009, 383 .crtc_rev = 0x0040010a, 384 .crtc_dclk = 0xa906000a, 385 .crtc_gclk = 0x80050108, 386 .crtc_goe = 0x80050108, 387 .pll_freq = 57, 388 .pixclk_divider = 4, 389 .pixclk_divider_rotated = 4, 390 .pixclk_src = CLK_SRC_XTAL, 391 .sysclk_divider = 1, 392 .sysclk_src = CLK_SRC_PLL, 393 .crtc_ps1_active = 0x41060010, 394}; 395 396static struct w100_gpio_regs e740_w100_gpio_info = { 397 .init_data1 = 0x21002103, 398 .gpio_dir1 = 0xffffdeff, 399 .gpio_oe1 = 0x03c00643, 400 .init_data2 = 0x003f003f, 401 .gpio_dir2 = 0xffffffff, 402 .gpio_oe2 = 0x000000ff, 403}; 404 405static struct w100fb_mach_info e740_fb_info = { 406 .modelist = &e740_lcd_mode, 407 .num_modes = 1, 408 .regs = &e740_lcd_regs, 409 .gpio = &e740_w100_gpio_info, 410 .xtal_freq = 14318000, 411 .xtal_dbl = 1, 412}; 413 414static struct resource e740_fb_resources[] = { 415 [0] = { 416 .start = 0x0c000000, 417 .end = 0x0cffffff, 418 .flags = IORESOURCE_MEM, 419 }, 420}; 421 422static struct platform_device e740_fb_device = { 423 .name = "w100fb", 424 .id = -1, 425 .dev = { 426 .platform_data = &e740_fb_info, 427 }, 428 .num_resources = ARRAY_SIZE(e740_fb_resources), 429 .resource = e740_fb_resources, 430}; 431 432/* --------------------------- MFP Pin config -------------------------- */ 433 434static unsigned long e740_pin_config[] __initdata = { 435 /* Chip selects */ 436 GPIO15_nCS_1, /* CS1 - Flash */ 437 GPIO79_nCS_3, /* CS3 - IMAGEON */ 438 GPIO80_nCS_4, /* CS4 - TMIO */ 439 440 /* Clocks */ 441 GPIO12_32KHz, 442 443 /* BTUART */ 444 GPIO42_BTUART_RXD, 445 GPIO43_BTUART_TXD, 446 GPIO44_BTUART_CTS, 447 448 /* TMIO controller */ 449 GPIO19_GPIO, /* t7l66xb #PCLR */ 450 GPIO45_GPIO, /* t7l66xb #SUSPEND (NOT BTUART!) */ 451 452 /* UDC */ 453 GPIO13_GPIO, 454 GPIO3_GPIO, 455 456 /* IrDA */ 457 GPIO38_GPIO | MFP_LPM_DRIVE_HIGH, 458 459 /* AC97 */ 460 GPIO28_AC97_BITCLK, 461 GPIO29_AC97_SDATA_IN_0, 462 GPIO30_AC97_SDATA_OUT, 463 GPIO31_AC97_SYNC, 464 465 /* Audio power control */ 466 GPIO16_GPIO, /* AC97 codec AVDD2 supply (analogue power) */ 467 GPIO40_GPIO, /* Mic amp power */ 468 GPIO41_GPIO, /* Headphone amp power */ 469 470 /* PC Card */ 471 GPIO8_GPIO, /* CD0 */ 472 GPIO44_GPIO, /* CD1 */ 473 GPIO11_GPIO, /* IRQ0 */ 474 GPIO6_GPIO, /* IRQ1 */ 475 GPIO27_GPIO, /* RST0 */ 476 GPIO24_GPIO, /* RST1 */ 477 GPIO20_GPIO, /* PWR0 */ 478 GPIO23_GPIO, /* PWR1 */ 479 GPIO48_nPOE, 480 GPIO49_nPWE, 481 GPIO50_nPIOR, 482 GPIO51_nPIOW, 483 GPIO52_nPCE_1, 484 GPIO53_nPCE_2, 485 GPIO54_nPSKTSEL, 486 GPIO55_nPREG, 487 GPIO56_nPWAIT, 488 GPIO57_nIOIS16, 489 490 /* wakeup */ 491 GPIO0_GPIO | WAKEUP_ON_EDGE_RISE, 492}; 493 494/* -------------------- e740 t7l66xb parameters -------------------- */ 495 496static struct t7l66xb_platform_data e740_t7l66xb_info = { 497 .irq_base = IRQ_BOARD_START, 498 .enable = &eseries_tmio_enable, 499 .suspend = &eseries_tmio_suspend, 500 .resume = &eseries_tmio_resume, 501}; 502 503static struct platform_device e740_t7l66xb_device = { 504 .name = "t7l66xb", 505 .id = -1, 506 .dev = { 507 .platform_data = &e740_t7l66xb_info, 508 }, 509 .num_resources = 2, 510 .resource = eseries_tmio_resources, 511}; 512 513static struct platform_device e740_audio_device = { 514 .name = "e740-audio", 515 .id = -1, 516}; 517 518/* ----------------------------------------------------------------------- */ 519 520static struct platform_device *e740_devices[] __initdata = { 521 &e740_fb_device, 522 &e740_t7l66xb_device, 523 &e7xx_gpio_vbus, 524 &e740_audio_device, 525}; 526 527static void __init e740_init(void) 528{ 529 pxa2xx_mfp_config(ARRAY_AND_SIZE(e740_pin_config)); 530 pxa_set_ffuart_info(NULL); 531 pxa_set_btuart_info(NULL); 532 pxa_set_stuart_info(NULL); 533 eseries_register_clks(); 534 clk_add_alias("CLK_CK48M", e740_t7l66xb_device.name, 535 "UDCCLK", &pxa25x_device_udc.dev), 536 eseries_get_tmio_gpios(); 537 platform_add_devices(ARRAY_AND_SIZE(e740_devices)); 538 pxa_set_ac97_info(NULL); 539 pxa_set_ficp_info(&e7xx_ficp_platform_data); 540} 541 542MACHINE_START(E740, "Toshiba e740") 543 /* Maintainer: Ian Molton (spyro@f2s.com) */ 544 .atag_offset = 0x100, 545 .map_io = pxa25x_map_io, 546 .nr_irqs = ESERIES_NR_IRQS, 547 .init_irq = pxa25x_init_irq, 548 .handle_irq = pxa25x_handle_irq, 549 .fixup = eseries_fixup, 550 .init_machine = e740_init, 551 .init_time = pxa_timer_init, 552 .restart = pxa_restart, 553MACHINE_END 554#endif 555 556#ifdef CONFIG_MACH_E750 557/* ---------------------- E750 LCD definitions -------------------- */ 558 559static struct w100_gen_regs e750_lcd_regs = { 560 .lcd_format = 0x00008003, 561 .lcdd_cntl1 = 0x00000000, 562 .lcdd_cntl2 = 0x0003ffff, 563 .genlcd_cntl1 = 0x00fff003, 564 .genlcd_cntl2 = 0x003c0f03, 565 .genlcd_cntl3 = 0x000143aa, 566}; 567 568static struct w100_mode e750_lcd_mode = { 569 .xres = 240, 570 .yres = 320, 571 .left_margin = 21, 572 .right_margin = 22, 573 .upper_margin = 5, 574 .lower_margin = 4, 575 .crtc_ss = 0x80150014, 576 .crtc_ls = 0x8014000d, 577 .crtc_gs = 0xc1000005, 578 .crtc_vpos_gs = 0x00020147, 579 .crtc_rev = 0x0040010a, 580 .crtc_dclk = 0xa1700030, 581 .crtc_gclk = 0x80cc0015, 582 .crtc_goe = 0x80cc0015, 583 .crtc_ps1_active = 0x61060017, 584 .pll_freq = 57, 585 .pixclk_divider = 4, 586 .pixclk_divider_rotated = 4, 587 .pixclk_src = CLK_SRC_XTAL, 588 .sysclk_divider = 1, 589 .sysclk_src = CLK_SRC_PLL, 590}; 591 592static struct w100_gpio_regs e750_w100_gpio_info = { 593 .init_data1 = 0x01192f1b, 594 .gpio_dir1 = 0xd5ffdeff, 595 .gpio_oe1 = 0x000020bf, 596 .init_data2 = 0x010f010f, 597 .gpio_dir2 = 0xffffffff, 598 .gpio_oe2 = 0x000001cf, 599}; 600 601static struct w100fb_mach_info e750_fb_info = { 602 .modelist = &e750_lcd_mode, 603 .num_modes = 1, 604 .regs = &e750_lcd_regs, 605 .gpio = &e750_w100_gpio_info, 606 .xtal_freq = 14318000, 607 .xtal_dbl = 1, 608}; 609 610static struct resource e750_fb_resources[] = { 611 [0] = { 612 .start = 0x0c000000, 613 .end = 0x0cffffff, 614 .flags = IORESOURCE_MEM, 615 }, 616}; 617 618static struct platform_device e750_fb_device = { 619 .name = "w100fb", 620 .id = -1, 621 .dev = { 622 .platform_data = &e750_fb_info, 623 }, 624 .num_resources = ARRAY_SIZE(e750_fb_resources), 625 .resource = e750_fb_resources, 626}; 627 628/* -------------------- e750 MFP parameters -------------------- */ 629 630static unsigned long e750_pin_config[] __initdata = { 631 /* Chip selects */ 632 GPIO15_nCS_1, /* CS1 - Flash */ 633 GPIO79_nCS_3, /* CS3 - IMAGEON */ 634 GPIO80_nCS_4, /* CS4 - TMIO */ 635 636 /* Clocks */ 637 GPIO11_3_6MHz, 638 639 /* BTUART */ 640 GPIO42_BTUART_RXD, 641 GPIO43_BTUART_TXD, 642 GPIO44_BTUART_CTS, 643 644 /* TMIO controller */ 645 GPIO19_GPIO, /* t7l66xb #PCLR */ 646 GPIO45_GPIO, /* t7l66xb #SUSPEND (NOT BTUART!) */ 647 648 /* UDC */ 649 GPIO13_GPIO, 650 GPIO3_GPIO, 651 652 /* IrDA */ 653 GPIO38_GPIO | MFP_LPM_DRIVE_HIGH, 654 655 /* AC97 */ 656 GPIO28_AC97_BITCLK, 657 GPIO29_AC97_SDATA_IN_0, 658 GPIO30_AC97_SDATA_OUT, 659 GPIO31_AC97_SYNC, 660 661 /* Audio power control */ 662 GPIO4_GPIO, /* Headphone amp power */ 663 GPIO7_GPIO, /* Speaker amp power */ 664 GPIO37_GPIO, /* Headphone detect */ 665 666 /* PC Card */ 667 GPIO8_GPIO, /* CD0 */ 668 GPIO44_GPIO, /* CD1 */ 669 /* GPIO11_GPIO, IRQ0 */ 670 GPIO6_GPIO, /* IRQ1 */ 671 GPIO27_GPIO, /* RST0 */ 672 GPIO24_GPIO, /* RST1 */ 673 GPIO20_GPIO, /* PWR0 */ 674 GPIO23_GPIO, /* PWR1 */ 675 GPIO48_nPOE, 676 GPIO49_nPWE, 677 GPIO50_nPIOR, 678 GPIO51_nPIOW, 679 GPIO52_nPCE_1, 680 GPIO53_nPCE_2, 681 GPIO54_nPSKTSEL, 682 GPIO55_nPREG, 683 GPIO56_nPWAIT, 684 GPIO57_nIOIS16, 685 686 /* wakeup */ 687 GPIO0_GPIO | WAKEUP_ON_EDGE_RISE, 688}; 689 690/* ----------------- e750 tc6393xb parameters ------------------ */ 691 692static struct tc6393xb_platform_data e750_tc6393xb_info = { 693 .irq_base = IRQ_BOARD_START, 694 .scr_pll2cr = 0x0cc1, 695 .scr_gper = 0, 696 .gpio_base = -1, 697 .suspend = &eseries_tmio_suspend, 698 .resume = &eseries_tmio_resume, 699 .enable = &eseries_tmio_enable, 700 .disable = &eseries_tmio_disable, 701}; 702 703static struct platform_device e750_tc6393xb_device = { 704 .name = "tc6393xb", 705 .id = -1, 706 .dev = { 707 .platform_data = &e750_tc6393xb_info, 708 }, 709 .num_resources = 2, 710 .resource = eseries_tmio_resources, 711}; 712 713static struct platform_device e750_audio_device = { 714 .name = "e750-audio", 715 .id = -1, 716}; 717 718/* ------------------------------------------------------------- */ 719 720static struct platform_device *e750_devices[] __initdata = { 721 &e750_fb_device, 722 &e750_tc6393xb_device, 723 &e7xx_gpio_vbus, 724 &e750_audio_device, 725}; 726 727static void __init e750_init(void) 728{ 729 pxa2xx_mfp_config(ARRAY_AND_SIZE(e750_pin_config)); 730 pxa_set_ffuart_info(NULL); 731 pxa_set_btuart_info(NULL); 732 pxa_set_stuart_info(NULL); 733 clk_add_alias("CLK_CK3P6MI", e750_tc6393xb_device.name, 734 "GPIO11_CLK", NULL), 735 eseries_get_tmio_gpios(); 736 platform_add_devices(ARRAY_AND_SIZE(e750_devices)); 737 pxa_set_ac97_info(NULL); 738 pxa_set_ficp_info(&e7xx_ficp_platform_data); 739} 740 741MACHINE_START(E750, "Toshiba e750") 742 /* Maintainer: Ian Molton (spyro@f2s.com) */ 743 .atag_offset = 0x100, 744 .map_io = pxa25x_map_io, 745 .nr_irqs = ESERIES_NR_IRQS, 746 .init_irq = pxa25x_init_irq, 747 .handle_irq = pxa25x_handle_irq, 748 .fixup = eseries_fixup, 749 .init_machine = e750_init, 750 .init_time = pxa_timer_init, 751 .restart = pxa_restart, 752MACHINE_END 753#endif 754 755#ifdef CONFIG_MACH_E800 756/* ------------------------ e800 LCD definitions ------------------------- */ 757 758static unsigned long e800_pin_config[] __initdata = { 759 /* AC97 */ 760 GPIO28_AC97_BITCLK, 761 GPIO29_AC97_SDATA_IN_0, 762 GPIO30_AC97_SDATA_OUT, 763 GPIO31_AC97_SYNC, 764 765 /* tc6393xb */ 766 GPIO11_3_6MHz, 767}; 768 769static struct w100_gen_regs e800_lcd_regs = { 770 .lcd_format = 0x00008003, 771 .lcdd_cntl1 = 0x02a00000, 772 .lcdd_cntl2 = 0x0003ffff, 773 .genlcd_cntl1 = 0x000ff2a3, 774 .genlcd_cntl2 = 0x000002a3, 775 .genlcd_cntl3 = 0x000102aa, 776}; 777 778static struct w100_mode e800_lcd_mode[2] = { 779 [0] = { 780 .xres = 480, 781 .yres = 640, 782 .left_margin = 52, 783 .right_margin = 148, 784 .upper_margin = 2, 785 .lower_margin = 6, 786 .crtc_ss = 0x80350034, 787 .crtc_ls = 0x802b0026, 788 .crtc_gs = 0x80160016, 789 .crtc_vpos_gs = 0x00020003, 790 .crtc_rev = 0x0040001d, 791 .crtc_dclk = 0xe0000000, 792 .crtc_gclk = 0x82a50049, 793 .crtc_goe = 0x80ee001c, 794 .crtc_ps1_active = 0x00000000, 795 .pll_freq = 128, 796 .pixclk_divider = 4, 797 .pixclk_divider_rotated = 6, 798 .pixclk_src = CLK_SRC_PLL, 799 .sysclk_divider = 0, 800 .sysclk_src = CLK_SRC_PLL, 801 }, 802 [1] = { 803 .xres = 240, 804 .yres = 320, 805 .left_margin = 15, 806 .right_margin = 88, 807 .upper_margin = 0, 808 .lower_margin = 7, 809 .crtc_ss = 0xd010000f, 810 .crtc_ls = 0x80070003, 811 .crtc_gs = 0x80000000, 812 .crtc_vpos_gs = 0x01460147, 813 .crtc_rev = 0x00400003, 814 .crtc_dclk = 0xa1700030, 815 .crtc_gclk = 0x814b0008, 816 .crtc_goe = 0x80cc0015, 817 .crtc_ps1_active = 0x00000000, 818 .pll_freq = 100, 819 .pixclk_divider = 6, /* Wince uses 14 which gives a */ 820 .pixclk_divider_rotated = 6, /* 7MHz Pclk. We use a 14MHz one */ 821 .pixclk_src = CLK_SRC_PLL, 822 .sysclk_divider = 0, 823 .sysclk_src = CLK_SRC_PLL, 824 } 825}; 826 827 828static struct w100_gpio_regs e800_w100_gpio_info = { 829 .init_data1 = 0xc13fc019, 830 .gpio_dir1 = 0x3e40df7f, 831 .gpio_oe1 = 0x003c3000, 832 .init_data2 = 0x00000000, 833 .gpio_dir2 = 0x00000000, 834 .gpio_oe2 = 0x00000000, 835}; 836 837static struct w100_mem_info e800_w100_mem_info = { 838 .ext_cntl = 0x09640011, 839 .sdram_mode_reg = 0x00600021, 840 .ext_timing_cntl = 0x10001545, 841 .io_cntl = 0x7ddd7333, 842 .size = 0x1fffff, 843}; 844 845static void e800_tg_change(struct w100fb_par *par) 846{ 847 unsigned long tmp; 848 849 tmp = w100fb_gpio_read(W100_GPIO_PORT_A); 850 if (par->mode->xres == 480) 851 tmp |= 0x100; 852 else 853 tmp &= ~0x100; 854 w100fb_gpio_write(W100_GPIO_PORT_A, tmp); 855} 856 857static struct w100_tg_info e800_tg_info = { 858 .change = e800_tg_change, 859}; 860 861static struct w100fb_mach_info e800_fb_info = { 862 .modelist = e800_lcd_mode, 863 .num_modes = 2, 864 .regs = &e800_lcd_regs, 865 .gpio = &e800_w100_gpio_info, 866 .mem = &e800_w100_mem_info, 867 .tg = &e800_tg_info, 868 .xtal_freq = 16000000, 869}; 870 871static struct resource e800_fb_resources[] = { 872 [0] = { 873 .start = 0x0c000000, 874 .end = 0x0cffffff, 875 .flags = IORESOURCE_MEM, 876 }, 877}; 878 879static struct platform_device e800_fb_device = { 880 .name = "w100fb", 881 .id = -1, 882 .dev = { 883 .platform_data = &e800_fb_info, 884 }, 885 .num_resources = ARRAY_SIZE(e800_fb_resources), 886 .resource = e800_fb_resources, 887}; 888 889/* --------------------------- UDC definitions --------------------------- */ 890 891static struct gpio_vbus_mach_info e800_udc_info = { 892 .gpio_vbus = GPIO_E800_USB_DISC, 893 .gpio_pullup = GPIO_E800_USB_PULLUP, 894 .gpio_pullup_inverted = 1 895}; 896 897static struct platform_device e800_gpio_vbus = { 898 .name = "gpio-vbus", 899 .id = -1, 900 .dev = { 901 .platform_data = &e800_udc_info, 902 }, 903}; 904 905 906/* ----------------- e800 tc6393xb parameters ------------------ */ 907 908static struct tc6393xb_platform_data e800_tc6393xb_info = { 909 .irq_base = IRQ_BOARD_START, 910 .scr_pll2cr = 0x0cc1, 911 .scr_gper = 0, 912 .gpio_base = -1, 913 .suspend = &eseries_tmio_suspend, 914 .resume = &eseries_tmio_resume, 915 .enable = &eseries_tmio_enable, 916 .disable = &eseries_tmio_disable, 917}; 918 919static struct platform_device e800_tc6393xb_device = { 920 .name = "tc6393xb", 921 .id = -1, 922 .dev = { 923 .platform_data = &e800_tc6393xb_info, 924 }, 925 .num_resources = 2, 926 .resource = eseries_tmio_resources, 927}; 928 929static struct platform_device e800_audio_device = { 930 .name = "e800-audio", 931 .id = -1, 932}; 933 934/* ----------------------------------------------------------------------- */ 935 936static struct platform_device *e800_devices[] __initdata = { 937 &e800_fb_device, 938 &e800_tc6393xb_device, 939 &e800_gpio_vbus, 940 &e800_audio_device, 941}; 942 943static void __init e800_init(void) 944{ 945 pxa2xx_mfp_config(ARRAY_AND_SIZE(e800_pin_config)); 946 pxa_set_ffuart_info(NULL); 947 pxa_set_btuart_info(NULL); 948 pxa_set_stuart_info(NULL); 949 clk_add_alias("CLK_CK3P6MI", e800_tc6393xb_device.name, 950 "GPIO11_CLK", NULL), 951 eseries_get_tmio_gpios(); 952 platform_add_devices(ARRAY_AND_SIZE(e800_devices)); 953 pxa_set_ac97_info(NULL); 954} 955 956MACHINE_START(E800, "Toshiba e800") 957 /* Maintainer: Ian Molton (spyro@f2s.com) */ 958 .atag_offset = 0x100, 959 .map_io = pxa25x_map_io, 960 .nr_irqs = ESERIES_NR_IRQS, 961 .init_irq = pxa25x_init_irq, 962 .handle_irq = pxa25x_handle_irq, 963 .fixup = eseries_fixup, 964 .init_machine = e800_init, 965 .init_time = pxa_timer_init, 966 .restart = pxa_restart, 967MACHINE_END 968#endif 969