mirror of
https://github.com/CalcProgrammer1/OpenRGB.git
synced 2026-06-02 11:05:22 -04:00
Add i2c block write with register parameter functions
This commit is contained in:
@@ -183,12 +183,14 @@ s32 i2c_smbus_interface::i2c_smbus_xfer_call(u8 addr, char read_write, u8 comman
|
||||
return(i2c_ret);
|
||||
}
|
||||
|
||||
s32 i2c_smbus_interface::i2c_xfer_call(u8 addr, char read_write, int* size, u8 *data)
|
||||
s32 i2c_smbus_interface::i2c_xfer_call(u8 addr, char read_write, int reg_size, u8* reg_data, int* size, u8 *data)
|
||||
{
|
||||
i2c_smbus_xfer_mutex.lock();
|
||||
|
||||
i2c_addr = addr;
|
||||
i2c_read_write = read_write;
|
||||
i2c_reg_size = reg_size;
|
||||
i2c_reg_data = reg_data;
|
||||
i2c_size = size;
|
||||
i2c_data = data;
|
||||
smbus_xfer = false;
|
||||
@@ -210,12 +212,22 @@ s32 i2c_smbus_interface::i2c_xfer_call(u8 addr, char read_write, int* size, u8 *
|
||||
|
||||
s32 i2c_smbus_interface::i2c_read_block(u8 addr, int* size, u8* data)
|
||||
{
|
||||
return i2c_xfer_call(addr, I2C_SMBUS_READ, size, data);
|
||||
return i2c_xfer_call(addr, I2C_SMBUS_READ, 0, NULL, size, data);
|
||||
}
|
||||
|
||||
s32 i2c_smbus_interface::i2c_write_block(u8 addr, int size, u8 *data)
|
||||
{
|
||||
return i2c_xfer_call(addr, I2C_SMBUS_WRITE, &size, data);
|
||||
return i2c_xfer_call(addr, I2C_SMBUS_WRITE, 0, NULL, &size, data);
|
||||
}
|
||||
|
||||
s32 i2c_smbus_interface::i2c_read_block_reg(u8 addr, int reg_size, u8* reg_data, int* size, u8* data)
|
||||
{
|
||||
return i2c_xfer_call(addr, I2C_SMBUS_READ, reg_size, reg_data, size, data);
|
||||
}
|
||||
|
||||
s32 i2c_smbus_interface::i2c_write_block_reg(u8 addr, int reg_size, u8* reg_data, int size, u8 *data)
|
||||
{
|
||||
return i2c_xfer_call(addr, I2C_SMBUS_WRITE, reg_size, reg_data, &size, data);
|
||||
}
|
||||
|
||||
void i2c_smbus_interface::i2c_smbus_thread_function()
|
||||
@@ -238,7 +250,7 @@ void i2c_smbus_interface::i2c_smbus_thread_function()
|
||||
}
|
||||
else
|
||||
{
|
||||
i2c_ret = i2c_xfer(i2c_addr, i2c_read_write, i2c_size, i2c_data);
|
||||
i2c_ret = i2c_xfer(i2c_addr, i2c_read_write, i2c_reg_size, i2c_reg_data, i2c_size, i2c_data);
|
||||
}
|
||||
|
||||
std::unique_lock<std::mutex> done_lock(i2c_smbus_done_mutex);
|
||||
|
||||
@@ -103,13 +103,15 @@ public:
|
||||
//Addtional functions added for pure I2C block operations
|
||||
s32 i2c_read_block(u8 addr, int* size, u8* data);
|
||||
s32 i2c_write_block(u8 addr, int size, u8* data);
|
||||
s32 i2c_read_block_reg(u8 addr, int reg_size, u8* reg_data, int* size, u8* data);
|
||||
s32 i2c_write_block_reg(u8 addr, int reg_size, u8* reg_data, int size, u8* data);
|
||||
|
||||
//Handle SMBus and I2C transfer calls in a single thread
|
||||
s32 i2c_smbus_xfer_call(u8 addr, char read_write, u8 command, int size, i2c_smbus_data* data);
|
||||
s32 i2c_xfer_call(u8 addr, char read_write, int* size, u8 *data);
|
||||
s32 i2c_xfer_call(u8 addr, char read_write, int reg_size, u8* reg_data, int* size, u8 *data);
|
||||
|
||||
virtual s32 i2c_smbus_xfer(u8 addr, char read_write, u8 command, int size, i2c_smbus_data* data) = 0;
|
||||
virtual s32 i2c_xfer(u8 addr, char read_write, int* size, u8* data) = 0;
|
||||
virtual s32 i2c_xfer(u8 addr, char read_write, int reg_size, u8* reg_data, int* size, u8* data) = 0;
|
||||
|
||||
private:
|
||||
std::thread * i2c_smbus_thread;
|
||||
@@ -130,8 +132,10 @@ private:
|
||||
u16 i2c_command;
|
||||
int i2c_size_smbus;
|
||||
int* i2c_size;
|
||||
int i2c_reg_size;
|
||||
i2c_smbus_data* i2c_data_smbus;
|
||||
u8* i2c_data;
|
||||
u8* i2c_reg_data;
|
||||
s32 i2c_ret;
|
||||
bool smbus_xfer;
|
||||
};
|
||||
|
||||
@@ -194,7 +194,7 @@ s32 i2c_smbus_amdadl::i2c_smbus_xfer(u8 addr, char read_write, u8 command, int s
|
||||
return (ret);
|
||||
};
|
||||
|
||||
s32 i2c_smbus_amdadl::i2c_xfer(u8 addr, char read_write, int* size, u8* data)
|
||||
s32 i2c_smbus_amdadl::i2c_xfer(u8 addr, char read_write, int reg_size, u8* reg_data, int* size, u8* data)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -30,6 +30,6 @@ public:
|
||||
|
||||
private:
|
||||
s32 i2c_smbus_xfer(u8 addr, char read_write, u8 command, int size, i2c_smbus_data* data);
|
||||
s32 i2c_xfer(u8 addr, char read_write, int* size, u8* data);
|
||||
s32 i2c_xfer(u8 addr, char read_write, int reg_size, u8* reg_data, int* size, u8* data);
|
||||
ADL_CONTEXT_HANDLE context = NULL;
|
||||
};
|
||||
|
||||
@@ -484,7 +484,7 @@ s32 i2c_smbus_i801::i2c_smbus_xfer(u8 addr, char read_write, u8 command, int siz
|
||||
return i801_access(addr, read_write, command, size, data);
|
||||
}
|
||||
|
||||
s32 i2c_smbus_i801::i2c_xfer(u8 addr, char read_write, int* size, u8* data)
|
||||
s32 i2c_smbus_i801::i2c_xfer(u8 addr, char read_write, int reg_size, u8* reg_data, int* size, u8* data)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -92,5 +92,5 @@ private:
|
||||
int i801_wait_byte_done();
|
||||
int i801_wait_intr();
|
||||
s32 i2c_smbus_xfer(u8 addr, char read_write, u8 command, int size, i2c_smbus_data* data);
|
||||
s32 i2c_xfer(u8 addr, char read_write, int* size, u8* data);
|
||||
s32 i2c_xfer(u8 addr, char read_write, int reg_size, u8* reg_data, int* size, u8* data);
|
||||
};
|
||||
@@ -30,7 +30,7 @@ s32 i2c_smbus_linux::i2c_smbus_xfer(u8 addr, char read_write, u8 command, int si
|
||||
return ioctl(handle, I2C_SMBUS, &args);
|
||||
}
|
||||
|
||||
s32 i2c_smbus_linux::i2c_xfer(u8 addr, char read_write, int* size, u8* data)
|
||||
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;
|
||||
|
||||
@@ -16,5 +16,5 @@ public:
|
||||
|
||||
private:
|
||||
s32 i2c_smbus_xfer(u8 addr, char read_write, u8 command, int size, i2c_smbus_data* data);
|
||||
s32 i2c_xfer(u8 addr, char read_write, int* size, u8* data);
|
||||
s32 i2c_xfer(u8 addr, char read_write, int reg_size, u8* reg_data, int* size, u8* data);
|
||||
};
|
||||
|
||||
@@ -189,7 +189,7 @@ s32 i2c_smbus_nct6775::i2c_smbus_xfer(u8 addr, char read_write, u8 command, int
|
||||
return nct6775_access(addr, read_write, command, size, data);
|
||||
}
|
||||
|
||||
s32 i2c_smbus_nct6775::i2c_xfer(u8 addr, char read_write, int* size, u8* data)
|
||||
s32 i2c_smbus_nct6775::i2c_xfer(u8 addr, char read_write, int reg_size, u8* reg_data, int* size, u8* data)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -53,6 +53,6 @@ public:
|
||||
private:
|
||||
s32 nct6775_access(u16 addr, char read_write, u8 command, int size, i2c_smbus_data *data);
|
||||
s32 i2c_smbus_xfer(u8 addr, char read_write, u8 command, int size, i2c_smbus_data* data);
|
||||
s32 i2c_xfer(u8 addr, char read_write, int* size, u8* data);
|
||||
s32 i2c_xfer(u8 addr, char read_write, int reg_size, u8* reg_data, int* size, u8* data);
|
||||
|
||||
};
|
||||
|
||||
@@ -118,7 +118,7 @@ s32 i2c_smbus_nvapi::i2c_smbus_xfer(u8 addr, char read_write, u8 command, int mo
|
||||
return(ret);
|
||||
}
|
||||
|
||||
s32 i2c_smbus_nvapi::i2c_xfer(u8 addr, char read_write, int* size, u8* data)
|
||||
s32 i2c_smbus_nvapi::i2c_xfer(u8 addr, char read_write, int reg_size, u8* reg_data, int* size, u8* data)
|
||||
{
|
||||
NV_STATUS ret;
|
||||
unsigned int unknown = 0;
|
||||
|
||||
@@ -21,6 +21,6 @@ public:
|
||||
|
||||
private:
|
||||
s32 i2c_smbus_xfer(u8 addr, char read_write, u8 command, int mode, i2c_smbus_data* data);
|
||||
s32 i2c_xfer(u8 addr, char read_write, int* size, u8* data);
|
||||
s32 i2c_xfer(u8 addr, char read_write, int reg_size, u8* reg_data, int* size, u8* data);
|
||||
NV_PHYSICAL_GPU_HANDLE handle;
|
||||
};
|
||||
|
||||
@@ -178,7 +178,7 @@ s32 i2c_smbus_piix4::i2c_smbus_xfer(u8 addr, char read_write, u8 command, int si
|
||||
return piix4_access(addr, read_write, command, size, data);
|
||||
}
|
||||
|
||||
s32 i2c_smbus_piix4::i2c_xfer(u8 addr, char read_write, int* size, u8* data)
|
||||
s32 i2c_smbus_piix4::i2c_xfer(u8 addr, char read_write, int reg_size, u8* reg_data, int* size, u8* data)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -45,5 +45,5 @@ private:
|
||||
int piix4_transaction();
|
||||
s32 piix4_access(u16 addr, char read_write, u8 command, int size, i2c_smbus_data *data);
|
||||
s32 i2c_smbus_xfer(u8 addr, char read_write, u8 command, int size, i2c_smbus_data* data);
|
||||
s32 i2c_xfer(u8 addr, char read_write, int* size, u8* data);
|
||||
s32 i2c_xfer(u8 addr, char read_write, int reg_size, u8* reg_data, int* size, u8* data);
|
||||
};
|
||||
Reference in New Issue
Block a user