17static inline vrpn_int32 vrpn_i2c_smbus_access(
18 int file,
char read_write, vrpn_uint8 command,
19 int size,
union i2c_smbus_data *data)
21 struct i2c_smbus_ioctl_data args;
23 args.read_write = read_write;
24 args.command = command;
27 return ioctl(file,I2C_SMBUS,&args);
30static inline vrpn_int32 vrpn_i2c_smbus_write_byte_data(
31 int file, vrpn_uint8 command, vrpn_uint8 value)
33 union i2c_smbus_data data;
35 return vrpn_i2c_smbus_access(file,I2C_SMBUS_WRITE,command,
36 I2C_SMBUS_BYTE_DATA, &data);
39static inline vrpn_int32 vrpn_i2c_smbus_read_i2c_block_data(
40 int file, vrpn_uint8 command,
41 vrpn_uint8 length, vrpn_uint8 *values)
43 union i2c_smbus_data data;
46 if (length > 32) { length = 32; }
47 data.block[0] = length;
48 if (vrpn_i2c_smbus_access(file,I2C_SMBUS_READ,command,
49 length == 32 ? I2C_SMBUS_I2C_BLOCK_BROKEN :
50 I2C_SMBUS_I2C_BLOCK_DATA,&data)) {
53 for (i = 0; i < data.block[0]; i++) {
54 values[i] = data.block[i+1];