diff options
Diffstat (limited to 'packages/uboot/u-boot-mkimage-openmoko-native/uboot-20061030-neo1973.patch')
-rw-r--r-- | packages/uboot/u-boot-mkimage-openmoko-native/uboot-20061030-neo1973.patch | 2248 |
1 files changed, 0 insertions, 2248 deletions
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-20061030-neo1973.patch b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-20061030-neo1973.patch deleted file mode 100644 index 7c70244b38..0000000000 --- a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-20061030-neo1973.patch +++ /dev/null @@ -1,2248 +0,0 @@ -This patch adds neo1973 'board' (FIC Neo1973 phone) support to u-boot. -Specifically, it adds support for the GTA01v3, GTA01v4, GTA01Bv2 and -GTA01Bv3 hardware revisions. - -Signed-off-by: Harald Welte <laforge@openmoko.org> - -Index: u-boot/Makefile -=================================================================== ---- u-boot.orig/Makefile -+++ u-boot/Makefile -@@ -2009,6 +2009,14 @@ - sbc2410x_config: unconfig - @$(MKCONFIG) $(@:_config=) arm arm920t sbc2410x NULL s3c24x0 - -+gta01_config \ -+gta01v3_config \ -+gta01bv2_config \ -+gta01bv3_config \ -+gta01bv4_config \ -+gta01v4_config : unconfig -+ @sh board/neo1973/gta01/split_by_variant.sh $@ -+ - qt2410_config : unconfig - @./mkconfig $(@:_config=) arm arm920t qt2410 NULL s3c24x0 - -Index: u-boot/common/main.c -=================================================================== ---- u-boot.orig/common/main.c -+++ u-boot/common/main.c -@@ -61,6 +61,7 @@ - #undef DEBUG_PARSER - - char console_buffer[CFG_CBSIZE]; /* console I/O buffer */ -+int nobootdelay; - - #ifndef CONFIG_CMDLINE_EDITING - static char * delete_char (char *buffer, char *p, int *colp, int *np, int plen); -@@ -376,7 +377,7 @@ - - debug ("### main_loop: bootcmd=\"%s\"\n", s ? s : "<UNDEFINED>"); - -- if (bootdelay >= 0 && s && !abortboot (bootdelay)) { -+ if (!nobootdelay && bootdelay >= 0 && s && !abortboot (bootdelay)) { - # ifdef CONFIG_AUTOBOOT_KEYED - int prev = disable_ctrlc(1); /* disable Control C checking */ - # endif -Index: u-boot/drivers/Makefile -=================================================================== ---- u-boot.orig/drivers/Makefile -+++ u-boot/drivers/Makefile -@@ -50,6 +50,7 @@ - usbdcore.o usbdcore_ep0.o usbdcore_omap1510.o usbtty.o \ - videomodes.o w83c553f.o \ - ks8695eth.o \ -+ pcf50606.o \ - pxa_pcmcia.o mpc8xx_pcmcia.o tqm8xx_pcmcia.o \ - rpx_pcmcia.o \ - fsl_i2c.o s3c2410_fb.o -Index: u-boot/drivers/pcf50606.c -=================================================================== ---- /dev/null -+++ u-boot/drivers/pcf50606.c -@@ -0,0 +1,112 @@ -+ -+#include <common.h> -+ -+#ifdef CONFIG_DRIVER_PCF50606 -+ -+#include <i2c.h> -+#include <pcf50606.h> -+#include <asm/atomic.h> -+#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) -+ -+#define PCF50606_I2C_ADDR 0x08 -+ -+void __pcf50606_reg_write(u_int8_t reg, u_int8_t val) -+{ -+ i2c_write(PCF50606_I2C_ADDR, reg, 1, &val, 1); -+} -+ -+u_int8_t __pcf50606_reg_read(u_int8_t reg) -+{ -+ u_int8_t tmp; -+ i2c_read(PCF50606_I2C_ADDR, reg, 1, &tmp, 1); -+ return tmp; -+} -+ -+void pcf50606_reg_write(u_int8_t reg, u_int8_t val) -+{ -+ unsigned long flags; -+ -+ local_irq_save(flags); -+ __pcf50606_reg_write(reg, val); -+ local_irq_restore(flags); -+} -+ -+u_int8_t pcf50606_reg_read(u_int8_t reg) -+{ -+ unsigned long flags; -+ u_int8_t tmp; -+ -+ local_irq_save(flags); -+ tmp = __pcf50606_reg_read(reg); -+ local_irq_restore(flags); -+ -+ return tmp; -+} -+ -+void pcf50606_reg_set_bit_mask(u_int8_t reg, u_int8_t mask, u_int8_t val) -+{ -+ unsigned long flags; -+ u_int8_t tmp; -+ -+ local_irq_save(flags); -+ tmp = __pcf50606_reg_read(reg); -+ __pcf50606_reg_write(reg, (val & mask) | (tmp & ~mask)); -+ local_irq_restore(flags); -+} -+ -+void pcf50606_reg_clear_bits(u_int8_t reg, u_int8_t bits) -+{ -+ unsigned long flags; -+ u_int8_t tmp; -+ -+ local_irq_save(flags); -+ tmp = pcf50606_reg_read(reg); -+ pcf50606_reg_write(reg, (tmp & ~bits)); -+ local_irq_restore(flags); -+} -+ -+static const u_int8_t regs_valid[] = { -+ PCF50606_REG_OOCS, PCF50606_REG_INT1M, PCF50606_REG_INT2M, -+ PCF50606_REG_INT3M, PCF50606_REG_OOCC1, PCF50606_REG_OOCC2, -+ PCF50606_REG_PSSC, PCF50606_REG_PWROKM, PCF50606_REG_DCDC1, -+ PCF50606_REG_DCDC2, PCF50606_REG_DCDC3, PCF50606_REG_DCDC4, -+ PCF50606_REG_DCDEC1, PCF50606_REG_DCDEC2, PCF50606_REG_DCUDC1, -+ PCF50606_REG_DCUDC2, PCF50606_REG_IOREGC, PCF50606_REG_D1REGC1, -+ PCF50606_REG_D2REGC1, PCF50606_REG_D3REGC1, PCF50606_REG_LPREGC1, -+ PCF50606_REG_LPREGC2, PCF50606_REG_MBCC1, PCF50606_REG_MBCC2, -+ PCF50606_REG_MBCC3, PCF50606_REG_BBCC, PCF50606_REG_ADCC1, -+ PCF50606_REG_ADCC2, PCF50606_REG_ACDC1, PCF50606_REG_BVMC, -+ PCF50606_REG_PWMC1, PCF50606_REG_LEDC1, PCF50606_REG_LEDC2, -+ PCF50606_REG_GPOC1, PCF50606_REG_GPOC2, PCF50606_REG_GPOC3, -+ PCF50606_REG_GPOC4, PCF50606_REG_GPOC5, -+}; -+ -+ -+/* initialize PCF50606 register set */ -+void pcf50606_init(void) -+{ -+ unsigned long flags; -+ int i; -+ -+ local_irq_save(flags); -+ for (i = 0; i < ARRAY_SIZE(regs_valid); i++) { -+ __pcf50606_reg_write(regs_valid[i], -+ pcf50606_initial_regs[regs_valid[i]]); -+ } -+ local_irq_restore(flags); -+} -+ -+void pcf50606_charge_autofast(int on) -+{ -+ if (on) { -+ printf("Enabling automatic fast charge\n"); -+ pcf50606_reg_set_bit_mask(PCF50606_REG_MBCC1, -+ PCF50606_MBCC1_AUTOFST, -+ PCF50606_MBCC1_AUTOFST); -+ } else { -+ printf("Disabling fast charge\n"); -+ pcf50606_reg_write(PCF50606_REG_MBCC1, 0x00); -+ } -+} -+ -+#endif /* CONFIG DRIVER_PCF50606 */ -Index: u-boot/include/pcf50606.h -=================================================================== ---- /dev/null -+++ u-boot/include/pcf50606.h -@@ -0,0 +1,273 @@ -+#ifndef _PCF50606_H -+#define _PCF50606_H -+ -+/* Philips PCF50606 Power Managemnt Unit (PMU) driver -+ * (C) 2006-2007 by OpenMoko, Inc. -+ * Author: Harald Welte <laforge@openmoko.org> -+ * -+ */ -+ -+enum pfc50606_regs { -+ PCF50606_REG_ID = 0x00, -+ PCF50606_REG_OOCS = 0x01, -+ PCF50606_REG_INT1 = 0x02, /* Interrupt Status */ -+ PCF50606_REG_INT2 = 0x03, /* Interrupt Status */ -+ PCF50606_REG_INT3 = 0x04, /* Interrupt Status */ -+ PCF50606_REG_INT1M = 0x05, /* Interrupt Mask */ -+ PCF50606_REG_INT2M = 0x06, /* Interrupt Mask */ -+ PCF50606_REG_INT3M = 0x07, /* Interrupt Mask */ -+ PCF50606_REG_OOCC1 = 0x08, -+ PCF50606_REG_OOCC2 = 0x09, -+ PCF50606_REG_RTCSC = 0x0a, /* Second */ -+ PCF50606_REG_RTCMN = 0x0b, /* Minute */ -+ PCF50606_REG_RTCHR = 0x0c, /* Hour */ -+ PCF50606_REG_RTCWD = 0x0d, /* Weekday */ -+ PCF50606_REG_RTCDT = 0x0e, /* Day */ -+ PCF50606_REG_RTCMT = 0x0f, /* Month */ -+ PCF50606_REG_RTCYR = 0x10, /* Year */ -+ PCF50606_REG_RTCSCA = 0x11, /* Alarm Second */ -+ PCF50606_REG_RTCMNA = 0x12, /* Alarm Minute */ -+ PCF50606_REG_RTCHRA = 0x13, /* Alarm Hour */ -+ PCF50606_REG_RTCWDA = 0x14, /* Alarm Weekday */ -+ PCF50606_REG_RTCDTA = 0x15, /* Alarm Day */ -+ PCF50606_REG_RTCMTA = 0x16, /* Alarm Month */ -+ PCF50606_REG_RTCYRA = 0x17, /* Alarm Year */ -+ PCF50606_REG_PSSC = 0x18, /* Power sequencing */ -+ PCF50606_REG_PWROKM = 0x19, /* PWROK mask */ -+ PCF50606_REG_PWROKS = 0x1a, /* PWROK status */ -+ PCF50606_REG_DCDC1 = 0x1b, -+ PCF50606_REG_DCDC2 = 0x1c, -+ PCF50606_REG_DCDC3 = 0x1d, -+ PCF50606_REG_DCDC4 = 0x1e, -+ PCF50606_REG_DCDEC1 = 0x1f, -+ PCF50606_REG_DCDEC2 = 0x20, -+ PCF50606_REG_DCUDC1 = 0x21, -+ PCF50606_REG_DCUDC2 = 0x22, -+ PCF50606_REG_IOREGC = 0x23, -+ PCF50606_REG_D1REGC1 = 0x24, -+ PCF50606_REG_D2REGC1 = 0x25, -+ PCF50606_REG_D3REGC1 = 0x26, -+ PCF50606_REG_LPREGC1 = 0x27, -+ PCF50606_REG_LPREGC2 = 0x28, -+ PCF50606_REG_MBCC1 = 0x29, -+ PCF50606_REG_MBCC2 = 0x2a, -+ PCF50606_REG_MBCC3 = 0x2b, -+ PCF50606_REG_MBCS1 = 0x2c, -+ PCF50606_REG_BBCC = 0x2d, -+ PCF50606_REG_ADCC1 = 0x2e, -+ PCF50606_REG_ADCC2 = 0x2f, -+ PCF50606_REG_ADCS1 = 0x30, -+ PCF50606_REG_ADCS2 = 0x31, -+ PCF50606_REG_ADCS3 = 0x32, -+ PCF50606_REG_ACDC1 = 0x33, -+ PCF50606_REG_BVMC = 0x34, -+ PCF50606_REG_PWMC1 = 0x35, -+ PCF50606_REG_LEDC1 = 0x36, -+ PCF50606_REG_LEDC2 = 0x37, -+ PCF50606_REG_GPOC1 = 0x38, -+ PCF50606_REG_GPOC2 = 0x39, -+ PCF50606_REG_GPOC3 = 0x3a, -+ PCF50606_REG_GPOC4 = 0x3b, -+ PCF50606_REG_GPOC5 = 0x3c, -+ __NUM_PCF50606_REGS -+}; -+ -+enum pcf50606_reg_oocs { -+ PFC50606_OOCS_ONKEY = 0x01, -+ PCF50606_OOCS_EXTON = 0x02, -+ PCF50606_OOCS_PWROKRST = 0x04, -+ PCF50606_OOCS_BATOK = 0x08, -+ PCF50606_OOCS_BACKOK = 0x10, -+ PCF50606_OOCS_CHGOK = 0x20, -+ PCF50606_OOCS_TEMPOK = 0x40, -+ PCF50606_OOCS_WDTEXP = 0x80, -+}; -+ -+enum pcf50606_reg_oocc1 { -+ PCF50606_OOCC1_GOSTDBY = 0x01, -+ PCF50606_OOCC1_TOTRST = 0x02, -+ PCF50606_OOCC1_CLK32ON = 0x04, -+ PCF50606_OOCC1_WDTRST = 0x08, -+ PCF50606_OOCC1_RTCWAK = 0x10, -+ PCF50606_OOCC1_CHGWAK = 0x20, -+ PCF50606_OOCC1_EXTONWAK_HIGH = 0x40, -+ PCF50606_OOCC1_EXTONWAK_LOW = 0x80, -+ PCF50606_OOCC1_EXTONWAK_NO_WAKEUP = 0x3f, -+}; -+ -+enum pcf50606_reg_oocc2 { -+ PCF50606_OOCC2_ONKEYDB_NONE = 0x00, -+ PCF50606_OOCC2_ONKEYDB_14ms = 0x01, -+ PCF50606_OOCC2_ONKEYDB_62ms = 0x02, -+ PCF50606_OOCC2_ONKEYDB_500ms = 0x03, -+ PCF50606_OOCC2_EXTONDB_NONE = 0x00, -+ PCF50606_OOCC2_EXTONDB_14ms = 0x04, -+ PCF50606_OOCC2_EXTONDB_62ms = 0x08, -+ PCF50606_OOCC2_EXTONDB_500ms = 0x0c, -+}; -+ -+enum pcf50606_reg_int1 { -+ PCF50606_INT1_ONKEYR = 0x01, /* ONKEY rising edge */ -+ PCF50606_INT1_ONKEYF = 0x02, /* ONKEY falling edge */ -+ PCF50606_INT1_ONKEY1S = 0x04, /* OMKEY at least 1sec low */ -+ PCF50606_INT1_EXTONR = 0x08, /* EXTON rising edge */ -+ PCF50606_INT1_EXTONF = 0x10, /* EXTON falling edge */ -+ PCF50606_INT1_SECOND = 0x40, /* RTC periodic second interrupt */ -+ PCF50606_INT1_ALARM = 0x80, /* RTC alarm time is reached */ -+}; -+ -+enum pcf50606_reg_int2 { -+ PCF50606_INT2_CHGINS = 0x01, /* Charger inserted */ -+ PCF50606_INT2_CHGRM = 0x02, /* Charger removed */ -+ PCF50606_INT2_CHGFOK = 0x04, /* Fast charging OK */ -+ PCF50606_INT2_CHGERR = 0x08, /* Error in charging mode */ -+ PCF50606_INT2_CHGFRDY = 0x10, /* Fast charge completed */ -+ PCF50606_INT2_CHGPROT = 0x20, /* Charging protection interrupt */ -+ PCF50606_INT2_CHGWD10S = 0x40, /* Charger watchdig expires in 10s */ -+ PCF50606_INT2_CHGWDEXP = 0x80, /* Charger watchdog expires */ -+}; -+ -+enum pcf50606_reg_int3 { -+ PCF50606_INT3_ADCRDY = 0x01, /* ADC conversion finished */ -+ PCF50606_INT3_ACDINS = 0x02, /* Accessory inserted */ -+ PCF50606_INT3_ACDREM = 0x04, /* Accessory removed */ -+ PCF50606_INT3_TSCPRES = 0x08, /* Touch screen pressed */ -+ PCF50606_INT3_LOWBAT = 0x40, /* Low battery voltage */ -+ PCF50606_INT3_HIGHTMP = 0x80, /* High temperature */ -+}; -+ -+/* used by PSSC, PWROKM, PWROKS, */ -+enum pcf50606_regu { -+ PCF50606_REGU_DCD = 0x01, /* DCD in phase 2 */ -+ PCF50606_REGU_DCDE = 0x02, /* DCDE in phase 2 */ -+ PCF50606_REGU_DCUD = 0x04, /* DCDU in phase 2 */ -+ PCF50606_REGU_IO = 0x08, /* IO in phase 2 */ -+ PCF50606_REGU_D1 = 0x10, /* D1 in phase 2 */ -+ PCF50606_REGU_D2 = 0x20, /* D2 in phase 2 */ -+ PCF50606_REGU_D3 = 0x40, /* D3 in phase 2 */ -+ PCF50606_REGU_LP = 0x80, /* LP in phase 2 */ -+}; -+ -+enum pcf50606_reg_dcdc4 { -+ PCF50606_DCDC4_MODE_AUTO = 0x00, -+ PCF50606_DCDC4_MODE_PWM = 0x01, -+ PCF50606_DCDC4_MODE_PCF = 0x02, -+ PCF50606_DCDC4_OFF_FLOAT = 0x00, -+ PCF50606_DCDC4_OFF_BYPASS = 0x04, -+ PCF50606_DCDC4_OFF_PULLDOWN = 0x08, -+ PCF50606_DCDC4_CURLIM_500mA = 0x00, -+ PCF50606_DCDC4_CURLIM_750mA = 0x10, -+ PCF50606_DCDC4_CURLIM_1000mA = 0x20, -+ PCF50606_DCDC4_CURLIM_1250mA = 0x30, -+ PCF50606_DCDC4_TOGGLE = 0x40, -+ PCF50606_DCDC4_REGSEL_DCDC2 = 0x80, -+}; -+ -+enum pcf50606_reg_dcdec2 { -+ PCF50606_DCDEC2_MODE_AUTO = 0x00, -+ PCF50606_DCDEC2_MODE_PWM = 0x01, -+ PCF50606_DCDEC2_MODE_PCF = 0x02, -+ PCF50606_DCDEC2_OFF_FLOAT = 0x00, -+ PCF50606_DCDEC2_OFF_BYPASS = 0x04, -+}; -+ -+enum pcf50606_reg_dcudc2 { -+ PCF50606_DCUDC2_MODE_AUTO = 0x00, -+ PCF50606_DCUDC2_MODE_PWM = 0x01, -+ PCF50606_DCUDC2_MODE_PCF = 0x02, -+ PCF50606_DCUDC2_OFF_FLOAT = 0x00, -+ PCF50606_DCUDC2_OFF_BYPASS = 0x04, -+}; -+ -+enum pcf50606_reg_adcc1 { -+ PCF50606_ADCC1_TSCMODACT = 0x01, -+ PCF50606_ADCC1_TSCMODSTB = 0x02, -+ PCF50606_ADCC1_TRATSET = 0x04, -+ PCF50606_ADCC1_NTCSWAPE = 0x08, -+ PCF50606_ADCC1_NTCSWAOFF = 0x10, -+ PCF50606_ADCC1_EXTSYNCBREAK = 0x20, -+ /* reserved */ -+ PCF50606_ADCC1_TSCINT = 0x80, -+}; -+ -+enum pcf50606_reg_adcc2 { -+ PCF50606_ADCC2_ADCSTART = 0x01, -+ /* see enum pcf50606_adcc2_adcmux */ -+ PCF50606_ADCC2_SYNC_NONE = 0x00, -+ PCF50606_ADCC2_SYNC_TXON = 0x20, -+ PCF50606_ADCC2_SYNC_PWREN1 = 0x40, -+ PCF50606_ADCC2_SYNC_PWREN2 = 0x60, -+ PCF50606_ADCC2_RES_10BIT = 0x00, -+ PCF50606_ADCC2_RES_8BIT = 0x80, -+}; -+ -+#define PCF50606_ADCC2_ADCMUX_MASK (0xf << 1) -+ -+#define ADCMUX_SHIFT 1 -+enum pcf50606_adcc2_adcmux { -+ PCF50606_ADCMUX_BATVOLT_RES = 0x0 << ADCMUX_SHIFT, -+ PCF50606_ADCMUX_BATVOLT_SUBTR = 0x1 << ADCMUX_SHIFT, -+ PCF50606_ADCMUX_ADCIN1_RES = 0x2 << ADCMUX_SHIFT, -+ PCF50606_ADCMUX_ADCIN1_SUBTR = 0x3 << ADCMUX_SHIFT, -+ PCF50606_ADCMUX_BATTEMP = 0x4 << ADCMUX_SHIFT, -+ PCF50606_ADCMUX_ADCIN2 = 0x5 << ADCMUX_SHIFT, -+ PCF50606_ADCMUX_ADCIN3 = 0x6 << ADCMUX_SHIFT, -+ PCF50606_ADCMUX_ADCIN3_RATIO = 0x7 << ADCMUX_SHIFT, -+ PCF50606_ADCMUX_XPOS = 0x8 << ADCMUX_SHIFT, -+ PCF50606_ADCMUX_YPOS = 0x9 << ADCMUX_SHIFT, -+ PCF50606_ADCMUX_P1 = 0xa << ADCMUX_SHIFT, -+ PCF50606_ADCMUX_P2 = 0xb << ADCMUX_SHIFT, -+ PCF50606_ADCMUX_BATVOLT_ADCIN1 = 0xc << ADCMUX_SHIFT, -+ PCF50606_ADCMUX_XY_SEQUENCE = 0xe << ADCMUX_SHIFT, -+ PCF50606_P1_P2_RESISTANCE = 0xf << ADCMUX_SHIFT, -+}; -+ -+enum pcf50606_adcs2 { -+ PCF50606_ADCS2_ADCRDY = 0x80, -+}; -+ -+enum pcf50606_reg_mbcc1 { -+ PCF50606_MBCC1_CHGAPE = 0x01, -+ PCF50606_MBCC1_AUTOFST = 0x02, -+#define PCF50606_MBCC1_CHGMOD_MASK 0x1c -+#define PCF50606_MBCC1_CHGMOD_SHIFT 2 -+ PCF50606_MBCC1_CHGMOD_QUAL = 0x00, -+ PCF50606_MBCC1_CHGMOD_PRE = 0x04, -+ PCF50606_MBCC1_CHGMOD_TRICKLE = 0x08, -+ PCF50606_MBCC1_CHGMOD_FAST_CCCV = 0x0c, -+ PCF50606_MBCC1_CHGMOD_FAST_NOCC = 0x10, -+ PCF50606_MBCC1_CHGMOD_FAST_NOCV = 0x14, -+ PCF50606_MBCC1_CHGMOD_FAST_SW = 0x18, -+ PCF50606_MBCC1_CHGMOD_IDLE = 0x1c, -+ PCF50606_MBCC1_DETMOD_LOWCHG = 0x20, -+ PCF50606_MBCC1_DETMOD_WDRST = 0x40, -+}; -+ -+enum pcf50606_reg_bvmc { -+ PCF50606_BVMC_LOWBAT = 0x01, -+ PCF50606_BVMC_THRSHLD_NULL = 0x00, -+ PCF50606_BVMC_THRSHLD_2V8 = 0x02, -+ PCF50606_BVMC_THRSHLD_2V9 = 0x04, -+ PCF50606_BVMC_THRSHLD_3V = 0x08, -+ PCF50606_BVMC_THRSHLD_3V1 = 0x08, -+ PCF50606_BVMC_THRSHLD_3V2 = 0x0a, -+ PCF50606_BVMC_THRSHLD_3V3 = 0x0c, -+ PCF50606_BVMC_THRSHLD_3V4 = 0x0e, -+ PCF50606_BVMC_DISDB = 0x10, -+}; -+ -+/* this is to be provided by the board implementation */ -+extern const u_int8_t pcf50606_initial_regs[__NUM_PCF50606_REGS]; -+ -+void pcf50606_reg_write(u_int8_t reg, u_int8_t val); -+ -+u_int8_t pcf50606_reg_read(u_int8_t reg); -+ -+void pcf50606_reg_set_bit_mask(u_int8_t reg, u_int8_t mask, u_int8_t val); -+void pcf50606_reg_clear_bits(u_int8_t reg, u_int8_t bits); -+ -+void pcf50606_init(void); -+void pcf50606_charge_autofast(int on); -+ -+#endif /* _PCF50606_H */ -+ -Index: u-boot/board/neo1973/common/cmd_neo1973.c -=================================================================== ---- /dev/null -+++ u-boot/board/neo1973/common/cmd_neo1973.c -@@ -0,0 +1,99 @@ -+/* -+ * (C) Copyright 2006 by OpenMoko, Inc. -+ * Author: Harald Welte <laforge@openmoko.org> -+ * -+ * See file CREDITS for list of people who contributed to this -+ * project. -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License as -+ * published by the Free Software Foundation; either version 2 of -+ * the License, or (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, -+ * MA 02111-1307 USA -+ */ -+ -+/* -+ * Boot support -+ */ -+#include <common.h> -+#include <command.h> -+#include <net.h> /* for print_IPaddr */ -+#include <s3c2410.h> -+ -+#include "neo1973.h" -+ -+DECLARE_GLOBAL_DATA_PTR; -+ -+#if (CONFIG_COMMANDS & CFG_CMD_BDI) -+ -+int do_neo1973 ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) -+{ -+ int i; -+ -+ if (!strcmp(argv[1], "info")) { -+ printf("FIC Neo1973 Hardware Revision 0x%04x\n", get_board_rev()); -+ } else if (!strcmp(argv[1], "power-off")) { -+ neo1973_poweroff(); -+ } else if (!strcmp(argv[1], "charger") || !strcmp(argv[1], "charge")) { -+ if (argc < 3) -+ goto out_help; -+ if (!strcmp(argv[2], "status") || !strcmp(argv[2], "state")) { -+ printf("%s\n", neo1973_get_charge_status()); -+ } else if (!strcmp(argv[2], "autofast")) { -+ neo1973_set_charge_mode(NEO1973_CHGCMD_AUTOFAST); -+ } else if (!strcmp(argv[2], "!autofast")) { -+ neo1973_set_charge_mode(NEO1973_CHGCMD_NO_AUTOFAST); -+ } else if (!strcmp(argv[2], "off")) { -+ neo1973_set_charge_mode(NEO1973_CHGCMD_OFF); -+ } else if (!strcmp(argv[2], "fast")) { -+ neo1973_set_charge_mode(NEO1973_CHGCMD_FAST); -+ } else -+ goto out_help; -+ } else if (!strcmp(argv[1], "backlight")) { -+ if (argc < 3) -+ goto out_help; -+ if (!strcmp(argv[2], "on")) -+ neo1973_backlight(1); -+ else -+ neo1973_backlight(0); -+ } else if (!strcmp(argv[1], "vibrator")) { -+ if (argc < 3) -+ goto out_help; -+ if (!strcmp(argv[2], "on")) -+ neo1973_vibrator(1); -+ else -+ neo1973_vibrator(0); -+ } else { -+out_help: -+ printf("Usage:\n%s\n", cmdtp->usage); -+ return 1; -+ } -+ -+ return 0; -+} -+ -+/* -------------------------------------------------------------------- */ -+ -+U_BOOT_CMD( -+ neo1973, 4, 1, do_neo1973, -+ "neo1973 - phone specific commands\n", -+ "neo1973 info - display phone informantion\n" -+ "neo1973 power-off - switch off the phone\n" -+ "neo1973 charger status - display charger status\n" -+ "neo1973 charger autofast - enable automatic fast (500mA) charging\n" -+ "neo1973 charger !autofast - disable automatic fast (500mA) charging\n" -+ "neo1973 charger fast - enable fast (500mA) charging\n" -+ "neo1973 charger off - disable charging\n" -+ "neo1973 backlight (on|off) - switch backlight on or off\n" -+ "neo1973 vibrator (on|off) - switch vibrator on or off\n" -+); -+#endif /* CFG_CMD_BDI */ -Index: u-boot/board/neo1973/common/jbt6k74.c -=================================================================== ---- /dev/null -+++ u-boot/board/neo1973/common/jbt6k74.c -@@ -0,0 +1,420 @@ -+/* u-boot driver for the tpo JBT6K74-AS LCM ASIC -+ * -+ * Copyright (C) 2006-2007 by OpenMoko, Inc. -+ * Author: Harald Welte <laforge@openmoko.org> -+ * All rights reserved. -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License as -+ * published by the Free Software Foundation; either version 2 of -+ * the License, or (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, -+ * MA 02111-1307 USA -+ * -+ */ -+#include <common.h> -+#include <spi.h> -+#include <video_fb.h> -+#include <asm/errno.h> -+#include <s3c2410.h> -+#include "jbt6k74.h" -+ -+#if 0 -+#define DEBUGP(x, args...) printf("%s: " x, __FUNCTION__, ## args); -+#define DEBUGPC(x, args...) printf(x, ## args); -+#else -+#define DEBUGP(x, args...) do { } while (0) -+#define DEBUGPC(x, args...) do { } while (0) -+#endif -+ -+ -+enum jbt_register { -+ JBT_REG_SLEEP_IN = 0x10, -+ JBT_REG_SLEEP_OUT = 0x11, -+ -+ JBT_REG_DISPLAY_OFF = 0x28, -+ JBT_REG_DISPLAY_ON = 0x29, -+ -+ JBT_REG_RGB_FORMAT = 0x3a, -+ JBT_REG_QUAD_RATE = 0x3b, -+ -+ JBT_REG_POWER_ON_OFF = 0xb0, -+ JBT_REG_BOOSTER_OP = 0xb1, -+ JBT_REG_BOOSTER_MODE = 0xb2, -+ JBT_REG_BOOSTER_FREQ = 0xb3, -+ JBT_REG_OPAMP_SYSCLK = 0xb4, -+ JBT_REG_VSC_VOLTAGE = 0xb5, -+ JBT_REG_VCOM_VOLTAGE = 0xb6, -+ JBT_REG_EXT_DISPL = 0xb7, -+ JBT_REG_OUTPUT_CONTROL = 0xb8, -+ JBT_REG_DCCLK_DCEV = 0xb9, -+ JBT_REG_DISPLAY_MODE1 = 0xba, -+ JBT_REG_DISPLAY_MODE2 = 0xbb, -+ JBT_REG_DISPLAY_MODE = 0xbc, -+ JBT_REG_ASW_SLEW = 0xbd, -+ JBT_REG_DUMMY_DISPLAY = 0xbe, -+ JBT_REG_DRIVE_SYSTEM = 0xbf, -+ -+ JBT_REG_SLEEP_OUT_FR_A = 0xc0, -+ JBT_REG_SLEEP_OUT_FR_B = 0xc1, -+ JBT_REG_SLEEP_OUT_FR_C = 0xc2, -+ JBT_REG_SLEEP_IN_LCCNT_D = 0xc3, -+ JBT_REG_SLEEP_IN_LCCNT_E = 0xc4, -+ JBT_REG_SLEEP_IN_LCCNT_F = 0xc5, -+ JBT_REG_SLEEP_IN_LCCNT_G = 0xc6, -+ -+ JBT_REG_GAMMA1_FINE_1 = 0xc7, -+ JBT_REG_GAMMA1_FINE_2 = 0xc8, -+ JBT_REG_GAMMA1_INCLINATION = 0xc9, -+ JBT_REG_GAMMA1_BLUE_OFFSET = 0xca, -+ -+ JBT_REG_BLANK_CONTROL = 0xcf, -+ JBT_REG_BLANK_TH_TV = 0xd0, -+ JBT_REG_CKV_ON_OFF = 0xd1, -+ JBT_REG_CKV_1_2 = 0xd2, -+ JBT_REG_OEV_TIMING = 0xd3, -+ JBT_REG_ASW_TIMING_1 = 0xd4, -+ JBT_REG_ASW_TIMING_2 = 0xd5, -+ -+ JBT_REG_HCLOCK_VGA = 0xec, -+ JBT_REG_HCLOCK_QVGA = 0xed, -+ -+}; -+ -+static const char *jbt_state_names[] = { -+ [JBT_STATE_DEEP_STANDBY] = "deep-standby", -+ [JBT_STATE_SLEEP] = "sleep", -+ [JBT_STATE_NORMAL] = "normal", -+}; -+ -+#define GTA01_SCLK (1 << 7) /* GPG7 */ -+#define GTA01_MOSI (1 << 6) /* GPG6 */ -+#define GTA01_MISO (1 << 5) /* GPG5 */ -+#define GTA01_CS (1 << 3) /* GPG3 */ -+ -+#define SPI_READ ((immr->GPGDAT & GTA01_MISO) != 0) -+ -+#define SPI_CS(bit) if (bit) gpio->GPGDAT |= GTA01_CS; \ -+ else gpio->GPGDAT &= ~GTA01_CS -+ -+#define SPI_SDA(bit) if (bit) gpio->GPGDAT |= GTA01_MOSI; \ -+ else gpio->GPGDAT &= ~GTA01_MOSI -+ -+#define SPI_SCL(bit) if (bit) gpio->GPGDAT |= GTA01_SCLK; \ -+ else gpio->GPGDAT &= ~GTA01_SCLK -+ -+/* 150uS minimum clock cycle, we have two of this plus our other -+ * instructions */ -+#define SPI_DELAY udelay(100) /* 200uS */ -+ -+ -+#define JBT_TX_BUF_SIZE -+struct jbt_info { -+ enum jbt_state state; -+ u_int16_t tx_buf[4]; -+ struct spi_device *spi_dev; -+}; -+ -+static struct jbt_info _jbt, *jbt = &_jbt; -+ -+static int jbt_spi_xfer(int wordnum, int bitlen, u_int16_t *dout) -+{ -+ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO(); -+ u_int16_t tmpdout = 0; -+ int i, j; -+ -+ DEBUGP("spi_xfer: dout %08X wordnum %u bitlen %d\n", -+ *(uint *)dout, wordnum, bitlen); -+ -+ SPI_CS(0); -+ -+ for (i = 0; i < wordnum; i ++) { -+ tmpdout = dout[i]; -+ -+ for (j = 0; j < bitlen; j++) { -+ SPI_SCL(0); -+ if (tmpdout & (1 << bitlen-1)) { -+ SPI_SDA(1); -+ DEBUGPC("1"); -+ } else { -+ SPI_SDA(0); -+ DEBUGPC("0"); -+ } -+ SPI_DELAY; -+ SPI_SCL(1); -+ SPI_DELAY; -+ tmpdout <<= 1; -+ } -+ DEBUGPC(" "); -+ } -+ DEBUGPC("\n"); -+ -+ SPI_CS(1); -+ -+ return 0; -+} -+ -+#define JBT_COMMAND 0x000 -+#define JBT_DATA 0x100 -+ -+static int jbt_reg_write_nodata(struct jbt_info *jbt, u_int8_t reg) -+{ -+ int rc; -+ -+ jbt->tx_buf[0] = JBT_COMMAND | reg; -+ -+ rc = jbt_spi_xfer(1, 9, jbt->tx_buf); -+ -+ return rc; -+} -+ -+ -+static int jbt_reg_write(struct jbt_info *jbt, u_int8_t reg, u_int8_t data) -+{ -+ int rc; -+ -+ jbt->tx_buf[0] = JBT_COMMAND | reg; -+ jbt->tx_buf[1] = JBT_DATA | data; -+ -+ rc = jbt_spi_xfer(2, 9, jbt->tx_buf); -+ -+ return rc; -+} -+ -+static int jbt_reg_write16(struct jbt_info *jbt, u_int8_t reg, u_int16_t data) -+{ -+ int rc; -+ -+ jbt->tx_buf[0] = JBT_COMMAND | reg; -+ jbt->tx_buf[1] = JBT_DATA | (data >> 8); -+ jbt->tx_buf[2] = JBT_DATA | (data & 0xff); -+ -+ rc = jbt_spi_xfer(3, 9, jbt->tx_buf); -+ -+ return rc; -+} -+ -+static int jbt_init_regs(struct jbt_info *jbt) -+{ -+ int rc; -+ -+ DEBUGP("entering\n"); -+ -+ rc = jbt_reg_write(jbt, JBT_REG_DISPLAY_MODE1, 0x01); -+ rc |= jbt_reg_write(jbt, JBT_REG_DISPLAY_MODE2, 0x00); -+ rc |= jbt_reg_write(jbt, JBT_REG_RGB_FORMAT, 0x60); -+ rc |= jbt_reg_write(jbt, JBT_REG_DRIVE_SYSTEM, 0x10); -+ rc |= jbt_reg_write(jbt, JBT_REG_BOOSTER_OP, 0x56); -+ rc |= jbt_reg_write(jbt, JBT_REG_BOOSTER_MODE, 0x33); -+ rc |= jbt_reg_write(jbt, JBT_REG_BOOSTER_FREQ, 0x11); -+ rc |= jbt_reg_write(jbt, JBT_REG_BOOSTER_FREQ, 0x11); -+ rc |= jbt_reg_write(jbt, JBT_REG_OPAMP_SYSCLK, 0x02); -+ rc |= jbt_reg_write(jbt, JBT_REG_VSC_VOLTAGE, 0x2b); -+ rc |= jbt_reg_write(jbt, JBT_REG_VCOM_VOLTAGE, 0x40); -+ rc |= jbt_reg_write(jbt, JBT_REG_EXT_DISPL, 0x03); -+ rc |= jbt_reg_write(jbt, JBT_REG_DCCLK_DCEV, 0x04); -+ rc |= jbt_reg_write(jbt, JBT_REG_ASW_SLEW, 0x02); -+ rc |= jbt_reg_write(jbt, JBT_REG_DUMMY_DISPLAY, 0x00); -+ -+ rc |= jbt_reg_write(jbt, JBT_REG_SLEEP_OUT_FR_A, 0x11); -+ rc |= jbt_reg_write(jbt, JBT_REG_SLEEP_OUT_FR_B, 0x11); -+ rc |= jbt_reg_write(jbt, JBT_REG_SLEEP_OUT_FR_C, 0x11); -+ rc |= jbt_reg_write16(jbt, JBT_REG_SLEEP_IN_LCCNT_D, 0x2040); -+ rc |= jbt_reg_write16(jbt, JBT_REG_SLEEP_IN_LCCNT_E, 0x60c0); -+ rc |= jbt_reg_write16(jbt, JBT_REG_SLEEP_IN_LCCNT_F, 0x1020); -+ rc |= jbt_reg_write16(jbt, JBT_REG_SLEEP_IN_LCCNT_G, 0x60c0); -+ -+ rc |= jbt_reg_write16(jbt, JBT_REG_GAMMA1_FINE_1, 0x5533); -+ rc |= jbt_reg_write(jbt, JBT_REG_GAMMA1_FINE_2, 0x00); -+ rc |= jbt_reg_write(jbt, JBT_REG_GAMMA1_INCLINATION, 0x00); -+ rc |= jbt_reg_write(jbt, JBT_REG_GAMMA1_BLUE_OFFSET, 0x00); -+ rc |= jbt_reg_write(jbt, JBT_REG_GAMMA1_BLUE_OFFSET, 0x00); -+ -+ rc |= jbt_reg_write16(jbt, JBT_REG_HCLOCK_VGA, 0x1f0); -+ rc |= jbt_reg_write(jbt, JBT_REG_BLANK_CONTROL, 0x02); -+ rc |= jbt_reg_write16(jbt, JBT_REG_BLANK_TH_TV, 0x0804); -+ rc |= jbt_reg_write16(jbt, JBT_REG_BLANK_TH_TV, 0x0804); -+ -+ rc |= jbt_reg_write(jbt, JBT_REG_CKV_ON_OFF, 0x01); -+ rc |= jbt_reg_write16(jbt, JBT_REG_CKV_1_2, 0x0000); -+ -+ rc |= jbt_reg_write16(jbt, JBT_REG_OEV_TIMING, 0x0d0e); -+ rc |= jbt_reg_write16(jbt, JBT_REG_ASW_TIMING_1, 0x11a4); -+ rc |= jbt_reg_write(jbt, JBT_REG_ASW_TIMING_2, 0x0e); -+ -+#if 0 -+ rc |= jbt_reg_write16(jbt, JBT_REG_HCLOCK_QVGA, 0x00ff); -+ rc |= jbt_reg_write16(jbt, JBT_REG_HCLOCK_QVGA, 0x00ff); -+#endif -+ -+ return rc; -+} -+ -+static int standby_to_sleep(struct jbt_info *jbt) -+{ -+ int rc; -+ -+ DEBUGP("entering\n"); -+ -+ /* three times command zero */ -+ rc = jbt_reg_write_nodata(jbt, 0x00); -+ udelay(1000); -+ rc = jbt_reg_write_nodata(jbt, 0x00); -+ udelay(1000); -+ rc = jbt_reg_write_nodata(jbt, 0x00); -+ udelay(1000); -+ -+ /* deep standby out */ -+ rc |= jbt_reg_write(jbt, JBT_REG_POWER_ON_OFF, 0x17); -+ -+ return rc; -+} -+ -+static int sleep_to_normal(struct jbt_info *jbt) -+{ -+ int rc; -+ DEBUGP("entering\n"); -+ -+ /* RGB I/F on, RAM wirte off, QVGA through, SIGCON enable */ -+ rc = jbt_reg_write(jbt, JBT_REG_DISPLAY_MODE, 0x80); -+ -+ /* Quad mode off */ -+ rc |= jbt_reg_write(jbt, JBT_REG_QUAD_RATE, 0x00); -+ -+ /* AVDD on, XVDD on */ -+ rc |= jbt_reg_write(jbt, JBT_REG_POWER_ON_OFF, 0x16); -+ -+ /* Output control */ -+ rc |= jbt_reg_write16(jbt, JBT_REG_OUTPUT_CONTROL, 0xfff9); -+ -+ /* Sleep mode off */ -+ rc |= jbt_reg_write_nodata(jbt, JBT_REG_SLEEP_OUT); -+ -+ /* initialize register set */ -+ rc |= jbt_init_regs(jbt); -+ return rc; -+} -+ -+static int normal_to_sleep(struct jbt_info *jbt) -+{ -+ int rc; -+ DEBUGP("entering\n"); -+ -+ rc = jbt_reg_write_nodata(jbt, JBT_REG_DISPLAY_OFF); -+ rc |= jbt_reg_write16(jbt, JBT_REG_OUTPUT_CONTROL, 0x8002); -+ rc |= jbt_reg_write_nodata(jbt, JBT_REG_SLEEP_IN); -+ -+ return rc; -+} -+ -+static int sleep_to_standby(struct jbt_info *jbt) -+{ -+ DEBUGP("entering\n"); -+ return jbt_reg_write(jbt, JBT_REG_POWER_ON_OFF, 0x00); -+} -+ -+/* frontend function */ -+int jbt6k74_enter_state(enum jbt_state new_state) -+{ -+ int rc = -EINVAL; -+ -+ DEBUGP("entering(old_state=%u, new_state=%u)\n", jbt->state, new_state); -+ -+ switch (jbt->state) { -+ case JBT_STATE_DEEP_STANDBY: -+ switch (new_state) { -+ case JBT_STATE_DEEP_STANDBY: -+ rc = 0; -+ break; -+ case JBT_STATE_SLEEP: -+ rc = standby_to_sleep(jbt); -+ break; -+ case JBT_STATE_NORMAL: -+ /* first transition into sleep */ -+ rc = standby_to_sleep(jbt); -+ /* then transition into normal */ -+ rc |= sleep_to_normal(jbt); -+ break; -+ } -+ break; -+ case JBT_STATE_SLEEP: -+ switch (new_state) { -+ case JBT_STATE_SLEEP: -+ rc = 0; -+ break; -+ case JBT_STATE_DEEP_STANDBY: -+ rc = sleep_to_standby(jbt); -+ break; -+ case JBT_STATE_NORMAL: -+ rc = sleep_to_normal(jbt); -+ break; -+ } -+ break; -+ case JBT_STATE_NORMAL: -+ switch (new_state) { -+ case JBT_STATE_NORMAL: -+ rc = 0; -+ break; -+ case JBT_STATE_DEEP_STANDBY: -+ /* first transition into sleep */ -+ rc = normal_to_sleep(jbt); -+ /* then transition into deep standby */ -+ rc |= sleep_to_standby(jbt); -+ break; -+ case JBT_STATE_SLEEP: -+ rc = normal_to_sleep(jbt); -+ break; -+ } -+ break; -+ } -+ -+ return rc; -+} -+ -+int jbt6k74_display_onoff(int on) -+{ -+ DEBUGP("entering\n"); -+ if (on) -+ return jbt_reg_write_nodata(jbt, JBT_REG_DISPLAY_ON); -+ else -+ return jbt_reg_write_nodata(jbt, JBT_REG_DISPLAY_OFF); -+} -+ -+int jbt6k74_init(void) -+{ -+ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO(); -+ -+ /* initialize SPI for GPIO bitbang */ -+ gpio->GPGCON &= 0xffff033f; -+ gpio->GPGCON |= 0x00005440; -+ -+ /* get LCM out of reset */ -+ gpio->GPCDAT |= (1 << 6); -+ -+ /* according to data sheet: wait 50ms (Tpos of LCM). However, 50ms -+ * seems unreliable with later LCM batches, increasing to 90ms */ -+ udelay(90000); -+ -+ return 0; -+} -+ -+void board_video_init(GraphicDevice *pGD) -+{ -+ S3C24X0_LCD * const lcd = S3C24X0_GetBase_LCD(); -+ -+ lcd->LCDCON1 = 0x00000178; /* CLKVAL=1, BPPMODE=16bpp, TFT, ENVID=0 */ -+ -+ lcd->LCDCON2 = 0x019fc3c1; -+ lcd->LCDCON3 = 0x0039df67; -+ lcd->LCDCON4 = 0x00000007; -+ lcd->LCDCON5 = 0x0001cf09; -+ lcd->LPCSEL = 0x00000000; -+} -Index: u-boot/board/neo1973/common/jbt6k74.h -=================================================================== ---- /dev/null -+++ u-boot/board/neo1973/common/jbt6k74.h -@@ -0,0 +1,14 @@ -+#ifndef _JBT6K74_H -+#define _JBT6K74_H -+ -+enum jbt_state { -+ JBT_STATE_DEEP_STANDBY, -+ JBT_STATE_SLEEP, -+ JBT_STATE_NORMAL, -+}; -+ -+int jbt6k74_init(void); -+int jbt6k74_display_onoff(int on); -+int jbt6k74_enter_state(enum jbt_state new_state); -+ -+#endif -Index: u-boot/board/neo1973/common/lowlevel_init.S -=================================================================== ---- /dev/null -+++ u-boot/board/neo1973/common/lowlevel_init.S -@@ -0,0 +1,187 @@ -+/* -+ * Memory Setup stuff - taken from blob memsetup.S -+ * -+ * Copyright (C) 1999 2000 2001 Erik Mouw (J.A.K.Mouw@its.tudelft.nl) and -+ * Jan-Derk Bakker (J.D.Bakker@its.tudelft.nl) -+ * -+ * Modified for the FIC Neo1973 GTA01 by Harald Welte <laforge@openmoko.org> -+ * -+ * See file CREDITS for list of people who contributed to this -+ * project. -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License as -+ * published by the Free Software Foundation; either version 2 of -+ * the License, or (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, -+ * MA 02111-1307 USA -+ */ -+ -+ -+#include <config.h> -+#include <version.h> -+ -+ -+/* some parameters for the board */ -+ -+/* -+ * -+ * Taken from linux/arch/arm/boot/compressed/head-s3c2410.S -+ * -+ * Copyright (C) 2002 Samsung Electronics SW.LEE <hitchcar@sec.samsung.com> -+ * -+ */ -+ -+#define BWSCON 0x48000000 -+ -+/* BWSCON */ -+#define DW8 (0x0) -+#define DW16 (0x1) -+#define DW32 (0x2) -+#define WAIT (0x1<<2) -+#define UBLB (0x1<<3) -+ -+#define B1_BWSCON (DW32) -+#define B2_BWSCON (DW16) -+#define B3_BWSCON (DW16 + WAIT + UBLB) -+#define B4_BWSCON (DW16) -+#define B5_BWSCON (DW16) -+#define B6_BWSCON (DW32) -+#define B7_BWSCON (DW32) -+ -+/* BANK0CON */ -+#define B0_Tacs 0x0 /* 0clk */ -+#define B0_Tcos 0x0 /* 0clk */ -+#define B0_Tacc 0x7 /* 14clk */ -+#define B0_Tcoh 0x0 /* 0clk */ -+#define B0_Tah 0x0 /* 0clk */ -+#define B0_Tacp 0x0 -+#define B0_PMC 0x0 /* normal */ -+ -+/* BANK1CON */ -+#define B1_Tacs 0x0 /* 0clk */ -+#define B1_Tcos 0x0 /* 0clk */ -+#define B1_Tacc 0x7 /* 14clk */ -+#define B1_Tcoh 0x0 /* 0clk */ -+#define B1_Tah 0x0 /* 0clk */ -+#define B1_Tacp 0x0 -+#define B1_PMC 0x0 -+ -+#define B2_Tacs 0x0 -+#define B2_Tcos 0x0 -+#define B2_Tacc 0x7 -+#define B2_Tcoh 0x0 -+#define B2_Tah 0x0 -+#define B2_Tacp 0x0 -+#define B2_PMC 0x0 -+ -+#define B3_Tacs 0x0 /* 0clk */ -+#define B3_Tcos 0x3 /* 4clk */ -+#define B3_Tacc 0x7 /* 14clk */ -+#define B3_Tcoh 0x1 /* 1clk */ -+#define B3_Tah 0x0 /* 0clk */ -+#define B3_Tacp 0x3 /* 6clk */ -+#define B3_PMC 0x0 /* normal */ -+ -+#define B4_Tacs 0x0 /* 0clk */ -+#define B4_Tcos 0x0 /* 0clk */ -+#define B4_Tacc 0x7 /* 14clk */ -+#define B4_Tcoh 0x0 /* 0clk */ -+#define B4_Tah 0x0 /* 0clk */ -+#define B4_Tacp 0x0 -+#define B4_PMC 0x0 /* normal */ -+ -+#define B5_Tacs 0x0 /* 0clk */ -+#define B5_Tcos 0x0 /* 0clk */ -+#define B5_Tacc 0x7 /* 14clk */ -+#define B5_Tcoh 0x0 /* 0clk */ -+#define B5_Tah 0x0 /* 0clk */ -+#define B5_Tacp 0x0 -+#define B5_PMC 0x0 /* normal */ -+ -+#define B6_MT 0x3 /* SDRAM */ -+#define B6_Trcd 0x1 /* 3clk */ -+#if defined (CONFIG_ARCH_GTA01_v3) || defined(CONFIG_ARCH_GTA01_v4) -+#define B6_SCAN 0x1 /* 9bit */ -+#elif defined(CONFIG_ARCH_GTA01B_v2) || defined(CONFIG_ARCH_GTA01B_v3) || \ -+ defined(CONFIG_ARCH_GTA01B_v4) -+#define B6_SCAN 0x2 /* 10bit */ -+#endif -+ -+#define B7_MT 0x3 /* SDRAM */ -+#define B7_Trcd 0x1 /* 3clk */ -+#define B7_SCAN 0x2 /* 10bit */ -+ -+/* REFRESH parameter */ -+#define REFEN 0x1 /* Refresh enable */ -+#define TREFMD 0x0 /* CBR(CAS before RAS)/Auto refresh */ -+#define Trp 0x1 /* 3clk */ -+#define Trc 0x3 /* 7clk */ -+#define Tchr 0x2 /* 3clk */ -+//#define REFCNT 1113 /* period=15.6us, HCLK=60Mhz, (2048+1-15.6*60) */ -+#define REFCNT 997 /* period=17.5us, HCLK=60Mhz, (2048+1-15.6*60) */ -+/**************************************/ -+ -+_TEXT_BASE: -+ .word TEXT_BASE -+ -+.globl lowlevel_init -+lowlevel_init: -+ /* memory control configuration */ -+ /* make r0 relative the current location so that it */ -+ /* reads SMRDATA out of FLASH rather than memory ! */ -+ adr r0, SMRDATA -+ ldr r1, =BWSCON /* Bus Width Status Controller */ -+ add r2, r0, #13*4 -+0: -+ ldr r3, [r0], #4 -+ str r3, [r1], #4 -+ cmp r2, r0 -+ bne 0b -+ -+ /* setup asynchronous bus mode */ -+ mrc p15, 0, r1 ,c1 ,c0, 0 -+ orr r1, r1, #0xc0000000 -+ mcr p15, 0, r1, c1, c0, 0 -+ -+#if defined(CONFIG_ARCH_GTA01_v4) || defined(CONFIG_ARCH_GTA01B_v2) || defined(CONFIG_ARCH_GTA01B_v3) -+ /* switch on power for NAND */ -+ ldr r0, =0x56000010 /* GPBCON */ -+ ldr r1, [r0] -+ orr r1, r1, #0x10 -+ str r1, [r0] -+ -+ ldr r0, =0x56000014 /* GPBDAT */ -+ ldr r1, [r0] -+ orr r1, r1, #(1 <<2) -+ str r1, [r0] -+#endif -+ -+ /* everything is fine now */ -+ mov pc, lr -+ -+ .ltorg -+/* the literal pools origin */ -+ -+SMRDATA: -+ .word (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28)) -+ .word ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC)) -+ .word ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC)) -+ .word ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC)) -+ .word ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC)) -+ .word ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC)) -+ .word ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC)) -+ .word ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN)) -+ .word ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN)) -+ .word ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT) -+ .word 0xb2 -+ .word 0x30 -+ .word 0x30 -Index: u-boot/board/neo1973/gta01/Makefile -=================================================================== ---- /dev/null -+++ u-boot/board/neo1973/gta01/Makefile -@@ -0,0 +1,47 @@ -+# -+# (C) Copyright 2000, 2001, 2002 -+# Wolfgang Denk, DENX Software Engineering, wd@denx.de. -+# -+# See file CREDITS for list of people who contributed to this -+# project. -+# -+# This program is free software; you can redistribute it and/or -+# modify it under the terms of the GNU General Public License as -+# published by the Free Software Foundation; either version 2 of -+# the License, or (at your option) any later version. -+# -+# This program is distributed in the hope that it will be useful, -+# but WITHOUT ANY WARRANTY; without even the implied warranty of -+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+# GNU General Public License for more details. -+# -+# You should have received a copy of the GNU General Public License -+# along with this program; if not, write to the Free Software -+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, -+# MA 02111-1307 USA -+# -+ -+include $(TOPDIR)/config.mk -+ -+LIB = lib$(BOARD).a -+ -+OBJS := gta01.o pcf50606.o ../common/cmd_neo1973.o ../common/jbt6k74.o -+SOBJS := ../common/lowlevel_init.o -+ -+$(LIB): $(OBJS) $(SOBJS) -+ $(AR) crv $@ $(OBJS) $(SOBJS) -+ -+clean: -+ rm -f $(SOBJS) $(OBJS) -+ -+distclean: clean -+ rm -f $(LIB) core *.bak .depend -+ -+######################################################################### -+ -+.depend: Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c) -+ $(CC) -M $(CPPFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@ -+ -+-include .depend -+ -+######################################################################### -Index: u-boot/board/neo1973/gta01/config.mk -=================================================================== ---- /dev/null -+++ u-boot/board/neo1973/gta01/config.mk -@@ -0,0 +1,34 @@ -+# -+# (C) Copyright 2002 -+# Gary Jennejohn, DENX Software Engineering, <gj@denx.de> -+# David Mueller, ELSOFT AG, <d.mueller@elsoft.ch> -+# -+# FIC Neo1973 GTA01 board with S3C2410X (ARM920T) cpu -+# -+# see http://www.samsung.com/ for more information on SAMSUNG -+# -+ -+# GTA01v3 has 1 bank of 64 MB SDRAM -+# GTA01v4 has 1 bank of 64 MB SDRAM -+# -+# 3000'0000 to 3400'0000 -+# we load ourself to 33F8'0000 -+# -+# GTA01Bv2 or later has 1 bank of 128 MB SDRAM -+# -+# 3000'0000 to 3800'0000 -+# we load ourself to 37F8'0000 -+# -+# Linux-Kernel is expected to be at 3000'8000, entry 3000'8000 -+# optionally with a ramdisk at 3080'0000 -+# -+# download area is 3200'0000 or 3300'0000 -+ -+sinclude $(OBJTREE)/board/$(BOARDDIR)/config.tmp -+ -+ifeq ($(GTA01_BIG_RAM),y) -+# FIXME: TEXT_BASE = 0x37F80000 -+TEXT_BASE = 0x33F80000 -+else -+TEXT_BASE = 0x33F80000 -+endif -Index: u-boot/board/neo1973/gta01/gta01.c -=================================================================== ---- /dev/null -+++ u-boot/board/neo1973/gta01/gta01.c -@@ -0,0 +1,422 @@ -+/* -+ * (C) 2006 by OpenMoko, Inc. -+ * Author: Harald Welte <laforge@openmoko.org> -+ * -+ * based on existing S3C2410 startup code in u-boot: -+ * -+ * (C) Copyright 2002 -+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com> -+ * Marius Groeger <mgroeger@sysgo.de> -+ * -+ * (C) Copyright 2002 -+ * David Mueller, ELSOFT AG, <d.mueller@elsoft.ch> -+ * -+ * See file CREDITS for list of people who contributed to this -+ * project. -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License as -+ * published by the Free Software Foundation; either version 2 of -+ * the License, or (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, -+ * MA 02111-1307 USA -+ */ -+ -+#include <common.h> -+#include <s3c2410.h> -+#include <i2c.h> -+ -+#include "pcf50606.h" -+ -+#include "../common/neo1973.h" -+#include "../common/jbt6k74.h" -+ -+DECLARE_GLOBAL_DATA_PTR; -+ -+/* That many seconds the power key needs to be pressed to power up */ -+#define POWER_KEY_SECONDS 2 -+ -+#if defined(CONFIG_ARCH_GTA01_v3) || defined(CONFIG_ARCH_GTA01_v4) -+//#define M_MDIV 0xA1 /* Fout = 202.8MHz */ -+//#define M_PDIV 0x3 -+//#define M_SDIV 0x1 -+#define M_MDIV 0x90 /* Fout = 202.8MHz */ -+#define M_PDIV 0x7 -+#define M_SDIV 0x0 -+#elif defined(CONFIG_ARCH_GTA01B_v2) || defined(CONFIG_ARCH_GTA01B_v3) -+/* In case the debug board is attached, we cannot go beyond 200 MHz */ -+#if 0 -+#define M_MDIV 0x7d /* Fout = 266MHz */ -+#define M_PDIV 0x1 -+#define M_SDIV 0x1 -+#else -+#define M_MDIV 0x90 /* Fout = 202.8MHz */ -+#define M_PDIV 0x7 -+#define M_SDIV 0x0 -+#endif -+#elif defined(CONFIG_ARCH_GTA01B_v4) -+/* This board doesn't have bus lines at teh debug port, and we can go to 266 */ -+#define M_MDIV 0x7d /* Fout = 266MHz */ -+#define M_PDIV 0x1 -+#define M_SDIV 0x1 -+#else -+#error Please define GTA01 revision -+#endif -+ -+#define U_M_MDIV 0x78 -+#define U_M_PDIV 0x2 -+#define U_M_SDIV 0x3 -+ -+unsigned int neo1973_wakeup_cause; -+extern int nobootdelay; -+ -+static inline void delay (unsigned long loops) -+{ -+ __asm__ volatile ("1:\n" -+ "subs %0, %1, #1\n" -+ "bne 1b":"=r" (loops):"0" (loops)); -+} -+ -+/* -+ * Miscellaneous platform dependent initialisations -+ */ -+ -+int board_init (void) -+{ -+ S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER(); -+ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO(); -+ -+ /* to reduce PLL lock time, adjust the LOCKTIME register */ -+ clk_power->LOCKTIME = 0xFFFFFF; -+ -+ /* configure MPLL */ -+ clk_power->MPLLCON = ((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV); -+ -+ /* some delay between MPLL and UPLL */ -+ delay (4000); -+ -+ /* configure UPLL */ -+ clk_power->UPLLCON = ((U_M_MDIV << 12) + (U_M_PDIV << 4) + U_M_SDIV); -+ -+ /* some delay between MPLL and UPLL */ -+ delay (8000); -+ -+ /* set up the I/O ports */ -+#if defined(CONFIG_ARCH_GTA01_v3) -+ gpio->GPACON = 0x007FFFFF; -+ -+ gpio->GPBCON = 0x00005055; -+ gpio->GPBUP = 0x000007FF; -+ -+ gpio->GPCCON = 0xAAAA12A8; -+ gpio->GPCUP = 0x0000FFFF; -+ -+ gpio->GPDCON = 0xAAAAAAAA; -+ gpio->GPDUP = 0x0000FFFF; -+ -+ gpio->GPECON = 0xAAAAAAAA; -+ gpio->GPEUP = 0x0000FFFF; -+ -+ gpio->GPFCON = 0x00002AA9; -+ gpio->GPFUP = 0x000000FF; -+ -+ gpio->GPGCON = 0xA846F0C0; -+ gpio->GPGUP = 0x0000AFEF; -+ -+ gpio->GPHCON = 0x0008FAAA; -+ gpio->GPHUP = 0x000007FF; -+#elif defined(CONFIG_ARCH_GTA01_v4) -+ gpio->GPACON = 0x005E47FF; -+ -+ gpio->GPBCON = 0x00045015; -+ gpio->GPBUP = 0x000007FF; -+ gpio->GPBDAT |= 0x4; /* Set GPB2 to high (Flash power-up) */ -+ -+ gpio->GPCCON = 0xAAAA12A9; -+ gpio->GPCUP = 0x0000FFFF; -+ -+ gpio->GPDCON = 0xAAAAAAAA; -+ gpio->GPDUP = 0x0000FFFF; -+ -+ gpio->GPECON = 0xA02AAAAA; -+ gpio->GPEUP = 0x0000FFFF; -+ -+ gpio->GPFCON = 0x0000aa09; -+ gpio->GPFUP = 0x000000FF; -+ -+ gpio->GPGCON = 0xFF40F0C1; -+ gpio->GPGUP = 0x0000AFEF; -+ -+ gpio->GPHCON = 0x0000FAAA; -+ gpio->GPHUP = 0x000007FF; -+#elif defined(CONFIG_ARCH_GTA01B_v2) || defined(CONFIG_ARCH_GTA01B_v3) -+ gpio->GPACON = 0x005E4FFF; -+ -+ gpio->GPBCON = 0x00145415; -+ gpio->GPBUP = 0x000007FF; -+ gpio->GPBDAT |= 0x4; /* Set GPB2 to high (Flash power-up) */ -+ -+ gpio->GPCCON = 0xAAAA12A9; -+ gpio->GPCUP = 0x0000FFFF; -+ -+ gpio->GPDCON = 0xAAAAAAAA; -+ gpio->GPDUP = 0x0000FFFF; -+ -+ gpio->GPECON = 0xA02AAAAA; -+ gpio->GPEUP = 0x0000FFFF; -+ -+ gpio->GPFCON = 0x0000aa19; -+ gpio->GPFUP = 0x000000FF; -+ gpio->GPFDAT |= 0x4; /* Set GBF2 to high (nGSM_EN) */ -+ -+ gpio->GPGCON = 0xFF40F0C1; -+ gpio->GPGUP = 0x0000AFEF; -+ -+ gpio->GPHCON = 0x0000FAAA; -+ gpio->GPHUP = 0x000007FF; -+#elif defined(CONFIG_ARCH_GTA01B_v4) -+ gpio->GPACON = 0x0005E0FFF; -+ gpio->GPADAT |= (1 << 16); /* Set GPA16 to high (nNAND_WP) */ -+ -+ gpio->GPBCON = 0x00045455; -+ gpio->GPBUP = 0x000007FF; -+ gpio->GPBDAT |= 0x4; /* Set GPB2 to high (SD power down) */ -+ -+ gpio->GPCCON = 0xAAAA12A9; -+ gpio->GPCUP = 0x0000FFFF; -+ -+ gpio->GPDCON = 0xAAAAAAAA; -+ gpio->GPDUP = 0x0000FFFF; -+ -+ gpio->GPECON = 0xAAAAAAAA; -+ gpio->GPEUP = 0x0000FFFF; -+ -+ gpio->GPFCON = 0x0000aa99; -+ gpio->GPFUP = 0x000000FF; -+ gpio->GPFDAT |= 0x4; /* Set GBF2 to high (nGSM_EN) */ -+ -+ gpio->GPGCON = 0xFF14F0F8; -+ gpio->GPGUP = 0x0000AFEF; -+ -+ gpio->GPHCON = 0x0000FAAA; -+ gpio->GPHUP = 0x000007FF; -+#else -+#error Please define GTA01 version -+#endif -+ -+ /* arch number of SMDK2410-Board */ -+ gd->bd->bi_arch_number = MACH_TYPE_NEO1973_GTA01; -+ -+ /* adress of boot parameters */ -+ gd->bd->bi_boot_params = 0x30000100; -+ -+ icache_enable(); -+ dcache_enable(); -+ -+ return 0; -+} -+ -+int board_late_init(void) -+{ -+ unsigned char tmp; -+ char buf[32]; -+ -+ /* Initialize the Power Management Unit with a safe register set */ -+ pcf50606_init(); -+ -+ /* obtain wake-up reason, save INT1 in environment */ -+ tmp = pcf50606_reg_read(PCF50606_REG_INT1); -+ sprintf(buf, "0x%02x", tmp); -+ setenv("pcf50606_int1", buf); -+ -+ if (tmp & PCF50606_INT1_ALARM) { -+ /* we've been woken up by RTC alarm or charger insert, boot */ -+ neo1973_wakeup_cause = NEO1973_WAKEUP_ALARM; -+ goto continue_boot; -+ } -+ if (tmp & PCF50606_INT1_EXTONR) { -+ neo1973_wakeup_cause = NEO1973_WAKEUP_CHARGER; -+ } -+ -+ if (tmp & PCF50606_INT1_ONKEYF) { -+ int seconds = 0; -+ neo1973_wakeup_cause = NEO1973_WAKEUP_POWER_KEY; -+ /* we've been woken up by a falling edge of the onkey */ -+ -+ /* we can't just setenv(bootdelay,-1) because that would -+ * accidentially become permanent if the user does saveenv */ -+ if (neo1973_911_key_pressed()) -+ nobootdelay = 1; -+ -+ while (1) { -+ u_int8_t int1, oocs; -+ -+ oocs = pcf50606_reg_read(PCF50606_REG_OOCS); -+ if (oocs & PFC50606_OOCS_ONKEY) -+ break; -+ -+ int1 = pcf50606_reg_read(PCF50606_REG_INT1); -+ if (int1 & PCF50606_INT1_SECOND) -+ seconds++; -+ -+ if (seconds >= POWER_KEY_SECONDS) -+ goto continue_boot; -+ } -+ /* Power off if minimum number of seconds not reached */ -+ neo1973_poweroff(); -+ } -+ -+ /* if there's no other reason, must be regular reset */ -+ neo1973_wakeup_cause = NEO1973_WAKEUP_RESET; -+ -+continue_boot: -+ jbt6k74_init(); -+ jbt6k74_enter_state(JBT_STATE_NORMAL); -+ jbt6k74_display_onoff(1); -+ -+ /* issue a short pulse with the vibrator */ -+ neo1973_vibrator(1); -+ udelay(50000); -+ neo1973_vibrator(0); -+ -+ /* switch on the backlight */ -+ neo1973_backlight(1); -+ -+#if defined(CONFIG_ARCH_GTA01B_v4) -+ { -+ /* check if sd card is inserted, and power-up if it is */ -+ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO(); -+ if (!(gpio->GPFDAT & (1 << 5))) -+ gpio->GPBDAT &= ~(1 << 2); -+ } -+#endif -+ -+ return 0; -+} -+ -+int dram_init (void) -+{ -+ gd->bd->bi_dram[0].start = PHYS_SDRAM_1; -+ gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE; -+ -+ return 0; -+} -+ -+u_int32_t get_board_rev(void) -+{ -+#if defined(CONFIG_ARCH_GTA01_v3) -+ return 0x00000130; -+#elif defined(CONFIG_ARCH_GTA01_v4) -+ return 0x00000140; -+#elif defined(CONFIG_ARCH_GTA01B_v2) -+ return 0x00000220; -+#elif defined(CONFIG_ARCH_GTA01B_v3) -+ return 0x00000230; -+#elif defined(CONFIG_ARCH_GTA01B_v4) -+ return 0x00000240; -+#endif -+} -+ -+void neo1973_poweroff(void) -+{ -+ serial_printf("poweroff\n"); -+ udc_disconnect(); -+ pcf50606_reg_write(PCF50606_REG_OOCC1, PCF50606_OOCC1_GOSTDBY); -+ /* don't return to caller */ -+ while (1) ; -+} -+ -+void neo1973_backlight(int on) -+{ -+ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO(); -+ if (on) -+ gpio->GPBDAT |= 0x01; -+ else -+ gpio->GPBDAT &= ~0x01; -+} -+ -+void neo1973_vibrator(int on) -+{ -+ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO(); -+ if (on) -+#if defined(CONFIG_ARCH_GTA01_v3) || defined(CONFIG_ARCH_GTA01_v4) -+ gpio->GPGDAT |= (1 << 11); /* GPG11 */ -+#elif defined(CONFIG_ARCH_GTA01B_v2) || defined(CONFIG_ARCH_GTA01B_v3) -+ gpio->GPBDAT |= (1 << 10); /* GPB10 */ -+#elif defined(CONFIG_ARCH_GTA01B_v4) -+ gpio->GPBDAT |= (1 << 3); /* GPB3 */ -+#endif -+ else -+#if defined(CONFIG_ARCH_GTA01_v3) || defined(CONFIG_ARCH_GTA01_v4) -+ gpio->GPGDAT &= ~(1 << 11); /* GPG11 */ -+#elif defined(CONFIG_ARCH_GTA01B_v2) || defined(CONFIG_ARCH_GTA01B_v3) -+ gpio->GPBDAT &= ~(1 << 10); /* GPB10 */ -+#elif defined(CONFIG_ARCH_GTA01B_v4) -+ gpio->GPBDAT &= ~(1 << 3); /* GPB3 */ -+#endif -+} -+ -+int neo1973_911_key_pressed(void) -+{ -+ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO(); -+ if (gpio->GPFDAT & (1 << 6)) -+ return 0; -+ return 1; -+} -+ -+static const char *chgstate_names[] = { -+ [PCF50606_MBCC1_CHGMOD_QUAL] = "qualification", -+ [PCF50606_MBCC1_CHGMOD_PRE] = "pre", -+ [PCF50606_MBCC1_CHGMOD_TRICKLE] = "trickle", -+ [PCF50606_MBCC1_CHGMOD_FAST_CCCV] = "fast_cccv", -+ [PCF50606_MBCC1_CHGMOD_FAST_NOCC] = "fast_nocc", -+ [PCF50606_MBCC1_CHGMOD_FAST_NOCV] = "fast_nocv", -+ [PCF50606_MBCC1_CHGMOD_FAST_SW] = "fast_switch", -+ [PCF50606_MBCC1_CHGMOD_IDLE] = "idle", -+}; -+ -+const char *neo1973_get_charge_status(void) -+{ -+ u_int8_t mbcc1 = pcf50606_reg_read(PCF50606_REG_MBCC1); -+ u_int8_t chgmod = (mbcc1 & PCF50606_MBCC1_CHGMOD_MASK); -+ return chgstate_names[chgmod]; -+} -+ -+int neo1973_set_charge_mode(enum neo1973_charger_cmd cmd) -+{ -+ switch (cmd) { -+ case NEO1973_CHGCMD_NONE: -+ break; -+ case NEO1973_CHGCMD_AUTOFAST: -+ pcf50606_reg_set_bit_mask(PCF50606_REG_MBCC1, -+ PCF50606_MBCC1_AUTOFST, -+ PCF50606_MBCC1_AUTOFST); -+ break; -+ case NEO1973_CHGCMD_NO_AUTOFAST: -+ pcf50606_reg_set_bit_mask(PCF50606_REG_MBCC1, -+ PCF50606_MBCC1_AUTOFST, 0); -+ break; -+ case NEO1973_CHGCMD_OFF: -+ pcf50606_reg_set_bit_mask(PCF50606_REG_MBCC1, -+ PCF50606_MBCC1_CHGMOD_MASK, -+ PCF50606_MBCC1_CHGMOD_IDLE); -+ break; -+ -+ case NEO1973_CHGCMD_FAST: -+ case NEO1973_CHGCMD_FASTER: -+ pcf50606_reg_set_bit_mask(PCF50606_REG_MBCC1, -+ PCF50606_MBCC1_CHGMOD_MASK, -+ PCF50606_MBCC1_CHGMOD_FAST_CCCV); -+ break; -+ } -+ return 0; -+} -+ -Index: u-boot/board/neo1973/gta01/pcf50606.c -=================================================================== ---- /dev/null -+++ u-boot/board/neo1973/gta01/pcf50606.c -@@ -0,0 +1,100 @@ -+ -+#include <common.h> -+#include <pcf50606.h> -+ -+/* initial register set for PCF50606 in Neo1973 devices */ -+const u_int8_t pcf50606_initial_regs[__NUM_PCF50606_REGS] = { -+ [PCF50606_REG_OOCS] = 0x00, -+ /* gap */ -+ [PCF50606_REG_INT1M] = PCF50606_INT1_SECOND, -+ [PCF50606_REG_INT2M] = 0x00, -+ [PCF50606_REG_INT3M] = PCF50606_INT3_TSCPRES, -+ [PCF50606_REG_OOCC1] = PCF50606_OOCC1_RTCWAK | -+ PCF50606_OOCC1_CHGWAK | -+ PCF50606_OOCC1_EXTONWAK_HIGH, -+ [PCF50606_REG_OOCC2] = PCF50606_OOCC2_ONKEYDB_14ms | -+ PCF50606_OOCC2_EXTONDB_14ms, -+ /* gap */ -+ [PCF50606_REG_PSSC] = 0x00, -+ [PCF50606_REG_PWROKM] = 0x00, -+ /* gap */ -+#if defined(CONFIG_ARCH_GTA01B_v2) -+ [PCF50606_REG_DCDC1] = 0x1e, /* GL_3V3: off */ -+#elif defined(CONFIG_ARCH_GTA01B_v3) || defined(CONFIG_ARCH_GTA01B_v4) -+ [PCF50606_REG_DCDC1] = 0x18, /* GL_1V5: off */ -+#endif -+ [PCF50606_REG_DCDC2] = 0x00, -+ [PCF50606_REG_DCDC3] = 0x00, -+ [PCF50606_REG_DCDC4] = 0x30, /* 1.25A */ -+ -+ [PCF50606_REG_DCDEC1] = 0xe8, /* IO_3V3: on */ -+ [PCF50606_REG_DCDEC2] = 0x00, -+ -+#if defined(CONFIG_ARCH_GTA01_v3) || defined(CONFIG_ARCH_GTA01_v4) -+ [PCF50606_REG_DCUDC1] = 0xe3, /* CORE_1V8: 1.8V */ -+#elif defined(CONFIG_ARCH_GTA01B_v2) || defined(CONFIG_ARCH_GTA01B_v3) -+ [PCF50606_REG_DCUDC1] = 0xe4, /* CORE_1V8: 2.1V */ -+#elif defined(CONFIG_ARCH_GTA01B_v4) -+ [PCF50606_REG_DCUDC1] = 0xc4, /* CORE_1V8: 2.1V if PWREN2 = HIGH */ -+#endif -+ [PCF50606_REG_DCUDC2] = 0x30, /* 1.25A current limit */ -+ -+#if defined(CONFIG_ARCH_GTA01_v3) -+ [PCF50606_REG_IOREGC] = 0x13, /* VTCXO_2V8: off */ -+#elif defined(CONFIG_ARCH_GTA01_v4) || defined(CONFIG_ARCH_GTA01B_v2) || \ -+ defined(CONFIG_ARCH_GTA01B_v3) || defined(CONFIG_ARCH_GTA01B_v4) -+ //see internal bug 94 [PCF50606_REG_IOREGC] = 0x18, /* CODEC_3V3: off */ -+ [PCF50606_REG_IOREGC] = 0xf8, /* CODEC_3V3: on */ -+#endif -+ -+#if defined(CONFIG_ARCH_GTA01_v3) || defined(CONFIG_ARCH_GTA01_v4) -+ [PCF50606_REG_D1REGC1] = 0x15, /* VRF_3V: off */ -+#elif defined(CONFIG_ARCH_GTA01B_v2) || defined(CONFIG_ARCH_GTA01B_v3) || \ -+ defined(CONFIG_ARCH_GTA01B_v4) -+ [PCF50606_REG_D1REGC1] = 0x16, /* BT_3V15: off */ -+#endif -+ -+#if defined(CONFIG_ARCH_GTA01_v3) -+ [PCF50606_REG_D2REGC1] = 0xf8, /* SD_3V3: on */ -+#elif defined(CONFIG_ARCH_GTA01_v4) || defined(CONFIG_ARCH_GTA01B_v2) || \ -+ defined(CONFIG_ARCH_GTA01B_v3) || defined(CONFIG_ARCH_GTA01B_v4) -+ [PCF50606_REG_D2REGC1] = 0x10, /* GL_2V5: off */ -+#endif -+ -+#if defined(CONFIG_ARCH_GTA01_v3) -+ [PCF50606_REG_D3REGC1] = 0x18, /* CODEC_3V3: off */ -+#elif defined(CONFIG_ARCH_GTA01_v4) -+ [PCF50606_REG_D3REGC1] = 0x13, /* VTXCO_2V8: off */ -+#elif defined(CONFIG_ARCH_GTA01B_v2) || defined(CONFIG_ARCH_GTA01B_v3) -+ [PCF50606_REG_D3REGC1] = 0x00, /* USER1: off */ -+#elif defined(CONFIG_ARCH_GTA01B_v4) -+ [PCF50606_REG_D3REGC1] = 0xec, /* STBY_1V8: 2.1V */ -+#endif -+ -+ [PCF50606_REG_LPREGC1] = 0xf8, /* LCM_3V3: on */ -+ [PCF50606_REG_LPREGC2] = 0x00, -+ -+ [PCF50606_REG_MBCC1] = 0x01, /* CHGAPE */ -+ [PCF50606_REG_MBCC2] = 0x00, /* unlimited charging */ -+ [PCF50606_REG_MBCC3] = 0x1a, /* 0.2*Ifast, 4.20V */ -+ [PCF50606_REG_BBCC] = 0x1f, /* 400uA */ -+ [PCF50606_REG_ADCC1] = 0x00, -+ [PCF50606_REG_ADCC2] = 0x00, -+ /* gap */ -+#if defined(CONFIG_ARCH_GTA01B_v4) -+ [PCF50606_REG_ACDC1] = 0x86, /* ACD thresh 1.6V, enabled */ -+#else -+ [PCF50606_REG_ACDC1] = 0x00, -+#endif -+ [PCF50606_REG_BVMC] = PCF50606_BVMC_THRSHLD_3V3, -+ [PCF50606_REG_PWMC1] = 0x00, -+ [PCF50606_REG_LEDC1] = 0x00, -+ [PCF50606_REG_LEDC2] = 0x00, -+ [PCF50606_REG_GPOC1] = 0x00, -+ [PCF50606_REG_GPOC2] = 0x00, -+ [PCF50606_REG_GPOC3] = 0x00, -+ [PCF50606_REG_GPOC4] = 0x00, -+ [PCF50606_REG_GPOC5] = 0x00, -+}; -+ -+ -Index: u-boot/board/neo1973/gta01/split_by_variant.sh -=================================================================== ---- /dev/null -+++ u-boot/board/neo1973/gta01/split_by_variant.sh -@@ -0,0 +1,57 @@ -+#!/bin/sh -+# --------------------------------------------------------- -+# Set the core module defines according to Core Module -+# --------------------------------------------------------- -+# --------------------------------------------------------- -+# Set up the GTA01 type define -+# --------------------------------------------------------- -+ -+CFGINC=${obj}include/config.h -+CFGTMP=${obj}board/neo1973/gta01/config.tmp -+ -+mkdir -p ${obj}include -+if [ "$1" == "" ] -+then -+ echo "$0:: No parameters - using GTA01Bv3 config" -+ echo "#define CONFIG_ARCH_GTA01B_v3" > $CFGINC -+ echo "GTA01_BIG_RAM=y" > $CFGTMP -+else -+ case "$1" in -+ gta01v4_config) -+ echo "#define CONFIG_ARCH_GTA01_v4" > $CFGINC -+ echo "GTA01_BIG_RAM=n" > $CFGTMP -+ ;; -+ -+ gta01v3_config) -+ echo "#define CONFIG_ARCH_GTA01_v3" > $CFGINC -+ echo "GTA01_BIG_RAM=n" > $CFGTMP -+ ;; -+ -+ gta01bv2_config) -+ echo "#define CONFIG_ARCH_GTA01B_v2" > $CFGINC -+ echo "GTA01_BIG_RAM=y" > $CFGTMP -+ ;; -+ -+ gta01bv3_config) -+ echo "#define CONFIG_ARCH_GTA01B_v3" > $CFGINC -+ echo "GTA01_BIG_RAM=y" > $CFGTMP -+ ;; -+ -+ gta01bv4_config) -+ echo "#define CONFIG_ARCH_GTA01B_v4" > $CFGINC -+ echo "GTA01_BIG_RAM=y" > $CFGTMP -+ ;; -+ -+ *) -+ echo "$0:: Unrecognised config - using GTA01Bv4 config" -+ echo "#define CONFIG_ARCH_GTA01B_v4" > $CFGINC -+ echo "GTA01_BIG_RAM=y" > $CFGTMP -+ ;; -+ -+ esac -+ -+fi -+# --------------------------------------------------------- -+# Complete the configuration -+# --------------------------------------------------------- -+$MKCONFIG -a neo1973_gta01 arm arm920t gta01 neo1973 s3c24x0 -Index: u-boot/board/neo1973/gta01/u-boot.lds -=================================================================== ---- /dev/null -+++ u-boot/board/neo1973/gta01/u-boot.lds -@@ -0,0 +1,58 @@ -+/* -+ * (C) Copyright 2002 -+ * Gary Jennejohn, DENX Software Engineering, <gj@denx.de> -+ * -+ * See file CREDITS for list of people who contributed to this -+ * project. -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License as -+ * published by the Free Software Foundation; either version 2 of -+ * the License, or (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, -+ * MA 02111-1307 USA -+ */ -+ -+OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") -+/*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/ -+OUTPUT_ARCH(arm) -+ENTRY(_start) -+SECTIONS -+{ -+ . = 0x00000000; -+ -+ . = ALIGN(4); -+ .text : -+ { -+ cpu/arm920t/start.o (.text) -+ cpu/arm920t/s3c24x0/nand_read.o (.text) -+ *(.text) -+ } -+ -+ . = ALIGN(4); -+ .rodata : { *(.rodata) } -+ -+ . = ALIGN(4); -+ .data : { *(.data) } -+ -+ . = ALIGN(4); -+ .got : { *(.got) } -+ -+ . = .; -+ __u_boot_cmd_start = .; -+ .u_boot_cmd : { *(.u_boot_cmd) } -+ __u_boot_cmd_end = .; -+ -+ . = ALIGN(4); -+ __bss_start = .; -+ .bss : { *(.bss) } -+ _end = .; -+} -Index: u-boot/include/configs/neo1973_gta01.h -=================================================================== ---- /dev/null -+++ u-boot/include/configs/neo1973_gta01.h -@@ -0,0 +1,265 @@ -+/* -+ * (C) Copyright 2006 OpenMoko, Inc. -+ * Author: Harald Welte <laforge@openmoko.org> -+ * -+ * Configuation settings for the FIC Neo1973 GTA01 Linux GSM phone -+ * -+ * See file CREDITS for list of people who contributed to this -+ * project. -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License as -+ * published by the Free Software Foundation; either version 2 of -+ * the License, or (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, -+ * MA 02111-1307 USA -+ */ -+ -+#ifndef __CONFIG_H -+#define __CONFIG_H -+ -+#if defined(BUILD_FOR_RAM) -+/* If we want to start u-boot from inside RAM */ -+#define CONFIG_SKIP_RELOCATE_UBOOT 1 -+#define CONFIG_SKIP_LOWLEVEL_INIT 1 -+#else -+/* we want to start u-boot directly from within NAND flash */ -+#define CONFIG_S3C2410_NAND_BOOT 1 -+#define CONFIG_S3C2410_NAND_SKIP_BAD 1 -+#endif -+ -+#define CFG_UBOOT_SIZE 0x40000 /* size of u-boot, for NAND loading */ -+ -+/* -+ * High Level Configuration Options -+ * (easy to change) -+ */ -+#define CONFIG_ARM920T 1 /* This is an ARM920T Core */ -+#define CONFIG_S3C2410 1 /* in a SAMSUNG S3C2410 SoC */ -+#define CONFIG_SMDK2410 1 /* on a SAMSUNG SMDK2410 Board */ -+ -+/* input clock of PLL */ -+#define CONFIG_SYS_CLK_FREQ 12000000/* the GTA01 has 12MHz input clock */ -+ -+ -+#define USE_920T_MMU 1 -+#define CONFIG_USE_IRQ 1 -+ -+/* -+ * Size of malloc() pool -+ */ -+#define CFG_MALLOC_LEN (CFG_ENV_SIZE + 128*1024) -+#define CFG_GBL_DATA_SIZE 128 /* size in bytes reserved for initial data */ -+ -+/* -+ * Hardware drivers -+ */ -+ -+/* -+ * select serial console configuration -+ */ -+#define CONFIG_SERIAL1 1 /* we use SERIAL 1 on GTA01 */ -+ -+/************************************************************ -+ * RTC -+ ************************************************************/ -+#define CONFIG_RTC_S3C24X0 1 -+ -+/* allow to overwrite serial and ethaddr */ -+#define CONFIG_ENV_OVERWRITE -+ -+#define CONFIG_BAUDRATE 115200 -+ -+/*********************************************************** -+ * Command definition -+ ***********************************************************/ -+#define CONFIG_COMMANDS (\ -+ CFG_CMD_BDI | \ -+ CFG_CMD_LOADS | \ -+ CFG_CMD_LAODB | \ -+ CFG_CMD_IMI | \ -+ CFG_CMD_CACHE | \ -+ CFG_CMD_MEMORY | \ -+ CFG_CMD_ENV | \ -+ /* CFG_CMD_IRQ | */ \ -+ CFG_CMD_BOOTD | \ -+ CFG_CMD_CONSOLE | \ -+ CFG_CMD_ASKENV | \ -+ CFG_CMD_RUN | \ -+ CFG_CMD_ECHO | \ -+ CFG_CMD_I2C | \ -+ CFG_CMD_REGINFO | \ -+ CFG_CMD_IMMAP | \ -+ CFG_CMD_DATE | \ -+ CFG_CMD_AUTOSCRIPT | \ -+ CFG_CMD_BSP | \ -+ CFG_CMD_ELF | \ -+ CFG_CMD_MISC | \ -+ /* CFG_CMD_USB | */ \ -+ /* CFG_CMD_JFFS2 | */ \ -+ CFG_CMD_DIAG | \ -+ /* CFG_CMD_HWFLOW | */ \ -+ CFG_CMD_SAVES | \ -+ CFG_CMD_NAND | \ -+ CFG_CMD_PORTIO | \ -+ CFG_CMD_MMC | \ -+ CFG_CMD_FAT | \ -+ CFG_CMD_EXT2 | \ -+ 0) -+/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */ -+#include <cmd_confdefs.h> -+ -+#define CONFIG_BOOTDELAY 3 -+#define CONFIG_BOOTARGS "rootfstype=jffs2 root=/dev/mtdblock4 console=ttySAC0,115200 console=tty0 loglevel=8" -+#define CONFIG_BOOTCOMMAND "nand read.e 0x32000000 0x34000 0x200000; bootm 0x32000000" -+ -+#define CONFIG_DOS_PARTITION 1 -+ -+#if (CONFIG_COMMANDS & CFG_CMD_KGDB) -+#define CONFIG_KGDB_BAUDRATE 115200 /* speed to run kgdb serial port */ -+/* what's this ? it's not used anywhere */ -+#define CONFIG_KGDB_SER_INDEX 1 /* which serial port to use */ -+#endif -+ -+/* -+ * Miscellaneous configurable options -+ */ -+#define CFG_LONGHELP /* undef to save memory */ -+#if defined(CONFIG_ARCH_GTA01_v3) -+#define CFG_PROMPT "GTA01v3 # " /* Monitor Command Prompt */ -+#elif defined(CONFIG_ARCH_GTA01_v4) -+#define CFG_PROMPT "GTA01v4 # " /* Monitor Command Prompt */ -+#elif defined(CONFIG_ARCH_GTA01B_v2) -+#define CFG_PROMPT "GTA01Bv2 # " /* Monitor Command Prompt */ -+#elif defined(CONFIG_ARCH_GTA01B_v3) -+#define CFG_PROMPT "GTA01Bv3 # " /* Monitor Command Prompt */ -+#elif defined(CONFIG_ARCH_GTA01B_v4) -+#define CFG_PROMPT "GTA01Bv4 # " /* Monitor Command Prompt */ -+#endif -+#define CFG_CBSIZE 256 /* Console I/O Buffer Size */ -+#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */ -+#define CFG_MAXARGS 16 /* max number of command args */ -+#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */ -+ -+#define CFG_MEMTEST_START 0x30000000 /* memtest works on */ -+#define CFG_MEMTEST_END 0x33F00000 /* 63 MB in DRAM */ -+ -+#undef CFG_CLKS_IN_HZ /* everything, incl board info, in Hz */ -+ -+#define CFG_LOAD_ADDR 0x33000000 /* default load address */ -+ -+/* the PWM TImer 4 uses a counter of 15625 for 10 ms, so we need */ -+/* it to wrap 100 times (total 1562500) to get 1 sec. */ -+#define CFG_HZ 1562500 -+ -+/* valid baudrates */ -+#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 } -+ -+/*----------------------------------------------------------------------- -+ * Stack sizes -+ * -+ * The stack sizes are set up in start.S using the settings below -+ */ -+#define CONFIG_STACKSIZE (128*1024) /* regular stack */ -+#ifdef CONFIG_USE_IRQ -+#define CONFIG_STACKSIZE_IRQ (4*1024) /* IRQ stack */ -+#define CONFIG_STACKSIZE_FIQ (4*1024) /* FIQ stack */ -+#endif -+ -+#if 0 -+#define CONFIG_USB_OHCI 1 -+#endif -+ -+/*----------------------------------------------------------------------- -+ * Physical Memory Map -+ */ -+#define CONFIG_NR_DRAM_BANKS 1 /* we have 1 bank of DRAM */ -+#define PHYS_SDRAM_1 0x30000000 /* SDRAM Bank #1 */ -+#if defined(CONFIG_ARCH_GTA01_v3) || defined(CONFIG_ARCH_GTA01_v4) -+#define PHYS_SDRAM_1_SIZE 0x04000000 /* 64 MB */ -+#elif defined(CONFIG_ARCH_GTA01B_v2) || defined(CONFIG_ARCH_GTA01B_v3) || \ -+ defined(CONFIG_ARCH_GTA01B_v4) -+#define PHYS_SDRAM_1_SIZE 0x08000000 /* 128 MB */ -+#else -+#error Please define GTA01 variant -+#endif -+#define PHYS_SDRAM_RES_SIZE 0x00200000 /* 2 MB for frame buffer */ -+ -+/*----------------------------------------------------------------------- -+ * FLASH and environment organization -+ */ -+ -+/* No NOR flash in this device */ -+#define CFG_NO_FLASH 1 -+ -+#define CFG_ENV_IS_IN_NAND 1 -+#define CFG_ENV_SIZE 0x4000 /* 16k Total Size of Environment Sector */ -+#define CFG_ENV_OFFSET_OOB 1 /* Location of ENV stored in block 0 OOB */ -+ -+#define NAND_MAX_CHIPS 1 -+#define CFG_NAND_BASE 0x4e000000 -+#define CFG_MAX_NAND_DEVICE 1 -+ -+#define CONFIG_MMC 1 -+#define CFG_MMC_BASE 0xff000000 -+ -+/* EXT2 driver */ -+#define CONFIG_EXT2 1 -+ -+#define CONFIG_FAT 1 -+#define CONFIG_SUPPORT_VFAT -+ -+#if 0 -+/* JFFS2 driver */ -+#define CONFIG_JFFS2_CMDLINE 1 -+#define CONFIG_JFFS2_NAND 1 -+#define CONFIG_JFFS2_NAND_DEV 0 -+#define CONFIG_JFFS2_NAND_OFF 0x634000 -+#define CONFIG_JFFS2_NAND_SIZE 0x39cc000 -+#endif -+ -+/* ATAG configuration */ -+#define CONFIG_INITRD_TAG 1 -+#define CONFIG_SETUP_MEMORY_TAGS 1 -+#define CONFIG_CMDLINE_TAG 1 -+#define CONFIG_REVISION_TAG 1 -+#if 0 -+#define CONFIG_SERIAL_TAG 1 -+#endif -+ -+#define CONFIG_DRIVER_S3C24X0_I2C 1 -+#define CONFIG_HARD_I2C 1 -+#define CFG_I2C_SPEED 400000 /* 400kHz according to PCF50606 data sheet */ -+#define CFG_I2C_SLAVE 0x7f -+ -+/* we have a board_late_init() function */ -+#define BOARD_LATE_INIT 1 -+ -+#if 1 -+#define CONFIG_VIDEO -+#define CONFIG_VIDEO_S3C2410 -+#define CONFIG_CFB_CONSOLE -+#define CONFIG_VIDEO_LOGO -+#define CONFIG_VGA_AS_SINGLE_DEVICE -+ -+#define VIDEO_KBD_INIT_FCT 0 -+#define VIDEO_TSTC_FCT serial_tstc -+#define VIDEO_GETC_FCT serial_getc -+ -+#define LCD_VIDEO_ADDR 0x33d00000 -+#endif -+ -+#define CONFIG_S3C2410_NAND_BBT 1 -+#define CONFIG_S3C2410_NAND_HWECC 1 -+ -+#define CONFIG_DRIVER_PCF50606 1 -+ -+#endif /* __CONFIG_H */ -Index: u-boot/board/neo1973/common/neo1973.h -=================================================================== ---- /dev/null -+++ u-boot/board/neo1973/common/neo1973.h -@@ -0,0 +1,32 @@ -+#ifndef _NEO1973_H -+#define _NEO1973_H -+ -+enum wakeup_reason { -+ NEO1973_WAKEUP_NONE, -+ NEO1973_WAKEUP_RESET, -+ NEO1973_WAKEUP_POWER_KEY, -+ NEO1973_WAKEUP_CHARGER, -+ NEO1973_WAKEUP_ALARM, -+}; -+ -+enum neo1973_charger_cmd { -+ NEO1973_CHGCMD_NONE, -+ NEO1973_CHGCMD_AUTOFAST, -+ NEO1973_CHGCMD_NO_AUTOFAST, -+ NEO1973_CHGCMD_OFF, -+ NEO1973_CHGCMD_FAST, -+ NEO1973_CHGCMD_FASTER, -+}; -+ -+extern unsigned int neo1973_wakeup_cause; -+ -+void neo1973_poweroff(void); -+void neo1973_backlight(int on); -+void neo1973_vibrator(int on); -+ -+int neo1973_911_key_pressed(void); -+ -+const char *neo1973_get_charge_status(void); -+int neo1973_set_charge_mode(enum neo1973_charger_cmd cmd); -+ -+#endif |