Merge branch 'master' of git://git.denx.de/u-boot-spi
[oweals/u-boot.git] / board / ge / bx50v3 / bx50v3.c
index 478699aec90e95910e59527ffc451c8a082634a4..b2d065c1b801244e01216ff637032390718dc3cd 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
@@ -361,13 +366,14 @@ int board_cfb_skip(void)
        return 0;
 }
 
-static int detect_lcd(struct display_info_t const *dev)
+static int is_b850v3(void)
 {
-       if (IS_ENABLED(CONFIG_TARGET_GE_B450V3) ||
-           IS_ENABLED(CONFIG_TARGET_GE_B650V3))
-               return 1;
+       return confidx == 3;
+}
 
-       return 0;
+static int detect_lcd(struct display_info_t const *dev)
+{
+       return !is_b850v3();
 }
 
 struct display_info_t const displays[] = {{
@@ -619,7 +625,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 +644,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);
@@ -679,7 +683,7 @@ int board_early_init_f(void)
        setup_iomux_uart();
 
 #if defined(CONFIG_VIDEO_IPUV3)
-       if (IS_ENABLED(CONFIG_TARGET_GE_B850V3))
+       if (is_b850v3())
                /* Set LDB clock to Video PLL */
                select_ldb_di_clock_source(MXC_PLL5_CLK);
        else
@@ -689,12 +693,35 @@ 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)
-       if (IS_ENABLED(CONFIG_TARGET_GE_B850V3))
+       if (is_b850v3())
                setup_display_b850v3();
        else
                setup_display_bx50v3();
@@ -705,10 +732,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,12 +797,15 @@ 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);
 #endif
 
+       if (is_b850v3())
+               env_set("videoargs", "video=DP-1:1024x768@60 video=HDMI-A-1:1024x768@60");
+
        /* board specific pmic init */
        pmic_init();