linux/arch/arm/mach-pxa/e750.c
<<
>>
Prefs
   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/kernel.h>
  14#include <linux/init.h>
  15#include <linux/device.h>
  16#include <linux/platform_device.h>
  17#include <linux/fb.h>
  18#include <linux/mfd/tc6393xb.h>
  19
  20#include <video/w100fb.h>
  21
  22#include <asm/setup.h>
  23#include <asm/mach/arch.h>
  24#include <asm/mach-types.h>
  25
  26#include <mach/pxa25x.h>
  27#include <mach/eseries-gpio.h>
  28#include <mach/udc.h>
  29#include <mach/irda.h>
  30#include <mach/irqs.h>
  31#include <mach/audio.h>
  32
  33#include "generic.h"
  34#include "eseries.h"
  35#include "clock.h"
  36
  37/* ---------------------- E750 LCD definitions -------------------- */
  38
  39static struct w100_gen_regs e750_lcd_regs = {
  40        .lcd_format =            0x00008003,
  41        .lcdd_cntl1 =            0x00000000,
  42        .lcdd_cntl2 =            0x0003ffff,
  43        .genlcd_cntl1 =          0x00fff003,
  44        .genlcd_cntl2 =          0x003c0f03,
  45        .genlcd_cntl3 =          0x000143aa,
  46};
  47
  48static struct w100_mode e750_lcd_mode = {
  49        .xres            = 240,
  50        .yres            = 320,
  51        .left_margin     = 21,
  52        .right_margin    = 22,
  53        .upper_margin    = 5,
  54        .lower_margin    = 4,
  55        .crtc_ss         = 0x80150014,
  56        .crtc_ls         = 0x8014000d,
  57        .crtc_gs         = 0xc1000005,
  58        .crtc_vpos_gs    = 0x00020147,
  59        .crtc_rev        = 0x0040010a,
  60        .crtc_dclk       = 0xa1700030,
  61        .crtc_gclk       = 0x80cc0015,
  62        .crtc_goe        = 0x80cc0015,
  63        .crtc_ps1_active = 0x61060017,
  64        .pll_freq        = 57,
  65        .pixclk_divider         = 4,
  66        .pixclk_divider_rotated = 4,
  67        .pixclk_src     = CLK_SRC_XTAL,
  68        .sysclk_divider  = 1,
  69        .sysclk_src     = CLK_SRC_PLL,
  70};
  71
  72static struct w100_gpio_regs e750_w100_gpio_info = {
  73        .init_data1 = 0x01192f1b,
  74        .gpio_dir1  = 0xd5ffdeff,
  75        .gpio_oe1   = 0x000020bf,
  76        .init_data2 = 0x010f010f,
  77        .gpio_dir2  = 0xffffffff,
  78        .gpio_oe2   = 0x000001cf,
  79};
  80
  81static struct w100fb_mach_info e750_fb_info = {
  82        .modelist   = &e750_lcd_mode,
  83        .num_modes  = 1,
  84        .regs       = &e750_lcd_regs,
  85        .gpio       = &e750_w100_gpio_info,
  86        .xtal_freq  = 14318000,
  87        .xtal_dbl   = 1,
  88};
  89
  90static struct resource e750_fb_resources[] = {
  91        [0] = {
  92                .start          = 0x0c000000,
  93                .end            = 0x0cffffff,
  94                .flags          = IORESOURCE_MEM,
  95        },
  96};
  97
  98static struct platform_device e750_fb_device = {
  99        .name           = "w100fb",
 100        .id             = -1,
 101        .dev            = {
 102                .platform_data  = &e750_fb_info,
 103        },
 104        .num_resources  = ARRAY_SIZE(e750_fb_resources),
 105        .resource       = e750_fb_resources,
 106};
 107
 108/* -------------------- e750 MFP parameters -------------------- */
 109
 110static unsigned long e750_pin_config[] __initdata = {
 111        /* Chip selects */
 112        GPIO15_nCS_1,   /* CS1 - Flash */
 113        GPIO79_nCS_3,   /* CS3 - IMAGEON */
 114        GPIO80_nCS_4,   /* CS4 - TMIO */
 115
 116        /* Clocks */
 117        GPIO11_3_6MHz,
 118
 119        /* BTUART */
 120        GPIO42_BTUART_RXD,
 121        GPIO43_BTUART_TXD,
 122        GPIO44_BTUART_CTS,
 123
 124        /* TMIO controller */
 125        GPIO19_GPIO, /* t7l66xb #PCLR */
 126        GPIO45_GPIO, /* t7l66xb #SUSPEND (NOT BTUART!) */
 127
 128        /* UDC */
 129        GPIO13_GPIO,
 130        GPIO3_GPIO,
 131
 132        /* IrDA */
 133        GPIO38_GPIO | MFP_LPM_DRIVE_HIGH,
 134
 135        /* Audio power control */
 136        GPIO4_GPIO,  /* Headphone amp power */
 137        GPIO7_GPIO,  /* Speaker amp power */
 138        GPIO37_GPIO, /* Headphone detect */
 139
 140        /* PC Card */
 141        GPIO8_GPIO,   /* CD0 */
 142        GPIO44_GPIO,  /* CD1 */
 143        GPIO11_GPIO,  /* IRQ0 */
 144        GPIO6_GPIO,   /* IRQ1 */
 145        GPIO27_GPIO,  /* RST0 */
 146        GPIO24_GPIO,  /* RST1 */
 147        GPIO20_GPIO,  /* PWR0 */
 148        GPIO23_GPIO,  /* PWR1 */
 149        GPIO48_nPOE,
 150        GPIO49_nPWE,
 151        GPIO50_nPIOR,
 152        GPIO51_nPIOW,
 153        GPIO52_nPCE_1,
 154        GPIO53_nPCE_2,
 155        GPIO54_nPSKTSEL,
 156        GPIO55_nPREG,
 157        GPIO56_nPWAIT,
 158        GPIO57_nIOIS16,
 159
 160        /* wakeup */
 161        GPIO0_GPIO | WAKEUP_ON_EDGE_RISE,
 162};
 163
 164/* ----------------- e750 tc6393xb parameters ------------------ */
 165
 166static struct tc6393xb_platform_data e750_tc6393xb_info = {
 167        .irq_base       = IRQ_BOARD_START,
 168        .scr_pll2cr     = 0x0cc1,
 169        .scr_gper       = 0,
 170        .gpio_base      = -1,
 171        .suspend        = &eseries_tmio_suspend,
 172        .resume         = &eseries_tmio_resume,
 173        .enable         = &eseries_tmio_enable,
 174        .disable        = &eseries_tmio_disable,
 175};
 176
 177static struct platform_device e750_tc6393xb_device = {
 178        .name           = "tc6393xb",
 179        .id             = -1,
 180        .dev            = {
 181                .platform_data = &e750_tc6393xb_info,
 182        },
 183        .num_resources = 2,
 184        .resource      = eseries_tmio_resources,
 185};
 186
 187/* ------------------------------------------------------------- */
 188
 189static struct platform_device *devices[] __initdata = {
 190        &e750_fb_device,
 191        &e750_tc6393xb_device,
 192};
 193
 194static void __init e750_init(void)
 195{
 196        pxa2xx_mfp_config(ARRAY_AND_SIZE(e750_pin_config));
 197        clk_add_alias("CLK_CK3P6MI", e750_tc6393xb_device.name,
 198                        "GPIO11_CLK", NULL),
 199        eseries_get_tmio_gpios();
 200        platform_add_devices(devices, ARRAY_SIZE(devices));
 201        pxa_set_udc_info(&e7xx_udc_mach_info);
 202        pxa_set_ac97_info(NULL);
 203        pxa_set_ficp_info(&e7xx_ficp_platform_data);
 204}
 205
 206MACHINE_START(E750, "Toshiba e750")
 207        /* Maintainer: Ian Molton (spyro@f2s.com) */
 208        .phys_io        = 0x40000000,
 209        .io_pg_offst    = (io_p2v(0x40000000) >> 18) & 0xfffc,
 210        .boot_params    = 0xa0000100,
 211        .map_io         = pxa_map_io,
 212        .init_irq       = pxa25x_init_irq,
 213        .fixup          = eseries_fixup,
 214        .init_machine   = e750_init,
 215        .timer          = &pxa_timer,
 216MACHINE_END
 217
 218