X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=board%2Ftrab%2Ftrab.c;h=71fd22c158ccfb51586998a5643f7267c05fb68a;hb=26be2c53d671ecfd3e0483f0870649ac28322293;hp=6c9971f3b60046acdbdcf33334c3115004170004;hpb=82226bf4d2fe87076d7f5d7e2677fdd5d0e35fc2;p=u-boot diff --git a/board/trab/trab.c b/board/trab/trab.c index 6c9971f3b6..71fd22c158 100644 --- a/board/trab/trab.c +++ b/board/trab/trab.c @@ -1,6 +1,6 @@ /* * (C) Copyright 2002 - * Gary Jennejohn, DENX Software Engineering, + * Gary Jennejohn, DENX Software Engineering, * * See file CREDITS for list of people who contributed to this * project. @@ -24,13 +24,14 @@ /* #define DEBUG */ #include -#include +#include #include -#include +#include +#include -/* ------------------------------------------------------------------------- */ +DECLARE_GLOBAL_DATA_PTR; -#ifdef CFG_BRIGHTNESS +#ifdef CONFIG_SYS_BRIGHTNESS static void spi_init(void); static void wait_transmit_done(void); static void tsc2000_write(unsigned int page, unsigned int reg, @@ -52,12 +53,10 @@ extern int do_mdm_init; /* defined in common/main.c */ #define KBD_MDELAY 5000 static void udelay_no_timer (int usec) { - DECLARE_GLOBAL_DATA_PTR; - int i; int delay = usec * 3; - for (i = 0; i < delay; i ++) gd->bd->bi_arch_number = 145; + for (i = 0; i < delay; i ++) gd->bd->bi_arch_number = MACH_TYPE_TRAB; } #endif /* CONFIG_MODEM_SUPPORT */ @@ -70,50 +69,53 @@ int board_init () #if defined(CONFIG_VFD) extern int vfd_init_clocks(void); #endif - DECLARE_GLOBAL_DATA_PTR; + struct s3c24x0_clock_power * const clk_power = + s3c24x0_get_base_clock_power(); + struct s3c24x0_gpio * const gpio = s3c24x0_get_base_gpio(); /* memory and cpu-speed are setup before relocation */ #ifdef CONFIG_TRAB_50MHZ /* change the clock to be 50 MHz 1:1:1 */ /* MDIV:0x5c PDIV:4 SDIV:2 */ - rMPLLCON = 0x5c042; - rCLKDIVN = 0; + clk_power->MPLLCON = 0x5c042; + clk_power->CLKDIVN = 0; #else /* change the clock to be 133 MHz 1:2:4 */ /* MDIV:0x7d PDIV:4 SDIV:1 */ - rMPLLCON = 0x7d041; - rCLKDIVN = 3; + clk_power->MPLLCON = 0x7d041; + clk_power->CLKDIVN = 3; #endif /* set up the I/O ports */ - rPACON = 0x3ffff; - rPBCON = 0xaaaaaaaa; - rPBUP = 0xffff; + gpio->PACON = 0x3ffff; + gpio->PBCON = 0xaaaaaaaa; + gpio->PBUP = 0xffff; /* INPUT nCTS0 nRTS0 TXD[1] TXD[0] RXD[1] RXD[0] */ - /* 00, 10, 10, 10, 10, 10, 10 */ - rPFCON = (2<<0) | (2<<2) | (2<<4) | (2<<6) | (2<<8) | (2<<10); + /* 00, 10, 10, 10, 10, 10, 10 */ + gpio->PFCON = (2<<0) | (2<<2) | (2<<4) | (2<<6) | (2<<8) | (2<<10); #ifdef CONFIG_HWFLOW /* do not pull up RXD0, RXD1, TXD0, TXD1, CTS0, RTS0 */ - rPFUP = (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5); + gpio->PFUP = (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5); #else /* do not pull up RXD0, RXD1, TXD0, TXD1 */ - rPFUP = (1<<0) | (1<<1) | (1<<2) | (1<<3); + gpio->PFUP = (1<<0) | (1<<1) | (1<<2) | (1<<3); #endif - rPGCON = 0x0; - rPGUP = 0x0; - rOPENCR= 0x0; + gpio->PGCON = 0x0; + gpio->PGUP = 0x0; + gpio->OPENCR= 0x0; + + /* suppress flicker of the VFDs */ + gpio->MISCCR = 0x40; + gpio->PFCON |= (2<<12); - /* arch number of SAMSUNG-Board */ - /* MACH_TYPE_SMDK2400 */ - /* XXX this isn't really correct, but keep it for now */ - gd->bd->bi_arch_number = 145; + gd->bd->bi_arch_number = MACH_TYPE_TRAB; /* adress of boot parameters */ gd->bd->bi_boot_params = 0x0c000100; /* Make sure both buzzers are turned off */ - rPDCON |= 0x5400; - rPDDAT &= ~0xE0; + gpio->PDCON |= 0x5400; + gpio->PDDAT &= ~0xE0; #ifdef CONFIG_VFD vfd_init_clocks(); @@ -128,13 +130,16 @@ int board_init () } #endif /* CONFIG_MODEM_SUPPORT */ +#ifdef CONFIG_DRIVER_S3C24X0_I2C + /* Configure I/O ports PG5 und PG6 for I2C */ + gpio->PGCON = (gpio->PGCON & 0x003c00) | 0x003c00; +#endif /* CONFIG_DRIVER_S3C24X0_I2C */ + return 0; } int dram_init (void) { - DECLARE_GLOBAL_DATA_PTR; - gd->bd->bi_dram[0].start = PHYS_SDRAM_1; gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE; return 0; @@ -149,15 +154,36 @@ int dram_init (void) #define KBD_DATA (((*(volatile ulong *)0x04020000) >> 16) & 0xF) -static uchar *key_match (ulong); +static char *key_match (ulong); int misc_init_r (void) { ulong kbd_data = KBD_DATA; - uchar keybd_env[KEYBD_KEY_NUM + 1]; - uchar *str; + char *str; + char keybd_env[KEYBD_KEY_NUM + 1]; int i; +#ifdef CONFIG_VERSION_VARIABLE + { + /* Set version variable. Please note, that this variable is + * also set in main_loop() later in the boot process. The + * version variable has to be set this early, because so it + * could be used in script files on an usb stick, which + * might be called during do_auto_update() */ + extern char version_string[]; + + setenv ("ver", version_string); + } +#endif /* CONFIG_VERSION_VARIABLE */ + +#ifdef CONFIG_AUTO_UPDATE + { + extern int do_auto_update(void); + /* this has priority over all else */ + do_auto_update(); + } +#endif + for (i = 0; i < KEYBD_KEY_NUM; ++i) { keybd_env[i] = '0' + ((kbd_data >> i) & 1); } @@ -175,7 +201,7 @@ int misc_init_r (void) free (str); } -#ifdef CFG_BRIGHTNESS +#ifdef CONFIG_SYS_BRIGHTNESS tsc2000_set_brightness(); #endif return (0); @@ -186,7 +212,7 @@ int misc_init_r (void) static uchar kbd_magic_prefix[] = "key_magic"; static uchar kbd_command_prefix[] = "key_cmd"; -static int compare_magic (ulong kbd_data, uchar *str) +static int compare_magic (ulong kbd_data, char *str) { uchar key_mask; @@ -232,12 +258,12 @@ static int compare_magic (ulong kbd_data, uchar *str) * Note: the string points to static environment data and must be * saved before you call any function that modifies the environment. */ -static uchar *key_match (ulong kbd_data) +static char *key_match (ulong kbd_data) { - uchar magic[sizeof (kbd_magic_prefix) + 1]; - uchar cmd_name[sizeof (kbd_command_prefix) + 1]; - uchar *suffix; - uchar *kbd_magic_keys; + char magic[sizeof (kbd_magic_prefix) + 1]; + char cmd_name[sizeof (kbd_command_prefix) + 1]; + char *suffix; + char *kbd_magic_keys; /* * The following string defines the characters that can pe appended @@ -282,7 +308,7 @@ static uchar *key_match (ulong kbd_data) int do_kbd (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]) { ulong kbd_data = KBD_DATA; - uchar keybd_env[KEYBD_KEY_NUM + 1]; + char keybd_env[KEYBD_KEY_NUM + 1]; int i; puts ("Keys:"); @@ -296,6 +322,12 @@ int do_kbd (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]) return 0; } +U_BOOT_CMD( + kbd, 1, 1, do_kbd, + "read keyboard status", + "" +); + #ifdef CONFIG_MODEM_SUPPORT static int key_pressed(void) { @@ -303,64 +335,80 @@ static int key_pressed(void) } #endif /* CONFIG_MODEM_SUPPORT */ -#ifdef CFG_BRIGHTNESS +#ifdef CONFIG_SYS_BRIGHTNESS -#define SET_CS_TOUCH (rPDDAT &= 0x5FF) -#define CLR_CS_TOUCH (rPDDAT |= 0x200) +static inline void SET_CS_TOUCH(void) +{ + struct s3c24x0_gpio * const gpio = s3c24x0_get_base_gpio(); + + gpio->PDDAT &= 0x5FF; +} + +static inline void CLR_CS_TOUCH(void) +{ + struct s3c24x0_gpio * const gpio = s3c24x0_get_base_gpio(); + + gpio->PDDAT |= 0x200; +} static void spi_init(void) { + struct s3c24x0_gpio * const gpio = s3c24x0_get_base_gpio(); + struct s3c24x0_spi * const spi = s3c24x0_get_base_spi(); int i; /* Configure I/O ports. */ - rPDCON = (rPDCON & 0xF3FFFF) | 0x040000; - rPGCON = (rPGCON & 0x0F3FFF) | 0x008000; - rPGCON = (rPGCON & 0x0CFFFF) | 0x020000; - rPGCON = (rPGCON & 0x03FFFF) | 0x080000; + gpio->PDCON = (gpio->PDCON & 0xF3FFFF) | 0x040000; + gpio->PGCON = (gpio->PGCON & 0x0F3FFF) | 0x008000; + gpio->PGCON = (gpio->PGCON & 0x0CFFFF) | 0x020000; + gpio->PGCON = (gpio->PGCON & 0x03FFFF) | 0x080000; - CLR_CS_TOUCH; + CLR_CS_TOUCH(); - rSPPRE = 0x1F; /* Baudrate ca. 514kHz */ - rSPPIN = 0x01; /* SPI-MOSI holds Level after last bit */ - rSPCON = 0x1A; /* Polling, Prescaler, Master, CPOL=0, CPHA=1 */ + spi->ch[0].SPPRE = 0x1F; /* Baudrate ca. 514kHz */ + spi->ch[0].SPPIN = 0x01; /* SPI-MOSI holds Level after last bit */ + spi->ch[0].SPCON = 0x1A; /* Polling, Prescaler, Master, CPOL=0, CPHA=1 */ /* Dummy byte ensures clock to be low. */ for (i = 0; i < 10; i++) { - rSPTDAT = 0xFF; + spi->ch[0].SPTDAT = 0xFF; } wait_transmit_done(); } static void wait_transmit_done(void) { - while (!(rSPSTA & 0x01)); /* wait until transfer is done */ + struct s3c24x0_spi * const spi = s3c24x0_get_base_spi(); + + while (!(spi->ch[0].SPSTA & 0x01)); /* wait until transfer is done */ } static void tsc2000_write(unsigned int page, unsigned int reg, unsigned int data) { + struct s3c24x0_spi * const spi = s3c24x0_get_base_spi(); unsigned int command; - SET_CS_TOUCH; + SET_CS_TOUCH(); command = 0x0000; command |= (page << 11); command |= (reg << 5); - rSPTDAT = (command & 0xFF00) >> 8; + spi->ch[0].SPTDAT = (command & 0xFF00) >> 8; wait_transmit_done(); - rSPTDAT = (command & 0x00FF); + spi->ch[0].SPTDAT = (command & 0x00FF); wait_transmit_done(); - rSPTDAT = (data & 0xFF00) >> 8; + spi->ch[0].SPTDAT = (data & 0xFF00) >> 8; wait_transmit_done(); - rSPTDAT = (data & 0x00FF); + spi->ch[0].SPTDAT = (data & 0x00FF); wait_transmit_done(); - CLR_CS_TOUCH; + CLR_CS_TOUCH(); } static void tsc2000_set_brightness(void) { - uchar tmp[10]; + char tmp[10]; int i, br; spi_init(); @@ -369,8 +417,19 @@ static void tsc2000_set_brightness(void) i = getenv_r("brightness", tmp, sizeof(tmp)); br = (i > 0) ? (int) simple_strtoul (tmp, NULL, 10) - : CFG_BRIGHTNESS; + : CONFIG_SYS_BRIGHTNESS; tsc2000_write(0, 0xb, br & 0xff); } #endif + +#ifdef CONFIG_CMD_NET +int board_eth_init(bd_t *bis) +{ + int rc = 0; +#ifdef CONFIG_CS8900 + rc = cs8900_initialize(0, CONFIG_CS8900_BASE); +#endif + return rc; +} +#endif