]> git.sur5r.net Git - u-boot/blobdiff - board/ge/bx50v3/bx50v3.c
board: ge: bx50v3: detect the monitor type by reading VPD earlier
[u-boot] / board / ge / bx50v3 / bx50v3.c
index 478699aec90e95910e59527ffc451c8a082634a4..3de958e6283543fcd6672c4aaadee5d14de8199a 100644 (file)
 #include "../../../drivers/net/e1000.h"
 DECLARE_GLOBAL_DATA_PTR;
 
+struct vpd_cache;
+
+static int confidx = 3;  /* Default to b850v3. */
+static struct vpd_cache vpd;
+
 #ifndef CONFIG_SYS_I2C_EEPROM_ADDR
 # define CONFIG_SYS_I2C_EEPROM_ADDR     0x50
 # define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 1
@@ -619,7 +624,6 @@ static void process_vpd(struct vpd_cache *vpd)
 
 static int read_vpd(uint eeprom_bus)
 {
-       struct vpd_cache vpd;
        int res;
        int size = 1024;
        uint8_t *data;
@@ -639,7 +643,6 @@ static int read_vpd(uint eeprom_bus)
        if (res == 0) {
                memset(&vpd, 0, sizeof(vpd));
                vpd_reader(size, data, &vpd, vpd_callback);
-               process_vpd(&vpd);
        }
 
        free(data);
@@ -689,8 +692,31 @@ int board_early_init_f(void)
        return 0;
 }
 
+static void set_confidx(const struct vpd_cache* vpd)
+{
+       switch (vpd->product_id) {
+       case VPD_PRODUCT_B450:
+               confidx = 1;
+               break;
+       case VPD_PRODUCT_B650:
+               confidx = 2;
+               break;
+       case VPD_PRODUCT_B850:
+               confidx = 3;
+               break;
+       }
+}
+
 int board_init(void)
 {
+       setup_i2c(1, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info1);
+       setup_i2c(2, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info2);
+       setup_i2c(3, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info3);
+
+       read_vpd(CONFIG_SYS_I2C_EEPROM_BUS);
+
+       set_confidx(&vpd);
+
        gpio_direction_output(SUS_S3_OUT, 1);
        gpio_direction_output(WIFI_EN, 1);
 #if defined(CONFIG_VIDEO_IPUV3)
@@ -705,10 +731,6 @@ int board_init(void)
 #ifdef CONFIG_MXC_SPI
        setup_spi();
 #endif
-       setup_i2c(1, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info1);
-       setup_i2c(2, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info2);
-       setup_i2c(3, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info3);
-
        return 0;
 }
 
@@ -774,7 +796,7 @@ void pmic_init(void)
 
 int board_late_init(void)
 {
-       read_vpd(CONFIG_SYS_I2C_EEPROM_BUS);
+       process_vpd(&vpd);
 
 #ifdef CONFIG_CMD_BMODE
        add_board_boot_modes(board_boot_modes);