|
@@ -9,8 +9,8 @@ i2c adapters present on your system at a given time. i2cdetect is part of
|
|
|
the i2c-tools package.
|
|
the i2c-tools package.
|
|
|
|
|
|
|
|
I2C device files are character device files with major device number 89
|
|
I2C device files are character device files with major device number 89
|
|
|
-and a minor device number corresponding to the number assigned as
|
|
|
|
|
-explained above. They should be called "i2c-%d" (i2c-0, i2c-1, ...,
|
|
|
|
|
|
|
+and a minor device number corresponding to the number assigned as
|
|
|
|
|
+explained above. They should be called "i2c-%d" (i2c-0, i2c-1, ...,
|
|
|
i2c-10, ...). All 256 minor device numbers are reserved for i2c.
|
|
i2c-10, ...). All 256 minor device numbers are reserved for i2c.
|
|
|
|
|
|
|
|
|
|
|
|
@@ -38,7 +38,7 @@ Next thing, open the device file, as follows:
|
|
|
int file;
|
|
int file;
|
|
|
int adapter_nr = 2; /* probably dynamically determined */
|
|
int adapter_nr = 2; /* probably dynamically determined */
|
|
|
char filename[20];
|
|
char filename[20];
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
snprintf(filename, 19, "/dev/i2c-%d", adapter_nr);
|
|
snprintf(filename, 19, "/dev/i2c-%d", adapter_nr);
|
|
|
file = open(filename, O_RDWR);
|
|
file = open(filename, O_RDWR);
|
|
|
if (file < 0) {
|
|
if (file < 0) {
|
|
@@ -72,7 +72,7 @@ the device supports them. Both are illustrated below.
|
|
|
/* res contains the read word */
|
|
/* res contains the read word */
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- /* Using I2C Write, equivalent of
|
|
|
|
|
|
|
+ /* Using I2C Write, equivalent of
|
|
|
i2c_smbus_write_word_data(file, reg, 0x6543) */
|
|
i2c_smbus_write_word_data(file, reg, 0x6543) */
|
|
|
buf[0] = reg;
|
|
buf[0] = reg;
|
|
|
buf[1] = 0x43;
|
|
buf[1] = 0x43;
|
|
@@ -147,7 +147,7 @@ You can do plain i2c transactions by using read(2) and write(2) calls.
|
|
|
You do not need to pass the address byte; instead, set it through
|
|
You do not need to pass the address byte; instead, set it through
|
|
|
ioctl I2C_SLAVE before you try to access the device.
|
|
ioctl I2C_SLAVE before you try to access the device.
|
|
|
|
|
|
|
|
-You can do SMBus level transactions (see documentation file smbus-protocol
|
|
|
|
|
|
|
+You can do SMBus level transactions (see documentation file smbus-protocol
|
|
|
for details) through the following functions:
|
|
for details) through the following functions:
|
|
|
__s32 i2c_smbus_write_quick(int file, __u8 value);
|
|
__s32 i2c_smbus_write_quick(int file, __u8 value);
|
|
|
__s32 i2c_smbus_read_byte(int file);
|
|
__s32 i2c_smbus_read_byte(int file);
|
|
@@ -158,7 +158,7 @@ for details) through the following functions:
|
|
|
__s32 i2c_smbus_write_word_data(int file, __u8 command, __u16 value);
|
|
__s32 i2c_smbus_write_word_data(int file, __u8 command, __u16 value);
|
|
|
__s32 i2c_smbus_process_call(int file, __u8 command, __u16 value);
|
|
__s32 i2c_smbus_process_call(int file, __u8 command, __u16 value);
|
|
|
__s32 i2c_smbus_read_block_data(int file, __u8 command, __u8 *values);
|
|
__s32 i2c_smbus_read_block_data(int file, __u8 command, __u8 *values);
|
|
|
- __s32 i2c_smbus_write_block_data(int file, __u8 command, __u8 length,
|
|
|
|
|
|
|
+ __s32 i2c_smbus_write_block_data(int file, __u8 command, __u8 length,
|
|
|
__u8 *values);
|
|
__u8 *values);
|
|
|
All these transactions return -1 on failure; you can read errno to see
|
|
All these transactions return -1 on failure; you can read errno to see
|
|
|
what happened. The 'write' transactions return 0 on success; the
|
|
what happened. The 'write' transactions return 0 on success; the
|