15static inline vrpn_int32 vrpn_i2c_smbus_access(
16 int file,
char read_write, vrpn_uint8 command,
17 int size,
union i2c_smbus_data *data)
19 struct i2c_smbus_ioctl_data args;
21 args.read_write = read_write;
22 args.command = command;
25 return ioctl(file,I2C_SMBUS,&args);
28static inline vrpn_int32 vrpn_i2c_smbus_write_byte_data(
29 int file, vrpn_uint8 command, vrpn_uint8 value)
31 union i2c_smbus_data data;
33 return vrpn_i2c_smbus_access(file,I2C_SMBUS_WRITE,command,
34 I2C_SMBUS_BYTE_DATA, &data);
37static inline vrpn_int32 vrpn_i2c_smbus_read_i2c_block_data(
38 int file, vrpn_uint8 command,
39 vrpn_uint8 length, vrpn_uint8 *values)
41 union i2c_smbus_data data;
44 if (length > 32) { length = 32; }
45 data.block[0] = length;
46 if (vrpn_i2c_smbus_access(file,I2C_SMBUS_READ,command,
47 length == 32 ? I2C_SMBUS_I2C_BLOCK_BROKEN :
48 I2C_SMBUS_I2C_BLOCK_DATA,&data)) {
51 for (i = 0; i < data.block[0]; i++) {
52 values[i] = data.block[i+1];