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