到了linux 3.0中i2c设备驱动的写法变得出奇的简单, 例子比如rtc/rtc-ds1672.c中,大体上是如下几个框框:
1.在init函数中, i2c_add_driver(&your_driver);
2.在exit函数中,i2c_del_driver(&your_driver);
3.struct i2c_driver your_driver = {
.driver = {.name = "xxxxxx",),
.probe = &xxxx_probe,
.remove = &xxx_remove,
.id_table = xxx_id, /*struct i2c_device_id xxx_id*/
};
4.实现probe函数。有三步:第一,i2c_check_functionality();第二,具体设备的注册,比如rtc_device_register();第三,
i2c_setclientdata(client, xxx),以备后用;
5.实现remove函数。把设备unregister掉。
6.其它的和设备相关的部分,可能会用到i2c_msg结构体,i2c_transfer()函数,i2c_master_send()函数。其中的构建的i2c_msg数组中,第一个指明了基地址,第二个以后就是数据; 两个传输函数返回传送的信息数目就对了。
7.结束语,linux用驱动开发者情何以堪啊, 基本上费劲的地方都实现了,留给驱动开发者的只是xxx_register,xxx_unregister调用,糟蹋我的智商