imx: ventana: split read_eeprom into standalone file
authorTim Harvey <tharvey@gateworks.com>
Mon, 2 Jun 2014 23:13:25 +0000 (16:13 -0700)
committerStefano Babic <sbabic@denx.de>
Fri, 6 Jun 2014 08:07:26 +0000 (10:07 +0200)
Split the read_eeprom function out so that it can be shared (ie with SPL)

Cc: Stefan Roese <sr@denx.de>
Cc: Otavio Salvador <otavio@ossystems.com.br>
Cc: Andy Ng <andreas2025@gmail.com>
Cc: Eric Nelson <eric.nelson@boundarydevices.com>
Cc: Tapani Utriainen <tapani@technexion.com>
Cc: Tom Rini <trini@ti.com>
Signed-off-by: Tim Harvey <tharvey@gateworks.com>
board/gateworks/gw_ventana/Makefile
board/gateworks/gw_ventana/eeprom.c [new file with mode: 0644]
board/gateworks/gw_ventana/gw_ventana.c
board/gateworks/gw_ventana/ventana_eeprom.h

index e8dab89c6567df598dfb17be7adf1ab33cdf66b1..03bd1fd372928845389c81d6722fff21a47e22d3 100644 (file)
@@ -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 (file)
index 0000000..e90186e
--- /dev/null
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2014 Gateworks Corporation
+ * Author: Tim Harvey <tharvey@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;
+}
index 031367d97a8e69cd24d73e1cd37181b123b48a9b..a39374db1fcb4d0fa23bb31970df46f2b40be473 100644 (file)
@@ -84,15 +84,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 */
@@ -499,84 +490,6 @@ static void setup_display(void)
 }
 #endif /* CONFIG_VIDEO_IPUV3 */
 
-/* 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
  */
@@ -1114,7 +1027,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) {
index 434b604542045537b85bfc2d5e66f2702ea4f967..5b065bea4eefc545331e3748b04d98b7eb705324 100644 (file)
@@ -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