root/arch/arm/mach-pxa/eseries.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. eseries_fixup
  2. eseries_tmio_enable
  3. eseries_tmio_disable
  4. eseries_tmio_suspend
  5. eseries_tmio_resume
  6. eseries_get_tmio_gpios
  7. eseries_register_clks
  8. e330_init
  9. e350_init
  10. e400_init
  11. e740_init
  12. e750_init
  13. e800_tg_change
  14. e800_init

   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/rawnand.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 "pxa25x.h"
  35 #include <mach/eseries-gpio.h>
  36 #include "eseries-irq.h"
  37 #include <mach/audio.h>
  38 #include <linux/platform_data/video-pxafb.h>
  39 #include "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 */
  46 void __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 
  54 struct 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 
  60 static struct platform_device e7xx_gpio_vbus __maybe_unused = {
  61         .name   = "gpio-vbus",
  62         .id     = -1,
  63         .dev    = {
  64                 .platform_data  = &e7xx_udc_info,
  65         },
  66 };
  67 
  68 struct pxaficp_platform_data e7xx_ficp_platform_data = {
  69         .gpio_pwdown            = GPIO_E7XX_IR_OFF,
  70         .transceiver_cap        = IR_SIRMODE | IR_OFF,
  71 };
  72 
  73 int 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 
  86 int 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 
  93 int eseries_tmio_suspend(struct platform_device *dev)
  94 {
  95         gpio_set_value(GPIO_ESERIES_TMIO_SUSPEND, 0);
  96         return 0;
  97 }
  98 
  99 int 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 
 106 void 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. */
 115 struct 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 */
 129 static void __init __maybe_unused eseries_register_clks(void)
 130 {
 131         clk_register_fixed_rate(NULL, "CLK_CK32K", NULL, 0, 32768);
 132 }
 133 
 134 #ifdef CONFIG_MACH_E330
 135 /* -------------------- e330 tc6387xb parameters -------------------- */
 136 
 137 static 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 
 144 static 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 
 156 static struct platform_device *e330_devices[] __initdata = {
 157         &e330_tc6387xb_device,
 158         &e7xx_gpio_vbus,
 159 };
 160 
 161 static 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 
 171 MACHINE_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,
 182 MACHINE_END
 183 #endif
 184 
 185 #ifdef CONFIG_MACH_E350
 186 /* -------------------- e350 t7l66xb parameters -------------------- */
 187 
 188 static 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 
 195 static 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 
 207 static struct platform_device *e350_devices[] __initdata = {
 208         &e350_t7l66xb_device,
 209         &e7xx_gpio_vbus,
 210 };
 211 
 212 static 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 
 222 MACHINE_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,
 233 MACHINE_END
 234 #endif
 235 
 236 #ifdef CONFIG_MACH_E400
 237 /* ------------------------ E400 LCD definitions ------------------------ */
 238 
 239 static 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 
 253 static 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 
 263 static 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 
 286 static struct mtd_partition partition_a = {
 287         .name = "Internal NAND flash",
 288         .offset =  0,
 289         .size =  MTDPART_SIZ_FULL,
 290 };
 291 
 292 static uint8_t scan_ff_pattern[] = { 0xff, 0xff };
 293 
 294 static struct nand_bbt_descr e400_t7l66xb_nand_bbt = {
 295         .options = 0,
 296         .offs = 4,
 297         .len = 2,
 298         .pattern = scan_ff_pattern
 299 };
 300 
 301 static 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 
 307 static 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 
 316 static 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 
 328 static struct platform_device *e400_devices[] __initdata = {
 329         &e400_t7l66xb_device,
 330         &e7xx_gpio_vbus,
 331 };
 332 
 333 static 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 
 346 MACHINE_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,
 357 MACHINE_END
 358 #endif
 359 
 360 #ifdef CONFIG_MACH_E740
 361 /* ------------------------ e740 video support --------------------------- */
 362 
 363 static 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 
 372 static 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 
 396 static 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 
 405 static 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 
 414 static struct resource e740_fb_resources[] = {
 415         [0] = {
 416                 .start          = 0x0c000000,
 417                 .end            = 0x0cffffff,
 418                 .flags          = IORESOURCE_MEM,
 419         },
 420 };
 421 
 422 static 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 
 434 static 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 
 496 static 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 
 503 static 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 
 513 static struct platform_device e740_audio_device = {
 514         .name           = "e740-audio",
 515         .id             = -1,
 516 };
 517 
 518 /* ----------------------------------------------------------------------- */
 519 
 520 static struct platform_device *e740_devices[] __initdata = {
 521         &e740_fb_device,
 522         &e740_t7l66xb_device,
 523         &e7xx_gpio_vbus,
 524         &e740_audio_device,
 525 };
 526 
 527 static 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 
 542 MACHINE_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,
 553 MACHINE_END
 554 #endif
 555 
 556 #ifdef CONFIG_MACH_E750
 557 /* ---------------------- E750 LCD definitions -------------------- */
 558 
 559 static 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 
 568 static 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 
 592 static 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 
 601 static 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 
 610 static struct resource e750_fb_resources[] = {
 611         [0] = {
 612                 .start          = 0x0c000000,
 613                 .end            = 0x0cffffff,
 614                 .flags          = IORESOURCE_MEM,
 615         },
 616 };
 617 
 618 static 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 
 630 static 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 
 692 static 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 
 703 static 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 
 713 static struct platform_device e750_audio_device = {
 714         .name           = "e750-audio",
 715         .id             = -1,
 716 };
 717 
 718 /* ------------------------------------------------------------- */
 719 
 720 static struct platform_device *e750_devices[] __initdata = {
 721         &e750_fb_device,
 722         &e750_tc6393xb_device,
 723         &e7xx_gpio_vbus,
 724         &e750_audio_device,
 725 };
 726 
 727 static 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 
 741 MACHINE_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,
 752 MACHINE_END
 753 #endif
 754 
 755 #ifdef CONFIG_MACH_E800
 756 /* ------------------------ e800 LCD definitions ------------------------- */
 757 
 758 static 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 
 769 static 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 
 778 static 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 
 828 static 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 
 837 static 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 
 845 static 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 
 857 static struct w100_tg_info e800_tg_info = {
 858         .change = e800_tg_change,
 859 };
 860 
 861 static 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 
 871 static struct resource e800_fb_resources[] = {
 872         [0] = {
 873                 .start          = 0x0c000000,
 874                 .end            = 0x0cffffff,
 875                 .flags          = IORESOURCE_MEM,
 876         },
 877 };
 878 
 879 static 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 
 891 static 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 
 897 static 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 
 908 static 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 
 919 static 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 
 929 static struct platform_device e800_audio_device = {
 930         .name           = "e800-audio",
 931         .id             = -1,
 932 };
 933 
 934 /* ----------------------------------------------------------------------- */
 935 
 936 static struct platform_device *e800_devices[] __initdata = {
 937         &e800_fb_device,
 938         &e800_tc6393xb_device,
 939         &e800_gpio_vbus,
 940         &e800_audio_device,
 941 };
 942 
 943 static 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 
 956 MACHINE_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,
 967 MACHINE_END
 968 #endif

/* [<][>][^][v][top][bottom][index][help] */