- 构建i2c_driver
- 注册i2c_driver
- 构建i2c_client ( 第一种方法:注册字符设备驱动、第二种方法:通过板文件的i2c_board_info填充,然后注册)
- 注销i2c_driver
具体如下:
● 构建i2c_driver
static struct i2c_driver pca953x_driver = {
.driver = {
.name= "pca953x", //名称
},
.id= ID_PCA9555,//id号
.attach_adapter= pca953x_attach_adapter, //调用适配器连接设备
.detach_client= pca953x_detach_client,//让设备脱离适配器
};
● 注册i2c_driver
static int __init pca953x_init(void)
{
return i2c_add_driver(&pca953x_driver);
}
module_init(pca953x_init);
执行i2c_add_driver(&pca953x_driver)后,如果内核中已经注册了i2c适配器,则顺序调用这些适配器来连接我们的i2c设备。此过程是通过调用i2c_driver中的attach_adapter方法完成的。具体实现形式如下:
static int pca953x_attach_adapter(struct i2c_adapter *adapter)
{
return i2c_probe(adapter, &addr_data, pca953x_detect);
/*
adapter:适配器
addr_data:地址信息
pca953x_detect:探测到设备后调用的函数
*/
}
地址信息addr_data是由下面代码指定的。
/* Addresses to scan */
static unsigned short normal_i2c[] = {0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,I2C_CLIENT_END};
I2C_CLIENT_INSMOD;
注意:normal_i2c里的地址必须是你i2c芯片的地址。否则将无法正确探测到设备。而I2