8ff0e93c3effc202c2a1d72b96d95796c1508289
[openembedded.git] /
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
5
6 ---
7  board/overo/overo.c |   92 +++++++++++++++++++++++++++++++++++++++++++++++++++
8  1 files changed, 92 insertions(+), 0 deletions(-)
9
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
14 @@ -39,6 +39,31 @@
15  #include <asm/mach-types.h>
16  #include "overo.h"
17  
18 +static struct {
19 +       unsigned int device_vendor;
20 +       unsigned char revision;
21 +       unsigned char content;
22 +       unsigned char data[6];
23 +} expansion_config;
24 +
25 +#define TWL4030_I2C_BUS                        0
26 +
27 +#define EXPANSION_EEPROM_I2C_BUS       2
28 +#define EXPANSION_EEPROM_I2C_ADDRESS   0x50
29 +
30 +#define GUMSTIX_VENDORID               0x0200
31 +
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
39 +
40 +#define GUMSTIX_NO_EEPROM              0xfffffffe
41 +#define GUMSTIX_UNKNOWN                        0xffffffff
42 +
43  #if defined(CONFIG_CMD_NET)
44  static void setup_net_chip(void);
45  #endif
46 @@ -130,6 +155,31 @@ int get_board_revision(void) {
47  }
48  
49  /*
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
54 + */
55 +unsigned int get_expansion_id(void)
56 +{
57 +       i2c_set_bus_num(EXPANSION_EEPROM_I2C_BUS);
58 +
59 +       /* return GUMSTIX_NO_EEPROM if eeprom doesn't respond */
60 +       if (i2c_probe(EXPANSION_EEPROM_I2C_ADDRESS) == 1)
61 +               return GUMSTIX_NO_EEPROM;
62 +
63 +       /* read configuration data */
64 +       i2c_read(EXPANSION_EEPROM_I2C_ADDRESS, 0, 1, (u8 *)&expansion_config,
65 +                sizeof(expansion_config));
66 +
67 +       if ( (expansion_config.device_vendor & 0xffff) != GUMSTIX_VENDORID )
68 +               return GUMSTIX_UNKNOWN;
69 +       else
70 +               return expansion_config.device_vendor;
71 +}
72 +
73 +
74 +/*
75   * Routine: misc_init_r
76   * Description: Configure board specific parts
77   */
78 @@ -156,6 +206,48 @@ int misc_init_r(void)
79                         printf(" unsupported\n");
80         }
81  
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");
87 +                       break;
88 +               case GUMSTIX_TOBI:
89 +                       printf("Recognized Tobi expansion board (rev %d %s)\n",
90 +                               expansion_config.revision, expansion_config.data);
91 +                       setenv("defaultdisplay", "dvi");
92 +                       break;
93 +               case GUMSTIX_TOBI_DUO:
94 +                       printf("Recognized Tobi Duo expansion board (rev %d %s)\n",
95 +                               expansion_config.revision, expansion_config.data);
96 +                       break;
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");
101 +                       break;
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");
106 +                       break;
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");
111 +                       break;
112 +               case GUMSTIX_PINTO:
113 +                       printf("Recognized Pinto expansion board (rev %d %s)\n",
114 +                               expansion_config.revision, expansion_config.data);
115 +                       break;
116 +               case GUMSTIX_NO_EEPROM:
117 +                       printf("No EEPROM on expansion board\n");
118 +                       break;
119 +               case GUMSTIX_UNKNOWN:
120 +                       printf("Unrecognized expansion board\n");
121 +       }
122 +
123 +       i2c_set_bus_num(TWL4030_I2C_BUS);
124         twl4030_power_init();
125         twl4030_led_init(TWL4030_LED_LEDEN_LEDAON | TWL4030_LED_LEDEN_LEDBON);
126  
127 -- 
128 1.6.6.1
129