I2C驱动开发¶
以添加设备(gsl3673为例):
设备树
&i2c6 {
status = "okay";
gsl3673: gsl3673@40 {
compatible = "GSL,GSL3673";
reg = <0x40>;
screen_max_x = <1536>;
screen_max_y = <2048>;
irq_gpio_number = <&gpio4 RK_PC5 IRQ_TYPE_LEVEL_LOW>;
rst_gpio_number = <&gpio4 RK_PC6 GPIO_ACTIVE_HIGH>;
};
};
status:使能I2C6;
gsl3673: gsl3673@40:I2C6挂载的设备gsl3673,@40保持和reg一致;
compatible:用于和of_device_id匹配;
reg:I2C Slave地址;
gpio:设备的中断,IO控制;
驱动程序
路径”drivers/input/touchscreen/gsl3673.c”;
定义of_device_id:
static const struct of_device_id gsl_ts_ids[] = {
{.compatible = "GSL,GSL3673"},
{ }
};
定义i2c_device_id:
static const struct i2c_device_id gsl_ts_id[] = {
{GSL3673_I2C_NAME, 0},
{}
};
定义i2c_driver:
static struct i2c_driver gsl_ts_driver = {
.driver = {
.name = GSL3673_I2C_NAME,
.owner = THIS_MODULE,
.of_match_table = of_match_ptr(gsl_ts_ids),
},
.probe = gsl_ts_probe,
.remove = gsl_ts_remove,
.id_table = gsl_ts_id,
};
在系统启动时,I2C总线会在dts设备树种寻找和of_match_table匹配的设备,如果匹配成功,gsl_ts_driver的probe(gsl_ts_probe)就会被调用,做设备的初始化工作。
注:变量id_table指示该驱动所支持的设备。