I2C framework abstractions in the Linux kernel
The Linux kernel I2C framework is made up of a few data structures, with the most important being as follows:
i2c_adapter
: Used to abstract the I2C master device. It is used to identify a physical I2C bus.i2c_algorithm
: This abstracts the I2C bus transaction interface. Here, transaction means to transfer, such as read or write operations.i2c_client
: Used to abstract a slave device sitting on the I2C bus.i2c_driver
: The driver of the slave device. It contains a set of specific driving functions to deal with the device.i2c_msg
: This is the low-level representation of one segment of an I2C transaction. This data structure defines the device address, the transaction flags (if it's a transmit or receive, for example), a pointer to the data to send/receive, and the size of the data.
Since the scope of this chapter is limited to slave device drivers, we will focus on the last three data structures. However...