[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 5/6] hw/nvram/eeprom_at24c: Add I2C write helper
From: |
Peter Delevoryas |
Subject: |
[PATCH 5/6] hw/nvram/eeprom_at24c: Add I2C write helper |
Date: |
Sat, 14 Jan 2023 09:01:50 -0800 |
Signed-off-by: Peter Delevoryas <peter@pjd.dev>
---
hw/nvram/eeprom_at24c.c | 15 +++++++++++++++
include/hw/nvram/eeprom_at24c.h | 2 ++
2 files changed, 17 insertions(+)
diff --git a/hw/nvram/eeprom_at24c.c b/hw/nvram/eeprom_at24c.c
index 0c27eae2b354..69565a420c28 100644
--- a/hw/nvram/eeprom_at24c.c
+++ b/hw/nvram/eeprom_at24c.c
@@ -10,6 +10,7 @@
#include "qemu/osdep.h"
#include "qapi/error.h"
+#include "qemu/bitops.h"
#include "qemu/module.h"
#include "hw/i2c/i2c.h"
#include "hw/nvram/eeprom_at24c.h"
@@ -138,6 +139,20 @@ void at24c_eeprom_init(I2CBus *bus, uint8_t address,
uint32_t rom_size)
i2c_slave_realize_and_unref(i2c_dev, bus, &error_abort);
}
+void at24c_eeprom_write(I2CBus *bus, uint8_t address, uint16_t offset,
+ const uint8_t *buf, uint32_t len)
+{
+ int i;
+
+ i2c_start_send(bus, address);
+ i2c_send(bus, extract16(offset, 8, 8));
+ i2c_send(bus, extract16(offset, 0, 8));
+ for (i = 0; i < len; i++) {
+ i2c_send(bus, buf[i]);
+ }
+ i2c_end_transfer(bus);
+}
+
static void at24c_eeprom_realize(DeviceState *dev, Error **errp)
{
EEPROMState *ee = AT24C_EE(dev);
diff --git a/include/hw/nvram/eeprom_at24c.h b/include/hw/nvram/eeprom_at24c.h
index 9d9cf212757c..bbca73a07ad1 100644
--- a/include/hw/nvram/eeprom_at24c.h
+++ b/include/hw/nvram/eeprom_at24c.h
@@ -6,5 +6,7 @@
#include "hw/i2c/i2c.h"
void at24c_eeprom_init(I2CBus *bus, uint8_t address, uint32_t rom_size);
+void at24c_eeprom_write(I2CBus *bus, uint8_t address, uint16_t offset,
+ const uint8_t *buf, uint32_t len);
#endif
--
2.39.0
Re: [PATCH 0/6] hw/nvram/eeprom_at24c: Cleanup + FRUID EEPROM init example, Peter Delevoryas, 2023/01/14