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