Split the read_eeprom function out so that it can be shared (ie with SPL)

Signed-off-by: Tim Harvey <thar...@gateworks.com>
---
v3:
 - no changes

v2:
 - new patch in series
---
 board/gateworks/gw_ventana/Makefile         |  2 +-
 board/gateworks/gw_ventana/eeprom.c         | 89 +++++++++++++++++++++++++++++
 board/gateworks/gw_ventana/gw_ventana.c     | 89 +----------------------------
 board/gateworks/gw_ventana/ventana_eeprom.h | 11 ++++
 4 files changed, 102 insertions(+), 89 deletions(-)
 create mode 100644 board/gateworks/gw_ventana/eeprom.c

diff --git a/board/gateworks/gw_ventana/Makefile 
b/board/gateworks/gw_ventana/Makefile
index e8dab89..03bd1fd 100644
--- a/board/gateworks/gw_ventana/Makefile
+++ b/board/gateworks/gw_ventana/Makefile
@@ -6,5 +6,5 @@
 # SPDX-License-Identifier:  GPL-2.0+
 #
 
-obj-y  := gw_ventana.o gsc.o
+obj-y  := gw_ventana.o gsc.o eeprom.o
 
diff --git a/board/gateworks/gw_ventana/eeprom.c 
b/board/gateworks/gw_ventana/eeprom.c
new file mode 100644
index 0000000..e90186e
--- /dev/null
+++ b/board/gateworks/gw_ventana/eeprom.c
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2014 Gateworks Corporation
+ * Author: Tim Harvey <thar...@gateworks.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <common.h>
+#include <i2c.h>
+
+#include "gsc.h"
+#include "ventana_eeprom.h"
+
+/* read ventana EEPROM, check for validity, and return baseboard type */
+int
+read_eeprom(int bus, struct ventana_board_info *info)
+{
+       int i;
+       int chksum;
+       char baseboard;
+       int type;
+       unsigned char *buf = (unsigned char *)info;
+
+       memset(info, 0, sizeof(*info));
+
+       /*
+        * On a board with a missing/depleted backup battery for GSC, the
+        * board may be ready to probe the GSC before its firmware is
+        * running.  We will wait here indefinately for the GSC/EEPROM.
+        */
+       while (1) {
+               if (0 == i2c_set_bus_num(bus) &&
+                   0 == i2c_probe(GSC_EEPROM_ADDR))
+                       break;
+               mdelay(1);
+       }
+
+       /* read eeprom config section */
+       if (gsc_i2c_read(GSC_EEPROM_ADDR, 0x00, 1, buf, sizeof(*info))) {
+               puts("EEPROM: Failed to read EEPROM\n");
+               info->model[0] = 0;
+               return GW_UNKNOWN;
+       }
+
+       /* sanity checks */
+       if (info->model[0] != 'G' || info->model[1] != 'W') {
+               puts("EEPROM: Invalid Model in EEPROM\n");
+               info->model[0] = 0;
+               return GW_UNKNOWN;
+       }
+
+       /* validate checksum */
+       for (chksum = 0, i = 0; i < sizeof(*info)-2; i++)
+               chksum += buf[i];
+       if ((info->chksum[0] != chksum>>8) ||
+           (info->chksum[1] != (chksum&0xff))) {
+               puts("EEPROM: Failed EEPROM checksum\n");
+               info->model[0] = 0;
+               return GW_UNKNOWN;
+       }
+
+       /* original GW5400-A prototype */
+       baseboard = info->model[3];
+       if (strncasecmp((const char *)info->model, "GW5400-A", 8) == 0)
+               baseboard = '0';
+
+       switch (baseboard) {
+       case '0': /* original GW5400-A prototype */
+               type = GW54proto;
+               break;
+       case '1':
+               type = GW51xx;
+               break;
+       case '2':
+               type = GW52xx;
+               break;
+       case '3':
+               type = GW53xx;
+               break;
+       case '4':
+               type = GW54xx;
+               break;
+       default:
+               printf("EEPROM: Unknown model in EEPROM: %s\n", info->model);
+               type = GW_UNKNOWN;
+               break;
+       }
+       return type;
+}
diff --git a/board/gateworks/gw_ventana/gw_ventana.c 
b/board/gateworks/gw_ventana/gw_ventana.c
index 2113740..3b6bc01 100644
--- a/board/gateworks/gw_ventana/gw_ventana.c
+++ b/board/gateworks/gw_ventana/gw_ventana.c
@@ -81,15 +81,6 @@ DECLARE_GLOBAL_DATA_PTR;
  */
 static struct ventana_board_info ventana_info;
 
-enum {
-       GW54proto, /* original GW5400-A prototype */
-       GW51xx,
-       GW52xx,
-       GW53xx,
-       GW54xx,
-       GW_UNKNOWN,
-};
-
 int board_type;
 
 /* UART1: Function varies per baseboard */
@@ -368,84 +359,6 @@ int board_eth_init(bd_t *bis)
        return 0;
 }
 
-/* read ventana EEPROM, check for validity, and return baseboard type */
-static int
-read_eeprom(void)
-{
-       int i;
-       int chksum;
-       char baseboard;
-       int type;
-       struct ventana_board_info *info = &ventana_info;
-       unsigned char *buf = (unsigned char *)&ventana_info;
-
-       memset(info, 0, sizeof(ventana_info));
-
-       /*
-        * On a board with a missing/depleted backup battery for GSC, the
-        * board may be ready to probe the GSC before its firmware is
-        * running.  We will wait here indefinately for the GSC/EEPROM.
-        */
-       while (1) {
-               if (0 == i2c_set_bus_num(I2C_GSC) &&
-                   0 == i2c_probe(GSC_EEPROM_ADDR))
-                       break;
-               mdelay(1);
-       }
-
-       /* read eeprom config section */
-       if (gsc_i2c_read(GSC_EEPROM_ADDR, 0x00, 1, buf, sizeof(ventana_info))) {
-               puts("EEPROM: Failed to read EEPROM\n");
-               info->model[0] = 0;
-               return GW_UNKNOWN;
-       }
-
-       /* sanity checks */
-       if (info->model[0] != 'G' || info->model[1] != 'W') {
-               puts("EEPROM: Invalid Model in EEPROM\n");
-               info->model[0] = 0;
-               return GW_UNKNOWN;
-       }
-
-       /* validate checksum */
-       for (chksum = 0, i = 0; i < sizeof(*info)-2; i++)
-               chksum += buf[i];
-       if ((info->chksum[0] != chksum>>8) ||
-           (info->chksum[1] != (chksum&0xff))) {
-               puts("EEPROM: Failed EEPROM checksum\n");
-               info->model[0] = 0;
-               return GW_UNKNOWN;
-       }
-
-       /* original GW5400-A prototype */
-       baseboard = info->model[3];
-       if (strncasecmp((const char *)info->model, "GW5400-A", 8) == 0)
-               baseboard = '0';
-
-       switch (baseboard) {
-       case '0': /* original GW5400-A prototype */
-               type = GW54proto;
-               break;
-       case '1':
-               type = GW51xx;
-               break;
-       case '2':
-               type = GW52xx;
-               break;
-       case '3':
-               type = GW53xx;
-               break;
-       case '4':
-               type = GW54xx;
-               break;
-       default:
-               printf("EEPROM: Unknown model in EEPROM: %s\n", info->model);
-               type = GW_UNKNOWN;
-               break;
-       }
-       return type;
-}
-
 /*
  * Baseboard specific GPIO
  */
@@ -924,7 +837,7 @@ int board_init(void)
        setup_sata();
 #endif
        /* read Gateworks EEPROM into global struct (used later) */
-       board_type = read_eeprom();
+       board_type = read_eeprom(I2C_GSC, &ventana_info);
 
        /* board-specifc GPIO iomux */
        if (board_type < GW_UNKNOWN) {
diff --git a/board/gateworks/gw_ventana/ventana_eeprom.h 
b/board/gateworks/gw_ventana/ventana_eeprom.h
index 434b604..5b065be 100644
--- a/board/gateworks/gw_ventana/ventana_eeprom.h
+++ b/board/gateworks/gw_ventana/ventana_eeprom.h
@@ -103,4 +103,15 @@ enum {
        EECONFIG_RES15,
 };
 
+enum {
+       GW54proto, /* original GW5400-A prototype */
+       GW51xx,
+       GW52xx,
+       GW53xx,
+       GW54xx,
+       GW_UNKNOWN,
+};
+
+int read_eeprom(int bus, struct ventana_board_info *);
+
 #endif
-- 
1.8.3.2

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to