]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
board: phytec: common: Move eeprom read to new function
authorDaniel Schultz <d.schultz@phytec.de>
Wed, 22 May 2024 06:18:22 +0000 (23:18 -0700)
committerTom Rini <trini@konsulko.com>
Fri, 7 Jun 2024 20:01:53 +0000 (14:01 -0600)
We need to read multiple times from different offsets in API v3.
Move the EEPROM read logic into a dedicated function to make it
usable multiple times.

Signed-off-by: Daniel Schultz <d.schultz@phytec.de>
Tested-by: Wadim Egorov <w.egorov@phytec.de>
board/phytec/common/phytec_som_detection.c

index b14bb3dbb7fa78dce7a74d67f294ff0a9d8b88bb..a089fe9bc9047dad356a17436df05b0a93806579 100644 (file)
@@ -47,16 +47,9 @@ int phytec_eeprom_data_setup(struct phytec_eeprom_data *data,
        return ret;
 }
 
-int phytec_eeprom_data_init(struct phytec_eeprom_data *data,
-                           int bus_num, int addr)
+int phytec_eeprom_read(u8 *data, int bus_num, int addr, int size, int offset)
 {
-       int ret, i;
-       unsigned int crc;
-       u8 *ptr;
-       const unsigned int payload_size = sizeof(struct phytec_eeprom_payload);
-
-       if (!data)
-               data = &eeprom_data;
+       int ret;
 
 #if CONFIG_IS_ENABLED(DM_I2C)
        struct udevice *dev;
@@ -64,19 +57,36 @@ int phytec_eeprom_data_init(struct phytec_eeprom_data *data,
        ret = i2c_get_chip_for_busnum(bus_num, addr, 2, &dev);
        if (ret) {
                pr_err("%s: i2c EEPROM not found: %i.\n", __func__, ret);
-               goto err;
+               return ret;
        }
 
-       ret = dm_i2c_read(dev, 0, (uint8_t *)data, payload_size);
+       ret = dm_i2c_read(dev, offset, (uint8_t *)data, size);
        if (ret) {
                pr_err("%s: Unable to read EEPROM data: %i\n", __func__, ret);
-               goto err;
+               return ret;
        }
 #else
        i2c_set_bus_num(bus_num);
-       ret = i2c_read(addr, 0, 2, (uint8_t *)data,
-                      sizeof(struct phytec_eeprom_data));
+       ret = i2c_read(addr, offset, 2, (uint8_t *)data, size);
 #endif
+       return ret;
+}
+
+int phytec_eeprom_data_init(struct phytec_eeprom_data *data,
+                           int bus_num, int addr)
+{
+       int ret, i;
+       unsigned int crc;
+       u8 *ptr;
+       const unsigned int payload_size = sizeof(struct phytec_eeprom_payload);
+
+       if (!data)
+               data = &eeprom_data;
+
+       ret = phytec_eeprom_read((u8 *)data, bus_num, addr,
+                                payload_size, 0);
+       if (ret)
+               goto err;
 
        if (data->payload.api_rev == 0xff) {
                pr_err("%s: EEPROM is not flashed. Prototype?\n", __func__);