The I2C driver abstraction and architecture
The struct i2c_driver
structure, as we saw in the previous section, contains the driving methods that are needed to handle the I2C devices it is responsible for. Once added to the bus, the device will need to be probed, which makes the i2c_driver.probe_new
method the entry point of the driver.
Probing the I2C device
The probe()
callback in the struct i2c_driver
structure is invoked any time an I2C device is instantiated on the bus and claims this driver. It is responsible for the following tasks:
- Checking whether the I2C bus controller (the I2C adapter) supports the functionalities needed by the device using the
i2c_check_functionality()
function - Checking whether the device is the one we expected
- Initializing the device
- Setting up device-specific data if necessary
- Registering with the appropriate kernel frameworks
Formerly, the probing callback was assigned to the probe
element of struct i2c_driver
and...