]> git.sur5r.net Git - u-boot/commitdiff
i2c_eeprom: add read and write functions
authorJonas Karlman <jonas@kwiboo.se>
Sat, 22 Apr 2017 08:57:41 +0000 (08:57 +0000)
committerSimon Glass <sjg@chromium.org>
Wed, 10 May 2017 19:37:22 +0000 (13:37 -0600)
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
Reviewed-by: Simon Glass <sjg@chromium.org>
drivers/misc/i2c_eeprom.c
include/i2c_eeprom.h

index c9f4174bad42f928e707e7a2570e24a827bca536..da6e2b05f730158d6622cbde37dab9a28cf692ac 100644 (file)
 #include <i2c.h>
 #include <i2c_eeprom.h>
 
-static int i2c_eeprom_read(struct udevice *dev, int offset, uint8_t *buf,
-                          int size)
+int i2c_eeprom_read(struct udevice *dev, int offset, uint8_t *buf, int size)
+{
+       const struct i2c_eeprom_ops *ops = device_get_ops(dev);
+
+       if (!ops->read)
+               return -ENOSYS;
+
+       return ops->read(dev, offset, buf, size);
+}
+
+int i2c_eeprom_write(struct udevice *dev, int offset, uint8_t *buf, int size)
+{
+       const struct i2c_eeprom_ops *ops = device_get_ops(dev);
+
+       if (!ops->write)
+               return -ENOSYS;
+
+       return ops->write(dev, offset, buf, size);
+}
+
+static int i2c_eeprom_std_read(struct udevice *dev, int offset, uint8_t *buf,
+                              int size)
 {
        return dm_i2c_read(dev, offset, buf, size);
 }
 
-static int i2c_eeprom_write(struct udevice *dev, int offset,
-                           const uint8_t *buf, int size)
+static int i2c_eeprom_std_write(struct udevice *dev, int offset,
+                               const uint8_t *buf, int size)
 {
        return -ENODEV;
 }
 
 struct i2c_eeprom_ops i2c_eeprom_std_ops = {
-       .read   = i2c_eeprom_read,
-       .write  = i2c_eeprom_write,
+       .read   = i2c_eeprom_std_read,
+       .write  = i2c_eeprom_std_write,
 };
 
 static int i2c_eeprom_std_ofdata_to_platdata(struct udevice *dev)
index 04528928126606807f477cd3bac0dfae6c69cd84..bb5c6b118b9345cf277fd1afaf3da74c58499b59 100644 (file)
@@ -20,4 +20,28 @@ struct i2c_eeprom {
        unsigned pagewidth;
 };
 
+/*
+ * i2c_eeprom_read() - read bytes from an I2C EEPROM chip
+ *
+ * @dev:       Chip to read from
+ * @offset:    Offset within chip to start reading
+ * @buf:       Place to put data
+ * @size:      Number of bytes to read
+ *
+ * @return 0 on success, -ve on failure
+ */
+int i2c_eeprom_read(struct udevice *dev, int offset, uint8_t *buf, int size);
+
+/*
+ * i2c_eeprom_write() - write bytes to an I2C EEPROM chip
+ *
+ * @dev:       Chip to write to
+ * @offset:    Offset within chip to start writing
+ * @buf:       Buffer containing data to write
+ * @size:      Number of bytes to write
+ *
+ * @return 0 on success, -ve on failure
+ */
+int i2c_eeprom_write(struct udevice *dev, int offset, uint8_t *buf, int size);
+
 #endif