Implement register functionality for Linux and NvAPI i2c drivers

This commit is contained in:
Adam Honse
2021-12-24 13:26:27 -06:00
parent 7e6be8a849
commit 73e02bfe98
2 changed files with 33 additions and 10 deletions

View File

@@ -33,16 +33,39 @@ s32 i2c_smbus_linux::i2c_smbus_xfer(u8 addr, char read_write, u8 command, int si
s32 i2c_smbus_linux::i2c_xfer(u8 addr, char read_write, int reg_size, u8* reg_data, int* size, u8* data)
{
i2c_rdwr_ioctl_data rdwr;
i2c_msg msg;
i2c_msg msgs[2];
msg.addr = addr;
msg.flags = read_write;
msg.len = *size;
msg.buf = (u8*)malloc(*size);
memcpy(&msg.buf, &data, *size);
/*-------------------------------------------------*\
| Create register message |
\*-------------------------------------------------*/
if(reg_size > 0)
{
msgs[0].addr = addr;
msgs[0].flags = I2C_SMBUS_WRITE;
msgs[0].len = reg_size;
msgs[0].buf = (u8*)malloc(reg_size);
memcpy(&msgs[0].buf, &reg_data, reg_size);
}
rdwr.msgs = &msg;
rdwr.nmsgs = 1;
/*-------------------------------------------------*\
| Create data message |
\*-------------------------------------------------*/
msgs[1].addr = addr;
msgs[1].flags = read_write;
msgs[1].len = *size;
msgs[1].buf = (u8*)malloc(*size);
memcpy(&msgs[1].buf, &data, *size);
if(reg_size > 0)
{
rdwr.msgs = &msgs[0];
rdwr.nmsgs = 2;
}
else
{
rdwr.msgs = &msgs[1];
rdwr.nmsgs = 1;
}
ioctl(handle, I2C_SLAVE, addr);
return ioctl(handle, I2C_RDWR, &rdwr);

View File

@@ -124,8 +124,8 @@ s32 i2c_smbus_nvapi::i2c_xfer(u8 addr, char read_write, int reg_size, u8* reg_da
unsigned int unknown = 0;
NV_I2C_INFO_V3 i2c_data;
i2c_data.i2c_reg_address = NULL;
i2c_data.reg_addr_size = 0;
i2c_data.i2c_reg_address = reg_data;
i2c_data.reg_addr_size = reg_size;
// Set up data buffer, zero bytes in length
i2c_data.data = data;