fa9d71d194f01f44fb5bccf065a8a362838f6b3a
[platform/kernel/linux-rpi.git] / arch / arm / mach-pxa / eseries.c
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 "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