X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=board%2Fovero%2Fovero.c;h=4eafdb1df392542141ca8c5901558fdebc0d0218;hb=a00e749d5b172b69bcf84e5fee36b2d20ee67b10;hp=4a6091720119be076bac6572ae4484489704c160;hpb=ba9a11e4ea27d43bfc3d9f1787117fe4826b3ce7;p=u-boot diff --git a/board/overo/overo.c b/board/overo/overo.c index 4a60917201..4eafdb1df3 100644 --- a/board/overo/overo.c +++ b/board/overo/overo.c @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -39,6 +40,34 @@ #include #include "overo.h" +DECLARE_GLOBAL_DATA_PTR; + +#define TWL4030_I2C_BUS 0 +#define EXPANSION_EEPROM_I2C_BUS 2 +#define EXPANSION_EEPROM_I2C_ADDRESS 0x51 + +#define GUMSTIX_SUMMIT 0x01000200 +#define GUMSTIX_TOBI 0x02000200 +#define GUMSTIX_TOBI_DUO 0x03000200 +#define GUMSTIX_PALO35 0x04000200 +#define GUMSTIX_PALO43 0x05000200 +#define GUMSTIX_CHESTNUT43 0x06000200 +#define GUMSTIX_PINTO 0x07000200 +#define GUMSTIX_GALLOP43 0x08000200 + +#define ETTUS_USRP_E 0x01000300 + +#define GUMSTIX_NO_EEPROM 0xffffffff + +static struct { + unsigned int device_vendor; + unsigned char revision; + unsigned char content; + char fab_revision[8]; + char env_var[16]; + char env_setting[64]; +} expansion_config; + #if defined(CONFIG_CMD_NET) static void setup_net_chip(void); #endif @@ -60,8 +89,6 @@ static const u32 gpmc_lan_config[] = { */ int board_init(void) { - DECLARE_GLOBAL_DATA_PTR; - gpmc_init(); /* in SRAM or SDRAM, finish GPMC */ /* board id for Linux */ gd->bd->bi_arch_number = MACH_TYPE_OVERO; @@ -102,6 +129,64 @@ int get_board_revision(void) return revision; } +/* + * Routine: get_sdio2_config + * Description: Return information about the wifi module connection + * Returns 0 if the module connects though a level translator + * Returns 1 if the module connects directly + */ +int get_sdio2_config(void) +{ + int sdio_direct; + + if (!omap_request_gpio(130) && !omap_request_gpio(139)) { + + omap_set_gpio_direction(130, 0); + omap_set_gpio_direction(139, 1); + + sdio_direct = 1; + omap_set_gpio_dataout(130, 0); + if (omap_get_gpio_datain(139) == 0) { + omap_set_gpio_dataout(130, 1); + if (omap_get_gpio_datain(139) == 1) + sdio_direct = 0; + } + + omap_free_gpio(130); + omap_free_gpio(139); + } else { + printf("Error: unable to acquire sdio2 clk GPIOs\n"); + sdio_direct = -1; + } + + return sdio_direct; +} + +/* + * 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 GUMSTIX_NO_EEPROM if eeprom doesn't respond */ + if (i2c_probe(EXPANSION_EEPROM_I2C_ADDRESS) == 1) { + i2c_set_bus_num(TWL4030_I2C_BUS); + return GUMSTIX_NO_EEPROM; + } + + /* read configuration data */ + i2c_read(EXPANSION_EEPROM_I2C_ADDRESS, 0, 1, (u8 *)&expansion_config, + sizeof(expansion_config)); + + i2c_set_bus_num(TWL4030_I2C_BUS); + + return expansion_config.device_vendor; +} + /* * Routine: misc_init_r * Description: Configure board specific parts @@ -116,6 +201,84 @@ int misc_init_r(void) #endif printf("Board revision: %d\n", get_board_revision()); + + switch (get_sdio2_config()) { + case 0: + printf("Tranceiver detected on mmc2\n"); + MUX_OVERO_SDIO2_TRANSCEIVER(); + break; + case 1: + printf("Direct connection on mmc2\n"); + MUX_OVERO_SDIO2_DIRECT(); + break; + default: + printf("Unable to detect mmc2 connection type\n"); + } + + switch (get_expansion_id()) { + case GUMSTIX_SUMMIT: + printf("Recognized Summit expansion board (rev %d %s)\n", + expansion_config.revision, + expansion_config.fab_revision); + setenv("defaultdisplay", "dvi"); + break; + case GUMSTIX_TOBI: + printf("Recognized Tobi expansion board (rev %d %s)\n", + expansion_config.revision, + expansion_config.fab_revision); + setenv("defaultdisplay", "dvi"); + break; + case GUMSTIX_TOBI_DUO: + printf("Recognized Tobi Duo expansion board (rev %d %s)\n", + expansion_config.revision, + expansion_config.fab_revision); + break; + case GUMSTIX_PALO35: + printf("Recognized Palo35 expansion board (rev %d %s)\n", + expansion_config.revision, + expansion_config.fab_revision); + setenv("defaultdisplay", "lcd35"); + break; + case GUMSTIX_PALO43: + printf("Recognized Palo43 expansion board (rev %d %s)\n", + expansion_config.revision, + expansion_config.fab_revision); + setenv("defaultdisplay", "lcd43"); + break; + case GUMSTIX_CHESTNUT43: + printf("Recognized Chestnut43 expansion board (rev %d %s)\n", + expansion_config.revision, + expansion_config.fab_revision); + setenv("defaultdisplay", "lcd43"); + break; + case GUMSTIX_PINTO: + printf("Recognized Pinto expansion board (rev %d %s)\n", + expansion_config.revision, + expansion_config.fab_revision); + break; + case GUMSTIX_GALLOP43: + printf("Recognized Gallop43 expansion board (rev %d %s)\n", + expansion_config.revision, + expansion_config.fab_revision); + setenv("defaultdisplay", "lcd43"); + break; + case ETTUS_USRP_E: + printf("Recognized Ettus Research USRP-E (rev %d %s)\n", + expansion_config.revision, + expansion_config.fab_revision); + MUX_USRP_E(); + setenv("defaultdisplay", "dvi"); + break; + case GUMSTIX_NO_EEPROM: + printf("No EEPROM on expansion board\n"); + break; + default: + printf("Unrecognized expansion board\n"); + } + + if (expansion_config.content == 1) + setenv(expansion_config.env_var, expansion_config.env_setting); + dieid_num_r(); return 0; @@ -178,3 +341,11 @@ int board_eth_init(bd_t *bis) #endif return rc; } + +#ifdef CONFIG_GENERIC_MMC +int board_mmc_init(bd_t *bis) +{ + omap_mmc_init(0); + return 0; +} +#endif