i2c: replace 'i2c_smbus_ioctl()' with another functions. 81/160281/1
authorSegwon <segwon.han@samsung.com>
Wed, 15 Nov 2017 07:55:08 +0000 (16:55 +0900)
committerSegwon <segwon.han@samsung.com>
Wed, 15 Nov 2017 07:55:08 +0000 (16:55 +0900)
 - do not use 'i2c_smbus_ioctl_data' structure in caller.
 - remove : i2c_smbus_ioctl()
 - add : peripheral_interface_i2c_read_register_byte()
 - add : peripheral_interface_i2c_write_register_byte()
 - add : peripheral_interface_i2c_read_register_word()
 - add : peripheral_interface_i2c_write_register_word()

Change-Id: Ia73f3febcf1412a5101a83b2106a0d7c695a2ce4
Signed-off-by: Segwon <segwon.han@samsung.com>
include/interface/peripheral_interface_i2c.h
src/interface/peripheral_interface_i2c.c

index 6e3dc23..b10fc1a 100644 (file)
@@ -58,6 +58,9 @@ struct i2c_smbus_ioctl_data {
 int peripheral_interface_i2c_close(peripheral_i2c_h i2c);
 int peripheral_interface_i2c_read(peripheral_i2c_h i2c, uint8_t *data, uint32_t length);
 int peripheral_interface_i2c_write(peripheral_i2c_h i2c, uint8_t *data, uint32_t length);
-int peripheral_interface_i2c_smbus_ioctl(peripheral_i2c_h i2c, struct i2c_smbus_ioctl_data *data);
+int peripheral_interface_i2c_read_register_byte(peripheral_i2c_h i2c, uint8_t reg, uint8_t *data_out);
+int peripheral_interface_i2c_write_register_byte(peripheral_i2c_h i2c, uint8_t reg, uint8_t data_in);
+int peripheral_interface_i2c_read_register_word(peripheral_i2c_h i2c, uint8_t reg, uint16_t *data_out);
+int peripheral_interface_i2c_write_register_word(peripheral_i2c_h i2c, uint8_t reg, uint16_t data_in);
 
-#endif/* __PERIPHERAL_INTERFACE_I2C_H__ */
+#endif /* __PERIPHERAL_INTERFACE_I2C_H__ */
index d0a9985..3fcb083 100644 (file)
@@ -44,10 +44,90 @@ int peripheral_interface_i2c_write(peripheral_i2c_h i2c, uint8_t *data, uint32_t
        return 0;
 }
 
-int peripheral_interface_i2c_smbus_ioctl(peripheral_i2c_h i2c, struct i2c_smbus_ioctl_data *data)
+int peripheral_interface_i2c_read_register_byte(peripheral_i2c_h i2c, uint8_t reg, uint8_t *data_out)
 {
-       int status = ioctl(i2c->fd, I2C_SMBUS, data);
+       int status;
+
+       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_BYTE_DATA;
+       data_arg.data = &data;
+       data_arg.command = reg;
+
+       status = ioctl(fd, I2C_SMBUS, &data_arg);
        CHECK_ERROR(status);
 
+       *data_out = data.byte;
+
        return 0;
 }
+
+int peripheral_interface_i2c_write_register_byte(peripheral_i2c_h i2c, uint8_t reg, uint8_t data_in)
+{
+       int status;
+
+       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;
+
+       data.byte = data_in;
+
+       status = ioctl(fd, I2C_SMBUS, &data_arg);
+       CHECK_ERROR(status);
+
+       return 0;
+}
+
+int peripheral_interface_i2c_read_register_word(peripheral_i2c_h i2c, uint8_t reg, uint16_t *data_out)
+{
+       int status;
+
+       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;
+
+       status = ioctl(fd, I2C_SMBUS, &data_arg);
+       CHECK_ERROR(status);
+
+       *data_out = data.word;
+
+       return 0;
+}
+
+int peripheral_interface_i2c_write_register_word(peripheral_i2c_h i2c, uint8_t reg, uint16_t data_in)
+{
+       int status;
+
+       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;
+
+       data.word = data_in;
+
+       statis = ioctl(fd, I2C_SMBUS, &data_arg);
+       CHECK_ERROR(status);
+
+       return 0;
+}
\ No newline at end of file