aboutsummaryrefslogtreecommitdiffstats
path: root/recipes/u-boot/u-boot-git/beagleboard/0022-OMAP3-beagle-implement-expansionboard-detection-base.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes/u-boot/u-boot-git/beagleboard/0022-OMAP3-beagle-implement-expansionboard-detection-base.patch')
-rw-r--r--recipes/u-boot/u-boot-git/beagleboard/0022-OMAP3-beagle-implement-expansionboard-detection-base.patch157
1 files changed, 157 insertions, 0 deletions
diff --git a/recipes/u-boot/u-boot-git/beagleboard/0022-OMAP3-beagle-implement-expansionboard-detection-base.patch b/recipes/u-boot/u-boot-git/beagleboard/0022-OMAP3-beagle-implement-expansionboard-detection-base.patch
new file mode 100644
index 0000000000..91d09abea9
--- /dev/null
+++ b/recipes/u-boot/u-boot-git/beagleboard/0022-OMAP3-beagle-implement-expansionboard-detection-base.patch
@@ -0,0 +1,157 @@
+From 851d35fab7f93400a1d714524b5e986206d9b0c4 Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Thu, 25 Mar 2010 16:07:23 +0100
+Subject: [PATCH 22/37] OMAP3: beagle: implement expansionboard detection based on board/overo.c code
+
+---
+ board/ti/beagle/beagle.c | 78 ++++++++++++++++++++++++++++++++++++++++++++++
+ board/ti/beagle/beagle.h | 25 +++++++++++++-
+ 2 files changed, 101 insertions(+), 2 deletions(-)
+
+diff --git a/board/ti/beagle/beagle.c b/board/ti/beagle/beagle.c
+index d357588..8c5b88c 100644
+--- a/board/ti/beagle/beagle.c
++++ b/board/ti/beagle/beagle.c
+@@ -38,6 +38,31 @@
+ #include <asm/mach-types.h>
+ #include "beagle.h"
+
++static struct {
++ unsigned int device_vendor;
++ unsigned char revision;
++ unsigned char content;
++ unsigned char fab_revision[8];
++ unsigned char env_var[16];
++ unsigned char env_setting[64];
++} expansion_config;
++
++#define TWL4030_I2C_BUS 0
++
++#define EXPANSION_EEPROM_I2C_BUS 1
++#define EXPANSION_EEPROM_I2C_ADDRESS 0x50
++
++#define TINCANTOOLS_VENDORID 0x0100
++#define GUMSTIX_VENDORID 0x0200
++#define SPECIALCOMP_VENDORID 0x0300
++
++#define TINCANTOOLS_ZIPPY 0x01000100
++#define TINCANTOOLS_ZIPPY2 0x02000100
++#define TINCANTOOLS_TRAINER 0x03000100
++#define TINCANTOOLS_SHOWDOG 0x04000100
++
++#define BEAGLE_NO_EEPROM 0xffffffff
++
+ static int beagle_revision;
+
+ /*
+@@ -95,6 +120,27 @@ void beagle_identify(void)
+ }
+
+ /*
++ * Routine: get_expansion_id
++ * Description: This function checks for expansion board by checking I2C
++ * bus 2 for the availability of an AT24C01B serial EEPROM.
++ * returns the device_vendor field from the EEPROM
++ */
++unsigned int get_expansion_id(void)
++{
++ i2c_set_bus_num(EXPANSION_EEPROM_I2C_BUS);
++
++ /* return BEAGLE_NO_EEPROM if eeprom doesn't respond */
++ if (i2c_probe(EXPANSION_EEPROM_I2C_ADDRESS) == 1)
++ return BEAGLE_NO_EEPROM;
++
++ /* read configuration data */
++ i2c_read(EXPANSION_EEPROM_I2C_ADDRESS, 0, 1, (u8 *)&expansion_config,
++ sizeof(expansion_config));
++
++ return expansion_config.device_vendor;
++}
++
++/*
+ * Routine: misc_init_r
+ * Description: Configure board specific parts
+ */
+@@ -104,6 +150,38 @@ int misc_init_r(void)
+ struct gpio *gpio6_base = (struct gpio *)OMAP34XX_GPIO6_BASE;
+
+ beagle_identify();
++ switch (get_expansion_id()) {
++ case TINCANTOOLS_ZIPPY:
++ printf("Recognized Tincantools Zippy expansion board (rev %d %s)\n",
++ expansion_config.revision, expansion_config.fab_revision);
++ MUX_TINCANTOOLS_ZIPPY();
++ break;
++ case TINCANTOOLS_ZIPPY2:
++ printf("Recognized Tincantools Zippy2 expansion board (rev %d %s)\n",
++ expansion_config.revision, expansion_config.fab_revision);
++ MUX_TINCANTOOLS_ZIPPY();
++ break;
++ case TINCANTOOLS_TRAINER:
++ printf("Recognized Tincantools Trainer expansion board (rev %d %s)\n",
++ expansion_config.revision, expansion_config.fab_revision);
++ break;
++ case TINCANTOOLS_SHOWDOG:
++ printf("Recognized Tincantools Showdow expansion board (rev %d %s)\n",
++ expansion_config.revision, expansion_config.fab_revision);
++ /* Place holder for DSS2 definition for showdog lcd */
++ setenv("defaultdisplay", "showdoglcd");
++ break;
++ case BEAGLE_NO_EEPROM:
++ printf("No EEPROM on expansion board\n");
++ break;
++ default:
++ printf("Unrecognized expansion board: %x\n", expansion_config.device_vendor);
++ }
++
++ if (expansion_config.content == 1)
++ setenv(expansion_config.env_var, expansion_config.env_setting);
++
++ i2c_set_bus_num(TWL4030_I2C_BUS);
+
+ twl4030_power_init();
+ twl4030_led_init(TWL4030_LED_LEDEN_LEDAON | TWL4030_LED_LEDEN_LEDBON);
+diff --git a/board/ti/beagle/beagle.h b/board/ti/beagle/beagle.h
+index fd06d46..ec4f831 100644
+--- a/board/ti/beagle/beagle.h
++++ b/board/ti/beagle/beagle.h
+@@ -260,8 +260,8 @@ const omap3_sysinfo sysinfo = {
+ MUX_VAL(CP(HSUSB0_DATA7), (IEN | PTD | DIS | M0)) /*HSUSB0_DATA7*/\
+ MUX_VAL(CP(I2C1_SCL), (IEN | PTU | EN | M0)) /*I2C1_SCL*/\
+ MUX_VAL(CP(I2C1_SDA), (IEN | PTU | EN | M0)) /*I2C1_SDA*/\
+- MUX_VAL(CP(I2C2_SCL), (IEN | PTU | EN | M4)) /*GPIO_168*/\
+- MUX_VAL(CP(I2C2_SDA), (IEN | PTU | EN | M4)) /*GPIO_183*/\
++ MUX_VAL(CP(I2C2_SCL), (IEN | PTU | EN | M0)) /*I2C2_SCL*/\
++ MUX_VAL(CP(I2C2_SDA), (IEN | PTU | EN | M0)) /*I2C2_SDA*/\
+ MUX_VAL(CP(I2C3_SCL), (IEN | PTU | EN | M0)) /*I2C3_SCL*/\
+ MUX_VAL(CP(I2C3_SDA), (IEN | PTU | EN | M0)) /*I2C3_SDA*/\
+ MUX_VAL(CP(I2C4_SCL), (IEN | PTU | EN | M0)) /*I2C4_SCL*/\
+@@ -412,4 +412,25 @@ const omap3_sysinfo sysinfo = {
+ MUX_VAL(CP(SYS_BOOT5), (IDIS | PTD | DIS | M3)) /*DSS_DATA22*/\
+ MUX_VAL(CP(SYS_BOOT6), (IDIS | PTD | DIS | M3)) /*DSS_DATA23*/
+
++#define MUX_TINCANTOOLS_ZIPPY() \
++ MUX_VAL(CP(MMC2_CLK), (IEN | PTU | EN | M0)) /*MMC2_CLK*/\
++ MUX_VAL(CP(MMC2_CMD), (IEN | PTU | EN | M0)) /*MMC2_CMD*/\
++ MUX_VAL(CP(MMC2_DAT0), (IEN | PTU | EN | M0)) /*MMC2_DAT0*/\
++ MUX_VAL(CP(MMC2_DAT1), (IEN | PTU | EN | M0)) /*MMC2_DAT1*/\
++ MUX_VAL(CP(MMC2_DAT2), (IEN | PTU | EN | M0)) /*MMC2_DAT2*/\
++ MUX_VAL(CP(MMC2_DAT3), (IEN | PTU | EN | M0)) /*MMC2_DAT3*/\
++ MUX_VAL(CP(MMC2_DAT4), (IEN | PTU | EN | M1)) /*MMC2_DIR_DAT0*/\
++ MUX_VAL(CP(MMC2_DAT5), (IEN | PTU | EN | M1)) /*MMC2_DIR_DAT1*/\
++ MUX_VAL(CP(MMC2_DAT6), (IEN | PTU | EN | M1)) /*MMC2_DIR_CMD*/\
++ MUX_VAL(CP(MMC2_DAT7), (IEN | PTU | EN | M1)) /*MMC2_CLKIN*/\
++ MUX_VAL(CP(MCBSP1_CLKR), (IEN | PTU | EN | M1)) /*MCSPI4_CLK*/\
++ MUX_VAL(CP(MCBSP1_FSR), (IEN | PTU | EN | M4)) /*GPIO_157*/\
++ MUX_VAL(CP(MCBSP1_DX), (IEN | PTD | EN | M1)) /*MCSPI4_SIMO*/\
++ MUX_VAL(CP(MCBSP1_DR), (IEN | PTD | DIS | M1)) /*MCSPI4_SOMI*/\
++ MUX_VAL(CP(MCBSP1_FSX), (IEN | PTD | EN | M1)) /*MCSPI4_CS0*/\
++ MUX_VAL(CP(MCBSP1_CLKX), (IEN | PTD | DIS | M4)) /*GPIO_162*/\
++ MUX_VAL(CP(MCBSP3_DX), (IEN | PTD | DIS | M4)) /*GPIO_140*/\
++ MUX_VAL(CP(MCBSP3_DR), (IEN | PTD | DIS | M4)) /*GPIO_142*/\
++ MUX_VAL(CP(MCBSP3_CLKX), (IEN | PTD | DIS | M4)) /*GPIO_141*/\
++
+ #endif
+--
+1.6.6.1
+