return PERIPHERAL_ERROR_NONE;
}
+static int i2c_readwrite(peripheral_i2c_h i2c, uint8_t read_write, uint32_t size, uint8_t command, union i2c_smbus_data *data)
+{
+ struct i2c_smbus_ioctl_data data_arg;
+
+ data_arg.read_write = read_write;
+ data_arg.size = size;
+ data_arg.data = data;
+ data_arg.command = command;
+
+ int ret = ioctl(i2c->fd, I2C_SMBUS, &data_arg);
+ CHECK_ERROR(ret != 0);
+
+ return PERIPHERAL_ERROR_NONE;
+}
+
int peripheral_i2c_read(peripheral_i2c_h i2c, uint8_t *data_out, uint32_t length)
{
RETVM_IF(__is_feature_supported() == false, PERIPHERAL_ERROR_NOT_SUPPORTED, "I2C feature is not supported");
if (ret == length)
return PERIPHERAL_ERROR_NONE;
- struct i2c_smbus_ioctl_data data_arg;
- union i2c_smbus_data data;
-
- memset(&data, 0x0, sizeof(data.block));
+ union i2c_smbus_data data = {.block = {0,}};
- data_arg.read_write = I2C_SMBUS_READ;
- data_arg.size = I2C_SMBUS_BYTE;
- data_arg.data = &data;
- data_arg.command = *data_out;
-
- ret = ioctl(i2c->fd, I2C_SMBUS, &data_arg);
- CHECK_ERROR(ret != 0);
+ ret = i2c_readwrite(i2c, I2C_SMBUS_READ, I2C_SMBUS_BYTE, *data_out, &data);
+ CHECK_ERROR(ret != PERIPHERAL_ERROR_NONE);
*data_out = data.byte;
if (ret == length)
return PERIPHERAL_ERROR_NONE;
- struct i2c_smbus_ioctl_data data_arg;
- union i2c_smbus_data data;
-
- memset(&data, 0x0, sizeof(data.block));
-
- data_arg.read_write = I2C_SMBUS_WRITE;
- data_arg.size = I2C_SMBUS_BYTE;
- data_arg.data = &data;
- data_arg.command = *data_in;
+ union i2c_smbus_data data = {.block = {0,}};
- ret = ioctl(i2c->fd, I2C_SMBUS, &data_arg);
- CHECK_ERROR(ret != 0);
-
- return PERIPHERAL_ERROR_NONE;
+ return i2c_readwrite(i2c, I2C_SMBUS_WRITE, I2C_SMBUS_BYTE, *data_in, &data);
}
int peripheral_i2c_read_register_byte(peripheral_i2c_h i2c, uint8_t reg, uint8_t *data_out)
RETVM_IF(i2c == NULL, PERIPHERAL_ERROR_INVALID_PARAMETER, "i2c handle is NULL");
RETVM_IF(data_out == NULL, PERIPHERAL_ERROR_INVALID_PARAMETER, "Invalid parameter");
- int ret;
-
- struct i2c_smbus_ioctl_data data_arg;
- union i2c_smbus_data data;
-
- memset(&data, 0x0, sizeof(data.block));
+ union i2c_smbus_data data = {.block = {0,}};
- data_arg.read_write = I2C_SMBUS_READ;
- data_arg.size = I2C_SMBUS_BYTE_DATA;
- data_arg.data = &data;
- data_arg.command = reg;
-
- ret = ioctl(i2c->fd, I2C_SMBUS, &data_arg);
- CHECK_ERROR(ret != 0);
+ int ret = i2c_readwrite(i2c, I2C_SMBUS_READ, I2C_SMBUS_BYTE_DATA, reg, &data);
+ CHECK_ERROR(ret != PERIPHERAL_ERROR_NONE);
*data_out = data.byte;
RETVM_IF(__is_feature_supported() == false, PERIPHERAL_ERROR_NOT_SUPPORTED, "I2C feature is not supported");
RETVM_IF(i2c == NULL, PERIPHERAL_ERROR_INVALID_PARAMETER, "i2c handle is NULL");
- int ret;
-
- struct i2c_smbus_ioctl_data data_arg;
- union i2c_smbus_data data;
-
- memset(&data, 0x0, sizeof(data.block));
-
- data_arg.read_write = I2C_SMBUS_WRITE;
- data_arg.size = I2C_SMBUS_BYTE_DATA;
- data_arg.data = &data;
- data_arg.command = reg;
-
+ union i2c_smbus_data data = {.block = {0,}};
data.byte = data_in;
- ret = ioctl(i2c->fd, I2C_SMBUS, &data_arg);
- CHECK_ERROR(ret != 0);
-
- return PERIPHERAL_ERROR_NONE;
+ return i2c_readwrite(i2c, I2C_SMBUS_WRITE, I2C_SMBUS_BYTE_DATA, reg, &data);
}
int peripheral_i2c_read_register_word(peripheral_i2c_h i2c, uint8_t reg, uint16_t *data_out)
RETVM_IF(i2c == NULL, PERIPHERAL_ERROR_INVALID_PARAMETER, "i2c handle is NULL");
RETVM_IF(data_out == NULL, PERIPHERAL_ERROR_INVALID_PARAMETER, "Invalid parameter");
- int ret;
-
- struct i2c_smbus_ioctl_data data_arg;
- union i2c_smbus_data data;
-
- memset(&data, 0x0, sizeof(data.block));
-
- data_arg.read_write = I2C_SMBUS_READ;
- data_arg.size = I2C_SMBUS_WORD_DATA;
- data_arg.data = &data;
- data_arg.command = reg;
+ union i2c_smbus_data data = {.block = {0,}};
- ret = ioctl(i2c->fd, I2C_SMBUS, &data_arg);
- CHECK_ERROR(ret != 0);
+ int ret = i2c_readwrite(i2c, I2C_SMBUS_READ, I2C_SMBUS_WORD_DATA, reg, &data);
+ CHECK_ERROR(ret != PERIPHERAL_ERROR_NONE);
*data_out = data.word;
RETVM_IF(__is_feature_supported() == false, PERIPHERAL_ERROR_NOT_SUPPORTED, "I2C feature is not supported");
RETVM_IF(i2c == NULL, PERIPHERAL_ERROR_INVALID_PARAMETER, "i2c handle is NULL");
- int ret;
-
- struct i2c_smbus_ioctl_data data_arg;
- union i2c_smbus_data data;
-
- memset(&data, 0x0, sizeof(data.block));
-
- data_arg.read_write = I2C_SMBUS_WRITE;
- data_arg.size = I2C_SMBUS_WORD_DATA;
- data_arg.data = &data;
- data_arg.command = reg;
+ union i2c_smbus_data data = {.block = {0,}};
data.word = data_in;
- ret = ioctl(i2c->fd, I2C_SMBUS, &data_arg);
- CHECK_ERROR(ret != 0);
-
- return PERIPHERAL_ERROR_NONE;
+ return i2c_readwrite(i2c, I2C_SMBUS_WRITE, I2C_SMBUS_WORD_DATA, reg, &data);
}