summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2008-12-09 17:01:02 +0100
committerJeremy Lainé <jeremy.laine@m4x.org>2008-12-09 17:01:02 +0100
commita72c5b3bfce8525fda73a0b87008c83e309d825e (patch)
tree08f3659a61433ba9179222b2007cd5fabb33fbed
parenta61d3745d51ff8b2c7c8b307bfccea031cf99e30 (diff)
u-boot: update patches for boc01 machine
-rw-r--r--packages/u-boot/u-boot-1.3.2/boc01/001-081209-SPI.patch70
-rw-r--r--packages/u-boot/u-boot-1.3.2/boc01/002-081204-GPIO.patch229
-rw-r--r--packages/u-boot/u-boot-1.3.2/boc01/003-081205-DTT_LM73.patch44
-rw-r--r--packages/u-boot/u-boot-1.3.2/boc01/004-081205-WATCHDOG.patch15
-rw-r--r--packages/u-boot/u-boot-1.3.2/boc01/006-081205-EEPROM_INTERSIL.patch16
-rw-r--r--packages/u-boot/u-boot-1.3.2/boc01/007-081205-CAPSENSE.patch599
-rw-r--r--packages/u-boot/u-boot-1.3.2/boc01/008-081205-TSEC.patch180
-rw-r--r--packages/u-boot/u-boot-1.3.2/boc01/009-081205-EXIO.patch139
-rw-r--r--packages/u-boot/u-boot-1.3.2/boc01/010-081205-LCD.patch520
-rw-r--r--packages/u-boot/u-boot_1.3.2.bb20
10 files changed, 1822 insertions, 10 deletions
diff --git a/packages/u-boot/u-boot-1.3.2/boc01/001-081209-SPI.patch b/packages/u-boot/u-boot-1.3.2/boc01/001-081209-SPI.patch
new file mode 100644
index 0000000000..183cf49395
--- /dev/null
+++ b/packages/u-boot/u-boot-1.3.2/boc01/001-081209-SPI.patch
@@ -0,0 +1,70 @@
+Index: u-boot-1.3.2/board/freescale/mpc8313erdb/mpc8313erdb.c
+===================================================================
+--- u-boot-1.3.2.orig/board/freescale/mpc8313erdb/mpc8313erdb.c 2008-11-24 16:34:21.000000000 +0100
++++ u-boot-1.3.2/board/freescale/mpc8313erdb/mpc8313erdb.c 2008-11-24 16:44:59.000000000 +0100
+@@ -28,6 +28,7 @@
+ #endif
+ #include <pci.h>
+ #include <mpc83xx.h>
++#include <spi.h>
+
+ DECLARE_GLOBAL_DATA_PTR;
+
+@@ -107,3 +108,33 @@
+ #endif
+ }
+ #endif
++
++
++/*
++ * The following are used to control the SPI chip selects for the SPI command.
++ */
++#ifdef CONFIG_HARD_SPI
++
++#define SPI_CS_MASK 0x80000000
++
++void spi_eeprom_chipsel(int cs)
++{
++ volatile gpio83xx_t *iopd = &((immap_t *)CFG_IMMR)->gpio[0];
++
++ if (cs)
++ iopd->dat &= ~SPI_CS_MASK;
++ else
++ iopd->dat |= SPI_CS_MASK;
++}
++
++/*
++ * The SPI command uses this table of functions for controlling the SPI
++ * chip selects.
++ */
++spi_chipsel_type spi_chipsel[] = {
++ spi_eeprom_chipsel,
++};
++int spi_chipsel_cnt = sizeof(spi_chipsel) / sizeof(spi_chipsel[0]);
++
++#endif /* CONFIG_HARD_SPI */
++
+Index: u-boot-1.3.2/include/configs/MPC8313ERDB.h
+===================================================================
+--- u-boot-1.3.2.orig/include/configs/MPC8313ERDB.h 2008-11-24 16:44:55.000000000 +0100
++++ u-boot-1.3.2/include/configs/MPC8313ERDB.h 2008-11-24 16:45:26.000000000 +0100
+@@ -370,6 +370,7 @@
+ #define CONFIG_CMD_PCI
+ #define CONFIG_CMD_NAND
+ #define CONFIG_CMD_JFFS2
++#define CONFIG_CMD_SPI
+
+ #if defined(CFG_RAMBOOT)
+ #undef CONFIG_CMD_ENV
+@@ -387,6 +388,11 @@
+ #define MTDPARTS_DEFAULT "mtdparts=physmap-flash.0:384k(uboot),64k(env)"
+
+
++/* SPI */
++#define CONFIG_MPC8XXX_SPI
++#define CONFIG_HARD_SPI /* SPI with hardware support */
++#undef CONFIG_SOFT_SPI /* SPI bit-banged */
++
+ /*
+ * Miscellaneous configurable options
+ */
diff --git a/packages/u-boot/u-boot-1.3.2/boc01/002-081204-GPIO.patch b/packages/u-boot/u-boot-1.3.2/boc01/002-081204-GPIO.patch
new file mode 100644
index 0000000000..bfa5327a34
--- /dev/null
+++ b/packages/u-boot/u-boot-1.3.2/boc01/002-081204-GPIO.patch
@@ -0,0 +1,229 @@
+Index: u-boot-1.3.2/board/freescale/mpc8313erdb/mpc8313erdb.c
+===================================================================
+--- u-boot-1.3.2.orig/board/freescale/mpc8313erdb/mpc8313erdb.c 2008-12-09 16:24:39.000000000 +0100
++++ u-boot-1.3.2/board/freescale/mpc8313erdb/mpc8313erdb.c 2008-12-09 16:24:57.000000000 +0100
+@@ -44,6 +44,46 @@
+ return 0;
+ }
+
++int misc_init_f(void)
++{
++ uchar value;
++ uchar i;
++
++#ifdef PRE_INIT_GPIO
++ value=PRE_INIT_GPIO;
++
++ for(i=0;i<MAX_GPIO_OUT;i++)
++ {
++ if(value&(1<<i))
++ {
++ gpio_set(i);
++ }
++ else
++ {
++ gpio_clear(i);
++ }
++ }
++ udelay(1000);
++#endif
++
++
++#ifdef INIT_GPIO
++ value=INIT_GPIO;
++ for(i=0;i<MAX_GPIO_OUT;i++)
++ {
++ if(value&(1<<i))
++ {
++ gpio_set(i);
++ }
++ else
++ {
++ gpio_clear(i);
++ }
++ }
++ puts("GPIO: ready\n");
++#endif
++}
++
+ int checkboard(void)
+ {
+ puts("Board: Freescale MPC8313ERDB\n");
+@@ -109,7 +149,42 @@
+ }
+ #endif
+
++#ifdef CONFIG_CMD_GPIO
++void gpio_set(unsigned char ucGpio)
++{
++ unsigned long ulMask=0;
++ volatile gpio83xx_t *iopd = &((immap_t *)CFG_IMMR)->gpio[0];
++ if(ucGpio<32)
++ {
++ ulMask=1<<(31-ucGpio);
++ iopd->dir |= ulMask;
++ iopd->dat |= ulMask;
++ }
++}
++
++void gpio_clear(unsigned char ucGpio)
++{
++ unsigned long ulMask=0;
++ volatile gpio83xx_t *iopd = &((immap_t *)CFG_IMMR)->gpio[0];
++ if(ucGpio<32)
++ {
++ ulMask=1<<(31-ucGpio);
++ iopd->dir |= ulMask;
++ iopd->dat &= ~ulMask;
++ }
++}
+
++char gpio_get(unsigned char ucGpio)
++{
++ unsigned long ulMask=0;
++ volatile gpio83xx_t *iopd = &((immap_t *)CFG_IMMR)->gpio[0];
++ if(ucGpio<32)
++ {
++ ulMask=1<<(31-ucGpio);
++ }
++ return (iopd->dat& ulMask)? 1:0;
++}
++#endif
+ /*
+ * The following are used to control the SPI chip selects for the SPI command.
+ */
+Index: u-boot-1.3.2/common/cmd_gpio.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ u-boot-1.3.2/common/cmd_gpio.c 2008-12-09 16:24:57.000000000 +0100
+@@ -0,0 +1,77 @@
++/*
++ * (C) Copyright 2001
++ * Alexandre Coffignal, CenoSYS, alexandre.coffignal@cenosys.com
++ *
++ * 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 <config.h>
++#include <command.h>
++
++extern void gpio_set(unsigned char ucGpio);
++extern void gpio_clear(unsigned char ucGpio);
++
++int do_gpio (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
++{
++ unsigned char ucGpio;
++
++ if (argc < 3)
++ goto usage;
++
++ ucGpio = simple_strtoul (argv[2], NULL, 10);
++
++ if (!strncmp(argv[1], "set", 3))
++ {
++ gpio_set(ucGpio);
++ }
++ else
++ if (!strncmp(argv[1], "clear", 5))
++ {
++ gpio_clear(ucGpio);
++ }
++ else
++ if (!strncmp(argv[1], "get", 3))
++ {
++ printf("%s %s %d = %d\n",argv[0],argv[1],ucGpio, gpio_get(ucGpio));
++ return 0;
++ }
++ else
++ goto usage;
++
++ printf("%s %s %d\n",argv[0],argv[1],ucGpio);
++
++ return 0;
++
++usage :
++ printf ("Usage:\n%s\n", cmdtp->usage);
++ return 1;
++} /* do_gpio() */
++
++/***************************************************/
++
++U_BOOT_CMD(
++ gpio, 3, 1, do_gpio,
++ "gpio - General Purpose Input/Output\n",
++ " - Set or clear General Purpose Output.\n"
++ "<set/clear/get> - Set or clear General Purpose Output.\n"
++ "<gpio> - number of gpio to be set/clear/get \n"
++);
++
+Index: u-boot-1.3.2/common/Makefile
+===================================================================
+--- u-boot-1.3.2.orig/common/Makefile 2008-12-09 16:24:39.000000000 +0100
++++ u-boot-1.3.2/common/Makefile 2008-12-09 16:24:57.000000000 +0100
+@@ -50,6 +50,7 @@
+ COBJS-$(CONFIG_CMD_DISPLAY) += cmd_display.o
+ COBJS-$(CONFIG_CMD_DOC) += cmd_doc.o
+ COBJS-$(CONFIG_CMD_DTT) += cmd_dtt.o
++COBJS-$(CONFIG_CMD_GPIO) += cmd_gpio.o
+ COBJS-y += cmd_eeprom.o
+ COBJS-$(CONFIG_CMD_ELF) += cmd_elf.o
+ COBJS-$(CONFIG_CMD_EXT2) += cmd_ext2.o
+Index: u-boot-1.3.2/include/configs/MPC8313ERDB.h
+===================================================================
+--- u-boot-1.3.2.orig/include/configs/MPC8313ERDB.h 2008-12-09 16:24:39.000000000 +0100
++++ u-boot-1.3.2/include/configs/MPC8313ERDB.h 2008-12-09 16:26:20.000000000 +0100
+@@ -49,6 +49,7 @@
+ #define CONFIG_SYS_CLK_FREQ CONFIG_83XX_CLKIN
+
+ #define CONFIG_BOARD_EARLY_INIT_F /* call board_pre_init */
++#define CONFIG_MISC_INIT_F
+
+ #define CFG_IMMR 0xE0000000
+
+@@ -370,6 +371,7 @@
+ #define CONFIG_CMD_NAND
+ #define CONFIG_CMD_JFFS2
+ #define CONFIG_CMD_SPI
++#define CONFIG_CMD_GPIO
+
+ #if defined(CFG_RAMBOOT)
+ #undef CONFIG_CMD_ENV
+@@ -392,6 +394,11 @@
+ #define CONFIG_HARD_SPI /* SPI with hardware support */
+ #undef CONFIG_SOFT_SPI /* SPI bit-banged */
+
++/* GPIO */
++#define PRE_INIT_GPIO 0x28
++#define INIT_GPIO 0x08
++#define MAX_GPIO_OUT 7
++
+ /*
+ * Miscellaneous configurable options
+ */
+@@ -457,7 +464,7 @@
+
+ /* System IO Config */
+ #define CFG_SICRH (SICRH_TSOBI1 | SICRH_TSOBI2) /* RGMII */
+-#define CFG_SICRL SICRL_USBDR /* Enable Internal USB Phy */
++#define CFG_SICRL (SICRL_USBDR |SICRL_LBC) /* Enable Internal USB Phy */
+
+ #define CFG_HID0_INIT 0x000000000
+ #define CFG_HID0_FINAL (HID0_ENABLE_MACHINE_CHECK | \
diff --git a/packages/u-boot/u-boot-1.3.2/boc01/003-081205-DTT_LM73.patch b/packages/u-boot/u-boot-1.3.2/boc01/003-081205-DTT_LM73.patch
new file mode 100644
index 0000000000..9f821f4c71
--- /dev/null
+++ b/packages/u-boot/u-boot-1.3.2/boc01/003-081205-DTT_LM73.patch
@@ -0,0 +1,44 @@
+Index: u-boot-1.3.2/include/configs/MPC8313ERDB.h
+===================================================================
+--- u-boot-1.3.2.orig/include/configs/MPC8313ERDB.h 2008-12-09 16:27:32.000000000 +0100
++++ u-boot-1.3.2/include/configs/MPC8313ERDB.h 2008-12-09 16:28:14.000000000 +0100
+@@ -371,6 +371,7 @@
+ #define CONFIG_CMD_NAND
+ #define CONFIG_CMD_JFFS2
+ #define CONFIG_CMD_SPI
++#define CONFIG_CMD_DTT
+ #define CONFIG_CMD_GPIO
+
+ #if defined(CFG_RAMBOOT)
+@@ -399,6 +400,13 @@
+ #define INIT_GPIO 0x08
+ #define MAX_GPIO_OUT 7
+
++/* Digital Thermometer and Thermostat */
++#define CONFIG_DTT_LM73 1
++#define CONFIG_DTT_SENSORS { 0x49 }
++#define CONFIG_DTT_ALARM
++#define CFG_DTT_MAX_TEMP 70
++#define CFG_DTT_MIN_TEMP -30
++
+ /*
+ * Miscellaneous configurable options
+ */
+Index: u-boot-1.3.2/drivers/hwmon/lm73.c
+===================================================================
+--- u-boot-1.3.2.orig/drivers/hwmon/lm73.c 2008-03-09 16:20:02.000000000 +0100
++++ u-boot-1.3.2/drivers/hwmon/lm73.c 2008-12-09 16:27:46.000000000 +0100
+@@ -134,8 +134,13 @@
+ /*
+ * Setup configuraton register
+ */
++#ifdef CONFIG_DTT_ALARM
++ /* config = alert active low, enabled, and reset */
++ val = 0x40;
++#else
+ /* config = alert active low, disabled, and reset */
+ val = 0x64;
++#endif
+ if (dtt_write(sensor, DTT_CONFIG, val))
+ return 1;
+ /*
diff --git a/packages/u-boot/u-boot-1.3.2/boc01/004-081205-WATCHDOG.patch b/packages/u-boot/u-boot-1.3.2/boc01/004-081205-WATCHDOG.patch
new file mode 100644
index 0000000000..e6e291d9b9
--- /dev/null
+++ b/packages/u-boot/u-boot-1.3.2/boc01/004-081205-WATCHDOG.patch
@@ -0,0 +1,15 @@
+Index: u-boot-1.3.2/include/configs/MPC8313ERDB.h
+===================================================================
+--- u-boot-1.3.2.orig/include/configs/MPC8313ERDB.h 2008-12-09 16:30:51.000000000 +0100
++++ u-boot-1.3.2/include/configs/MPC8313ERDB.h 2008-12-09 16:30:51.000000000 +0100
+@@ -470,6 +470,10 @@
+ HRCWH_BIG_ENDIAN |\
+ HRCWH_LALE_NORMAL)
+
++
++#define CONFIG_WATCHDOG
++#define CFG_WATCHDOG_VALUE 0xFFFF
++
+ /* System IO Config */
+ #define CFG_SICRH (SICRH_TSOBI1 | SICRH_TSOBI2) /* RGMII */
+ #define CFG_SICRL (SICRL_USBDR |SICRL_LBC) /* Enable Internal USB Phy */
diff --git a/packages/u-boot/u-boot-1.3.2/boc01/006-081205-EEPROM_INTERSIL.patch b/packages/u-boot/u-boot-1.3.2/boc01/006-081205-EEPROM_INTERSIL.patch
new file mode 100644
index 0000000000..21d7cba1a3
--- /dev/null
+++ b/packages/u-boot/u-boot-1.3.2/boc01/006-081205-EEPROM_INTERSIL.patch
@@ -0,0 +1,16 @@
+Index: u-boot-1.3.2/include/configs/MPC8313ERDB.h
+===================================================================
+--- u-boot-1.3.2.orig/include/configs/MPC8313ERDB.h 2008-12-09 16:30:51.000000000 +0100
++++ u-boot-1.3.2/include/configs/MPC8313ERDB.h 2008-12-09 16:31:01.000000000 +0100
+@@ -269,9 +269,9 @@
+ */
+ #define CONFIG_CMD_EEPROM
+ #define CFG_I2C_EEPROM_ADDR_LEN 2 /* 16-bit EEPROM address */
+-#define CFG_I2C_EEPROM_ADDR 0x50 /* Atmel: AT24C256*/
++#define CFG_I2C_EEPROM_ADDR 0x57 /* Intersil 12024 (eeprom)*/
+ #define CFG_EEPROM_PAGE_WRITE_DELAY_MS 10 /* 10ms of delay */
+-#define CFG_EEPROM_PAGE_WRITE_BITS 6 /* 64-Byte Page Write Mode */
++#define CFG_EEPROM_PAGE_WRITE_BITS 4 /* 16-Byte Page Write Mode */
+ #define CFG_EEPROM_PAGE_WRITE_ENABLE
+
+ /* TSEC */
diff --git a/packages/u-boot/u-boot-1.3.2/boc01/007-081205-CAPSENSE.patch b/packages/u-boot/u-boot-1.3.2/boc01/007-081205-CAPSENSE.patch
new file mode 100644
index 0000000000..9e98848fcf
--- /dev/null
+++ b/packages/u-boot/u-boot-1.3.2/boc01/007-081205-CAPSENSE.patch
@@ -0,0 +1,599 @@
+Index: u-boot-1.3.2/common/cmd_capsense.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ u-boot-1.3.2/common/cmd_capsense.c 2008-12-09 16:28:31.000000000 +0100
+@@ -0,0 +1,132 @@
++/*
++ * (C) Copyright 2008
++ * Alexandre Coffignal, CénoSYS, alexandre.coffignal@cenosys.com
++ *
++ * 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
++ *
++ * CapSense Express touch-sensing buttons
++ */
++
++#include <common.h>
++#include <config.h>
++#include <command.h>
++
++#include <capsense.h>
++#include <i2c.h>
++
++#define ARG_SENSOR_NUMBER 1
++
++#define ARG_CMD 1
++#define ARG_OLD_ADDRESS 2
++#define ARG_NEW_ADDRESS 3
++
++int do_capsense (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
++{
++ int i;
++ unsigned char address = CONFIG_CAPSENSE_I2C_ADDRESS;
++ unsigned char sensors[] = CONFIG_CAPSENSE_SENSORS;
++ unsigned char leds[] = CONFIG_CAPSENSE_LEDS;
++ int old_bus,sensor_number,old_address,new_address;
++ char port[2];
++ /* switch to correct I2C bus */
++ old_bus = I2C_GET_BUS();
++ I2C_SET_BUS(CFG_CAPSENSE_BUS_NUM);
++
++ /*
++ * Loop through sensors, read
++ * state, and output it.
++ */
++ if(argc==1)
++ {
++ port[0]=capsense_get_state(CONFIG_CAPSENSE_I2C_ADDRESS,0);
++ port[1]=capsense_get_state(CONFIG_CAPSENSE_I2C_ADDRESS,1);
++ capsense_get_state(CONFIG_CAPSENSE_I2C_ADDRESS,1);
++ printf ("P0 0x%02x 0x%02x\n",port[0],port[1]);
++ for (i = 0; i < 8; i++)
++ {
++ if(sensors[0]&(1<<i))
++ {
++ printf ("GP0[%d]: %i\n",i,port[0]&(1<<i)?1:0);
++ }
++ if(sensors[1]&(1<<i))
++ {
++ printf ("GP1[%d]: %i\n",i,port[1]&(1<<i)?1:0);
++ }
++
++ }
++ }
++ else
++ {
++ if(argc==4)
++ {
++ if (!strncmp(argv[ARG_CMD], "config", 3))
++ {
++ old_address=simple_strtoul (argv[ARG_OLD_ADDRESS], NULL, 10);
++ new_address=simple_strtoul (argv[ARG_NEW_ADDRESS], NULL, 10);
++ if(capsense_change_i2c_address(old_address,new_address)!=0)
++ printf("failed to change i2c address\n");
++ else
++ { printf("config ok\n");
++// //disable all sensor
++// //port 0
++// capsense_EnableGpio(new_address,0,0x0);
++// capsense_EnableCapsense(new_address,0,0x0);
++// //port 1
++// capsense_EnableGpio(new_address,1,0x0);
++// capsense_EnableCapsense(new_address,1,0x0);
++//
++// //Config sensor and GPIO
++// //port 0
++// capsense_EnableGpio(new_address,0,sensors[0]);
++// capsense_EnableCapsense(new_address,0,leds[0]);
++// //port 1
++// capsense_EnableGpio(new_address,1,sensors[1]);
++// capsense_EnableCapsense(new_address,1,leds[1]);
++ capsense_config(new_address);
++ capsense_store_nvm(new_address);
++ }
++ }
++ }
++ else
++ {
++ printf ("Usage:\n%s\n", cmdtp->help);
++ }
++ }
++
++ /* switch back to original I2C bus */
++ I2C_SET_BUS(old_bus);
++
++ return 0;
++} /* do_capsense() */
++
++
++char SetDeviceI2CAddress(char cNewDeviceAddress)
++{
++
++}
++/***************************************************/
++
++U_BOOT_CMD(
++ capsense, 4, 1, do_capsense,
++ "capsense - CapSense Express touch-sensing buttons\n",
++ " - Read state of the CapSense Express touch-sensing buttons.\n"
++ "capsense : Read state of all the CapSense Express touch-sensing buttons.\n"
++ "capsense [N] Read state of the CapSense Express touch-sensing buttons N.\n"
++ "capsense config <old i2c address> <new i2c address> : Set i2c address N to capsense module.\n"
++ );
+Index: u-boot-1.3.2/common/Makefile
+===================================================================
+--- u-boot-1.3.2.orig/common/Makefile 2008-12-09 16:27:32.000000000 +0100
++++ u-boot-1.3.2/common/Makefile 2008-12-09 16:29:42.000000000 +0100
+@@ -50,6 +50,7 @@
+ COBJS-$(CONFIG_CMD_DISPLAY) += cmd_display.o
+ COBJS-$(CONFIG_CMD_DOC) += cmd_doc.o
+ COBJS-$(CONFIG_CMD_DTT) += cmd_dtt.o
++COBJS-$(CONFIG_CMD_CAPSENSE) += cmd_capsense.o
+ COBJS-$(CONFIG_CMD_GPIO) += cmd_gpio.o
+ COBJS-y += cmd_eeprom.o
+ COBJS-$(CONFIG_CMD_ELF) += cmd_elf.o
+Index: u-boot-1.3.2/drivers/i2c/CY8C201xx.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ u-boot-1.3.2/drivers/i2c/CY8C201xx.c 2008-12-09 16:28:31.000000000 +0100
+@@ -0,0 +1,307 @@
++/*
++ * (C) Copyright 2008
++ * Alexandre Coffignal, CénoSYS, alexandre.coffignal@cenosys.com
++ *
++ * 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
++ */
++
++/*
++ * CapSense Express touch-sensing buttons
++ */
++
++#include <common.h>
++
++#ifdef CONFIG_CAPSENSE_CY8C201XX
++
++#include <i2c.h>
++#include <capsense.h>
++
++int capsense_read(int address, int reg)
++{
++ int dlen;
++ uchar data[2];
++
++ /*
++ * Validate 'reg' param
++ */
++ if((reg < 0) || (reg > 0xA1))
++ return -1;
++
++ /*
++ * Prepare to handle 1 byte result.
++ */
++ dlen = 1;
++
++ /*
++ * Now try to read the register.
++ */
++ if (i2c_read(address, reg, 1, data, dlen) != 0)
++ return -1;
++
++ return (int)data[0];
++} /* capsense_read() */
++
++
++int capsense_write(int address, int reg, int val)
++{
++ int dlen;
++ uchar data[2];
++
++ /*
++ * Validate 'reg' param
++ */
++ if((reg < 0) || (reg > 0xA1))
++ return -1;
++
++ /*
++ * Handle 1 byte values.
++ */
++ dlen = 1;
++ data[0] = (char)(val & 0xff);
++
++ /*
++ * Write value to register.
++ */
++ if (i2c_write(address, reg, 1, data, dlen) != 0)
++ return 1;
++
++ return 0;
++} /* capsense_write() */
++
++
++int capsense_write_N(int address, int reg, uchar data[5], int dlen)
++{
++ /*
++ * Validate 'reg' param
++ */
++ if((reg < 0) || (reg > 0xA1))
++ return -1;
++
++
++ /*
++ * Write value to register.
++ */
++ if (i2c_write(address, reg, 1, data, dlen) != 0)
++ return 1;
++
++ return 0;
++} /* capsense_write() */
++
++
++int capsense_get_state(int address,char port)
++{
++ return capsense_read(address,CAPSENSE_READ_STATUS_REG+port);
++}
++
++
++int capsense_change_i2c_address(char old_address,char new_address)
++{
++ unsigned char data[4];
++ int read_address;
++ printf("capsense change i2c address\n");
++ //checking if the I2C address is in the limits ( I2C address can have a value from 0 to 127 )
++ if((old_address>0x7F)||(new_address>0x7F))
++ {
++ printf("I2C address is not in the limits\n");
++ return 1;
++ }
++
++ //reading old capsence address
++ read_address=capsense_read(old_address, CAPSENSE_I2C_ADDR_DM);
++ if(read_address==0xFFFFFFFF)
++ {
++ printf("error reading old capsence address\n");
++ return 1; //capsense do not respond at new address
++ }
++
++ if((read_address&0x7F)!=old_address)
++ {
++ printf("reading old capsence address failed\n");
++ return 1; //Capsense not respond correctly
++ }
++
++ //writing command for unlocking the I2C device address lock
++ data[0]=0x3C;
++ data[1]=0xA5;
++ data[2]=0x69;
++ if(capsense_write_N(old_address, CAPSENSE_I2C_DEV_LOCK, data , 3)!=0)
++ {
++ printf("writing command for unlocking the I2C device address lock failed\n");
++ return 1;
++ }
++
++ //writing the new I2C address to the device I2C address register
++ if(capsense_write(old_address, CAPSENSE_I2C_ADDR_DM,new_address|0x80)!=0)
++ {
++ printf("writing the new I2C address to the device I2C address register failed\n");
++ return 1;
++ }
++
++ //writing command for locking the I2C device address lock
++ data[0]=0x96;
++ data[1]=0x5A;
++ data[2]=0xC3;
++ if(capsense_write_N(old_address, CAPSENSE_I2C_DEV_LOCK, data , 3)!=0)
++ {
++ printf("writing command for locking the I2C device failed\n");
++ return 1;
++ }
++
++ //reading new capsence address
++ read_address=capsense_read(new_address, CAPSENSE_I2C_ADDR_DM);
++ if(read_address==0xFFFFFFFF)
++ {
++ printf("capsense do not respond at new address\n");
++ return 1; //capsense do not respond at new address
++ }
++
++ return 0;
++}
++
++int capsense_EnableGpio(char address,char port,char pins)
++{
++ printf("capsense Enable Gpio\n");
++ //entering setup operation mode
++ if(capsense_write(address,CAPSENSE_COMMAND_REG,CAPSENSE_SETUP_OPERATION_MODE)!=0)
++ {
++ printf("entering setup operation mode failed\n");
++ return 1;
++ }
++ //Enable gpio Input
++ if(capsense_write(address, port + CAPSENSE_ENABLE_GPIO_REG,pins)!=0)
++ {
++ //entering normal operation mode
++ printf("Enable gpio Input failed\n");
++ capsense_write(address,CAPSENSE_COMMAND_REG,CAPSENSE_NORMAL_OPERATION_MODE);
++ return 1;
++ }
++ //entering normal operation mode
++ if(capsense_write(address,CAPSENSE_COMMAND_REG,CAPSENSE_NORMAL_OPERATION_MODE)!=0)
++ {
++ printf("entering normal operation mode failed\n");
++ return 1;
++ }
++ else
++ return 0;
++}
++
++int capsense_EnableCapsense(char address,char port,char pins)
++{
++ printf("capsense Enable sensor\n");
++ //entering setup operation mode
++ if(capsense_write(address,CAPSENSE_COMMAND_REG,CAPSENSE_SETUP_OPERATION_MODE)!=0)
++ {
++ printf("entering setup operation mode failed\n");
++ return 1;
++ }
++ //Enable Capsense Input
++ if(capsense_write(address, port + CAPSENSE_ENABLE_CAPSENSE_REG,pins)!=0)
++ {
++ //entering normal operation mode
++ printf("Enable Capsense Input failed\n");
++ capsense_write(address,CAPSENSE_COMMAND_REG,CAPSENSE_NORMAL_OPERATION_MODE);
++ return 1;
++ }
++ //entering normal operation mode
++ if(capsense_write(address,CAPSENSE_COMMAND_REG,CAPSENSE_NORMAL_OPERATION_MODE)!=0)
++ {
++ printf("entering normal operation mode\n");
++ return 1;
++ }
++ else
++ return 0;
++}
++
++//CAPSENSE_ENABLE_GPIO_REG
++char data1[]={0x00,0x00};
++//CAPSENSE_ENABLE_CAPSENSE_REG
++char data2[]={0x1D,0x10,0x02,0x0F,0x02,0x0F,0x00,0x00,0x1F,0x1F,0x02,0x00,0x00,0x00,0x0F,0x00,0x00,0x00};
++//CAPSENSE_OUTPUT_PORT_REG
++char data3[]={0x00,0x00};
++//CAPSENSE_OPER_SELECT_0_REG
++char data4[]={0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x10,0x00,0x00,0x00,0x80,0x08,0x00,0x00,0x00,0x80,0x04,0x00,0x00,0x00,0x80,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };
++//CAPSENSE_NOISE_THRESHOLD_REG
++char data5[]={0x28,0x64,0xA0,0x40,0x0A,0x03,0x14,0x14,0x00};
++//CAPSENSE_SCAN_POS_00
++char data6[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x0F,0x03,0x00,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x03};
++//CAPSENSE_SLEEP_CONTROL_PIN_REG
++char data7[]={0x00,0x20,0x00};
++
++int capsense_config(char address)
++{
++
++//w 04 A0 08
++ //entering setup operation mode
++ if(capsense_write(address,CAPSENSE_COMMAND_REG,CAPSENSE_SETUP_OPERATION_MODE)!=0)
++ {
++ printf("CAPSENSE_COMMAND_REG\n");
++ return 1;
++ }
++ if(capsense_write_N(address, CAPSENSE_ENABLE_GPIO_REG, data1 , 2)!=0)
++ {
++ printf("CAPSENSE_ENABLE_GPIO_REG\n");
++ return 1;
++ }
++ if(capsense_write_N(address, CAPSENSE_ENABLE_CAPSENSE_REG, data2 , 18)!=0)
++ {
++ printf("CAPSENSE_ENABLE_CAPSENSE_REG\n");
++ return 1;
++ }
++ if(capsense_write_N(address, CAPSENSE_OUTPUT_PORT_REG, data3 , 2)!=0)
++ {
++ printf("CAPSENSE_OUTPUT_PORT_REG\n");
++ return 1;
++ }
++ if(capsense_write_N(address, CAPSENSE_OPER_SELECT_0_REG, data4 , 50)!=0)
++ {
++ printf("entering normal operation mode\n");
++ return 1;
++ }
++ if(capsense_write_N(address, CAPSENSE_NOISE_THRESHOLD_REG, data5 , 9)!=0)
++ {
++ printf("CAPSENSE_NOISE_THRESHOLD_REG\n");
++ return 1;
++ }
++ if(capsense_write_N(address, CAPSENSE_SCAN_POS_00, data6 , 30)!=0)
++ {
++ printf("CAPSENSE_SCAN_POS_00\n");
++ return 1;
++ }
++ if(capsense_write_N(address, CAPSENSE_SLEEP_CONTROL_PIN_REG,data7 , 3)!=0)
++ {
++ printf("CAPSENSE_SLEEP_CONTROL_PIN_REG\n");
++ return 1;
++ }
++ if(capsense_write(address,CAPSENSE_COMMAND_REG,CAPSENSE_SETUP_OPERATION_MODE)!=0)
++// if(capsense_write(address,CAPSENSE_COMMAND_REG,0x06)!=0)
++ {
++ printf("CAPSENSE_COMMAND_REG 6\n");
++ return 1;
++ }
++ return 0;
++}
++void capsense_store_nvm(char address)
++{
++ //storing the new current configuration to NVM
++ printf("storing the new current configuration to NVM\n");
++ capsense_write(address,CAPSENSE_COMMAND_REG,0x01);
++
++}
++
++#endif /* CONFIG_CAPSENSE_CY8C201XX */
+Index: u-boot-1.3.2/drivers/i2c/Makefile
+===================================================================
+--- u-boot-1.3.2.orig/drivers/i2c/Makefile 2008-03-09 16:20:02.000000000 +0100
++++ u-boot-1.3.2/drivers/i2c/Makefile 2008-12-09 16:28:31.000000000 +0100
+@@ -29,6 +29,7 @@
+ COBJS-y += omap1510_i2c.o
+ COBJS-y += omap24xx_i2c.o
+ COBJS-y += tsi108_i2c.o
++COBJS-y += CY8C201xx.o
+
+ COBJS := $(COBJS-y)
+ SRCS := $(COBJS:.o=.c)
+Index: u-boot-1.3.2/include/capsense.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ u-boot-1.3.2/include/capsense.h 2008-12-09 16:28:31.000000000 +0100
+@@ -0,0 +1,103 @@
++/*
++ * (C) Copyright 2008
++ * Alexandre Coffignal, CénoSYS, alexandre.coffignal@cenosys.com
++ *
++ * 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 USCY8C201xx.c:234:A
++ */
++
++/*
++ * CapSense Express touch-sensing buttons.
++ */
++#ifndef _CAPSENSE_H_
++#define _CAPSENSE_H_
++
++#if defined(CONFIG_CAPSENSE_CY8C201XX)
++
++#define CONFIG_CAPSENSE /* We have a Capsense */
++
++#ifndef CONFIG_CAPSENSE_SENSORS
++/*config for CY3218-CAPEXP1*/
++#define CONFIG_CAPSENSE_LED {0x05,0x02} // port 0-{0,3} port 1-{2}
++#define CONFIG_CAPSENSE_SENSOR {0x02,0x0C} // port 0-{2} port 1-{3,4}
++#endif
++#endif /* CONFIG_CAPSENSE_SENSORS */
++
++extern int capsense_read(int address, int reg);
++extern int capsense_write(int address, int reg, int val);
++extern int capsense_get_state(int address,char port);
++extern int capsense_change_i2c_address(char old_address,char new_address);
++extern int capsense_EnableGpio(char address,char port,char pins);
++extern int capsense_EnableCapsense(char address,char port,char pins);
++extern int capsense_config(char address);
++#endif
++
++#if !defined(CFG_CAPSENSE_BUS_NUM)
++#define CFG_CAPSENSE_BUS_NUM 1
++
++//-----------------------------------------------
++// Register Map and corresponding constants
++//-----------------------------------------------
++
++
++#define CAPSENSE_STATUS_PORT_REG (0x02)
++#define CAPSENSE_OUTPUT_PORT_REG (0x04)
++#define CAPSENSE_ENABLE_CAPSENSE_REG (0x06)
++#define CAPSENSE_ENABLE_GPIO_REG (0x08)
++#define CAPSENSE_INVERSION_PORT_REG (0x0A)
++#define CAPSENSE_INTERRUPT_MASK_REG (0x0C)
++#define CAPSENSE_PORT_STATUS_REG (0x0E)
++#define CAPSENSE_DRIVE_MODE_REG (0x10)
++#define CAPSENSE_OPER_SELECT_0_REG (0x1C)
++#define CAPSENSE_OPER_SELECT_1_REG (0x35)
++#define CAPSENSE_NOISE_THRESHOLD_REG (0x4E)
++#define CAPSENSE_SETTLING_TIME_REG (0x50)
++#define CAPSENSE_EXT_CAP_REG (0x51)
++#define CAPSENSE_SNS_RST_REG (0x51)
++#define CAPSENSE_CLK_SEL_REG (0x51)
++#define CAPSENSE_HYSTERESIS_REG (0x52)
++#define CAPSENSE_DEBOUNCE_REG (0x53)
++#define CAPSENSE_NEG_NOISE_THRESHOLD_REG (0x54)
++#define CAPSENSE_SCAN_POS_00 (0x57)
++
++#define CAPSENSE_FT_PORT_0_REG (0x61)
++#define CAPSENSE_FT_PORT_1_REG (0x66)
++#define CAPSENSE_IDAC_SETTING_PORT_0_REG (0x6B)
++#define CAPSENSE_IDAC_SETTING_PORT_1_REG (0x70)
++#define CAPSENSE_SLIDER_CONFIGURATION_REG (0x75)
++#define CAPSENSE_SLIDER_RESOLUTION_REG (0x77)
++#define CAPSENSE_I2C_DEV_LOCK (0x79)
++#define CAPSENSE_DEVICE_ID_REG (0x7A)
++#define CAPSENSE_I2C_ADDR_DM (0x7C)
++#define CAPSENSE_SLEEP_CONTROL_PIN_REG (0x7E)
++#define CAPSENSE_SLEEP_CONTROL_REG (0x7F)
++#define CAPSENSE_STAY_AWAKE_CNTR_REG (0x80)
++#define CAPSENSE_BUTTON_SEL_REG (0x81)
++#define CAPSENSE_BASELINE_REG (0x82)
++#define CAPSENSE_READ_STATUS_REG (0x88)
++#define CAPSENSE_CENTROID_REG (0x8A)
++
++#define CAPSENSE_COMMAND_REG (0xA0)
++
++#define CAPSENSE_INPUT_PORT_MASK (0x10)
++#define CAPSENSE_INPUT_MASK (0x7)
++
++
++#define CAPSENSE_NORMAL_OPERATION_MODE (0x07)
++#define CAPSENSE_SETUP_OPERATION_MODE (0x08)
++#endif /* _CAPSENSE_H_ */
+Index: u-boot-1.3.2/include/configs/MPC8313ERDB.h
+===================================================================
+--- u-boot-1.3.2.orig/include/configs/MPC8313ERDB.h 2008-12-09 16:28:30.000000000 +0100
++++ u-boot-1.3.2/include/configs/MPC8313ERDB.h 2008-12-09 16:30:12.000000000 +0100
+@@ -407,6 +407,13 @@
+ #define CFG_DTT_MAX_TEMP 70
+ #define CFG_DTT_MIN_TEMP -30
+
++/*Capsense touch sensing buttons (Cpe board)*/
++#define CONFIG_CMD_CAPSENSE