diff options
author | Baruch Siach <baruch@tkos.co.il> | 2019-04-07 12:38:49 +0300 |
---|---|---|
committer | Heiko Schocher <hs@denx.de> | 2019-04-11 15:21:33 +0200 |
commit | 84c80c63d53bc8a7779b1e7e7084ee3b2d20e768 (patch) | |
tree | 5ea953630d2a4233d0302b24b5e62933993d6715 /drivers/misc/i2c_eeprom.c | |
parent | a29034d1e6d1c1535055f455b5af5906a7edbc04 (diff) | |
download | u-boot-84c80c63d53bc8a7779b1e7e7084ee3b2d20e768.tar.gz |
misc: i2c_eeprom: add eeprom write support
Write up to page size in each i2c transfer.
Signed-off-by: Baruch Siach <baruch@tkos.co.il>
Reviewed-by: Heiko Schocher <hs@denx.de>
Diffstat (limited to 'drivers/misc/i2c_eeprom.c')
-rw-r--r-- | drivers/misc/i2c_eeprom.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/drivers/misc/i2c_eeprom.c b/drivers/misc/i2c_eeprom.c index ce2cad44d8..f25d054007 100644 --- a/drivers/misc/i2c_eeprom.c +++ b/drivers/misc/i2c_eeprom.c @@ -5,6 +5,7 @@ #include <common.h> #include <linux/err.h> +#include <linux/kernel.h> #include <dm.h> #include <i2c.h> #include <i2c_eeprom.h> @@ -38,7 +39,24 @@ static int i2c_eeprom_std_read(struct udevice *dev, int offset, uint8_t *buf, static int i2c_eeprom_std_write(struct udevice *dev, int offset, const uint8_t *buf, int size) { - return -ENODEV; + struct i2c_eeprom *priv = dev_get_priv(dev); + int ret; + + while (size > 0) { + int write_size = min_t(int, size, priv->pagesize); + + ret = dm_i2c_write(dev, offset, buf, write_size); + if (ret) + return ret; + + offset += write_size; + buf += write_size; + size -= write_size; + + udelay(10000); + } + + return 0; } static const struct i2c_eeprom_ops i2c_eeprom_std_ops = { |