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