1 From f1ad90ae5fd07257ea42aa771e16a7798cd440bb Mon Sep 17 00:00:00 2001
2 From: Steve Sakoman <steve@sakoman.com>
3 Date: Fri, 12 Feb 2010 12:17:48 -0800
4 Subject: [PATCH 07/50] OMAP3: detect expansion board type/version using eeprom contents
7 board/overo/overo.c | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++
8 1 files changed, 92 insertions(+), 0 deletions(-)
10 diff --git a/board/overo/overo.c b/board/overo/overo.c
11 index 3df1a12..2838a1f 100644
12 --- a/board/overo/overo.c
13 +++ b/board/overo/overo.c
15 #include <asm/mach-types.h>
19 + unsigned int device_vendor;
20 + unsigned char revision;
21 + unsigned char content;
22 + unsigned char data[6];
25 +#define TWL4030_I2C_BUS 0
27 +#define EXPANSION_EEPROM_I2C_BUS 2
28 +#define EXPANSION_EEPROM_I2C_ADDRESS 0x50
30 +#define GUMSTIX_VENDORID 0x0200
32 +#define GUMSTIX_SUMMIT 0x01000200
33 +#define GUMSTIX_TOBI 0x02000200
34 +#define GUMSTIX_TOBI_DUO 0x03000200
35 +#define GUMSTIX_PALO35 0x04000200
36 +#define GUMSTIX_PALO43 0x05000200
37 +#define GUMSTIX_CHESTNUT43 0x06000200
38 +#define GUMSTIX_PINTO 0x07000200
40 +#define GUMSTIX_NO_EEPROM 0xfffffffe
41 +#define GUMSTIX_UNKNOWN 0xffffffff
43 #if defined(CONFIG_CMD_NET)
44 static void setup_net_chip(void);
46 @@ -130,6 +155,31 @@ int get_board_revision(void) {
50 + * Routine: get_expansion_id
51 + * Description: This function checks for expansion board by checking I2C
52 + * bus 2 for the availability of an AT24C01B serial EEPROM.
53 + * returns the device_vendor field from the EEPROM
55 +unsigned int get_expansion_id(void)
57 + i2c_set_bus_num(EXPANSION_EEPROM_I2C_BUS);
59 + /* return GUMSTIX_NO_EEPROM if eeprom doesn't respond */
60 + if (i2c_probe(EXPANSION_EEPROM_I2C_ADDRESS) == 1)
61 + return GUMSTIX_NO_EEPROM;
63 + /* read configuration data */
64 + i2c_read(EXPANSION_EEPROM_I2C_ADDRESS, 0, 1, (u8 *)&expansion_config,
65 + sizeof(expansion_config));
67 + if ( (expansion_config.device_vendor & 0xffff) != GUMSTIX_VENDORID )
68 + return GUMSTIX_UNKNOWN;
70 + return expansion_config.device_vendor;
75 * Routine: misc_init_r
76 * Description: Configure board specific parts
78 @@ -156,6 +206,48 @@ int misc_init_r(void)
79 printf(" unsupported\n");
82 + switch (get_expansion_id()) {
83 + case GUMSTIX_SUMMIT:
84 + printf("Recognized Summit expansion board (rev %d %s)\n",
85 + expansion_config.revision, expansion_config.data);
86 + setenv("defaultdisplay", "dvi");
89 + printf("Recognized Tobi expansion board (rev %d %s)\n",
90 + expansion_config.revision, expansion_config.data);
91 + setenv("defaultdisplay", "dvi");
93 + case GUMSTIX_TOBI_DUO:
94 + printf("Recognized Tobi Duo expansion board (rev %d %s)\n",
95 + expansion_config.revision, expansion_config.data);
97 + case GUMSTIX_PALO35:
98 + printf("Recognized Palo 35 expansion board (rev %d %s)\n",
99 + expansion_config.revision, expansion_config.data);
100 + setenv("defaultdisplay", "lcd35");
102 + case GUMSTIX_PALO43:
103 + printf("Recognized Palo 43 expansion board (rev %d %s)\n",
104 + expansion_config.revision, expansion_config.data);
105 + setenv("defaultdisplay", "lcd43");
107 + case GUMSTIX_CHESTNUT43:
108 + printf("Recognized Chestnut 43 expansion board (rev %d %s)\n",
109 + expansion_config.revision, expansion_config.data);
110 + setenv("defaultdisplay", "lcd43");
112 + case GUMSTIX_PINTO:
113 + printf("Recognized Pinto expansion board (rev %d %s)\n",
114 + expansion_config.revision, expansion_config.data);
116 + case GUMSTIX_NO_EEPROM:
117 + printf("No EEPROM on expansion board\n");
119 + case GUMSTIX_UNKNOWN:
120 + printf("Unrecognized expansion board\n");
123 + i2c_set_bus_num(TWL4030_I2C_BUS);
124 twl4030_power_init();
125 twl4030_led_init(TWL4030_LED_LEDEN_LEDAON | TWL4030_LED_LEDEN_LEDBON);